前言
上一年在学校做好了一个前后端打通的web应用,但是只是在本地上运行,没有部署到服务器。之前也没有接触过相关知识,于是跟着教程尝试部署了一下。
购买服务器
这里就略过,我选择的是阿里云云服务器ECS上Ubuntu16 64位的系统。购买完之后会有一个实例,就是我们购买好的服务器,然后第一步我们就要重置实例密码(ssh链接密码),作为接下来我们连接服务器的密码。
添加安全组
添加5000端口,添加80端口,5000是我们flask的端口,80是nginx的端口,所以都要设置好。如图:
ssh链接服务器
打开我们的cmd/powershell,输入:
1 | ssh root@xx.xx.xx.xx #如:ssh root@23.187.187.12(你刚刚买的服务器的公网ip) |
然后输入我们刚刚更改的实例密码,就进入到了我们的服务器。输入密码的时候不会显示字符。
更新apt源
1 | sudo apt-get update #把源更新一下,保证我们用的包都是最新可兼容的 |
安装mongodb
1、安装
1 | sudo apt-get install mongodb # apt-get 安装 mongodb |
安装好后我们验证一下,如果安装不成功,就百度一下报错,大多可能是版本问题
1 | # 默认下载完后自动启动,可以用以下命令进行验证 |
2、配置
验证好之后,我们要对mongodb进行配置
1 | # 修改配置 |
vim命令可以进入到服务器的文件进行修改,这里有几个常用的vim操作
进入编辑模式:在键盘上按下字母i或者a
退出编辑模式:
方式一:按下esc键,输入“:wq”3个英文字符,然后按下Enter键,表示保存文件并退出。
方式二:按下esc键,输入“:q”两个英文字符,然后按下Enter键,表示不保存并退出。(如果本次编辑没有修改内容,则可以顺利退出;否则,vim编辑器是不会允许你退出的,这时如果想要不保存退出,就要使用下面的方法三)
方式三:按下esc键,输入“:q!”3个英文字符,然后按Enter键,表示不保存并强制退出。
参考:vim操作
于是我们进入到文件之后按下a/i,把文件中的配置信息改成如下(注意有的配置项已存在,直接更改不要全部复制粘贴):
1 | ... ... |
参考:mongo配置
然后稍微重启一下mongodb
1 | service mongodb stop #stop |
3、设置用户信息
这一步其实可以不做数据库就已经可以使用,但不做的话MongoDB只允许本地连接,同时不需要使用任何账号密码就可以直接连接MongoDB。所以还是要稍微配置一下。
首先进入数据库,首次没有配置安全认证的情况下进入无需使用用户名以及密码验证
1 | mongo |
创建管理员用户
1 | > use admin #进入admin这个库 |
这个管理员是可以掌控整个mongodb的,暂时我们先创建这一个root管理员。有需要的话我们还可以创建多个用户,以实现不同的权限功能,如:
1 | > use admin |
具体mongodb可以创建的用户类型(role)大概有这几种:
数据库用户角色(Database User Roles)
read:授予User只读数据的权限
readWrite:授予User读写数据的权限
数据库管理角色(Database Administration Roles):
dbAdmin:在当前dB中执行管理操作
dbOwner:在当前DB中执行任意操作
userAdmin:在当前DB中管理User
备份和还原角色(Backup and Restoration Roles):
backup
restore
跨库角色(All-Database Roles):
readAnyDatabase:授予在所有数据库上读取数据的权限
readWriteAnyDatabase:授予在所有数据库上读写数据的权限
userAdminAnyDatabase:授予在所有数据库上管理User的权限
dbAdminAnyDatabase:授予管理所有数据库的权限
集群管理角色(Cluster Administration Roles):
clusterAdmin:授予管理集群的最高权限
clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
hostManager:管理Server
创建完后我们可以验证一下是否创建成功:
1 | > use admin |
4、启用用户认证
1 | vim /etc/mongodb.conf #进入文件进行配置 |
将auth项的值置为true
1 | ... ... |
重启一下数据库
1 | > exit #退出mongo |
5、测试
我们直接不用账户登录,会显示没有权限
1 | mongo |
用我们的管理员账户登录试试看
1 | mongo -u xxxxxx -p xxxxxxxx --authenticationDatabase admin # xxxx为你的用户名和密码 |
1 | mongo -u xxx_xxxx -p xxxxxxxx --authenticationDatabase admin |
至此mongo数据库就搞定了
虚拟环境
1、安装虚拟环境
在~/目录下(链接到服务器的最开始目录)创建.virtualenvs文件夹
1 | mkdir .virtualenvs |
下载pip包
1 | pip install virtualenv |
配置环境变量
1 | vim ~/.bashrc |
将如下代码添加到文件的最后
1 | # 指定虚拟环境目录 |
激活设置
1 | source ~/.bashrc |
2、创建虚拟环境
我们每一个项目最好都有一个独立的虚拟环境,以保证我们的整个系统不会因为杂乱的各种环境设置搞得乱七八糟
在python3中,创建虚拟环境
1 | mkvirtualenv -p python3 虚拟环境名称 #如:mkvirtualenv -p python3 venv(一个叫venv的虚拟环境) |
3、进入虚拟环境
1 | workon 对应虚拟环境名 #workon venv |
如果不知道虚拟环境名,可以输完workon 点击两下tab键既可以提示你的虚拟环境名
安装配置Nginx
1、安装
在我们刚刚建好的虚拟环境下安装nginx
1 | sudo apt-get install nginx |
我们要知道的nginx的启动停止指令(先别输入)
1 | /etc/init.d/nginx start #启动 |
2、配置
1 | vim /etc/nginx/sites-available/default |
进入上述文件后改成如下配置(不要直接复制,有一些配置项只是注释了,我们要看好每一项进行配置):
1 | # 如果是多台服务器的话,则在此配置,并修改 location 节点下面的 proxy_pass |
3、测试
1 | /etc/init.d/nginx start #启动nginx |
打开浏览器,网址栏输入你的公网地址,可以看到以下界面,或者是一个 welcome to nginx 的界面
安装gunicorn
在虚拟环境下安装gunicorn
1 | pip install gunicorn |
还没安装flask的也要安装
1 | pip list #查询已安装的包 |
测试一下,新建一个py文件
1 | vim test.py #新建 |
1 | #文件内容 |
运行test.py文件,在文件所在目录下运行一下命令:
1 | #gunicorn 语法格式如下 |
打开浏览器,刷新网页,就可以看到我们期待已久的鸡哥了
项目上传
1、导出环境
把在本地用到的包导出到一个requirements.txt的文件
1 | pip freeze > requirements.txt |
导出之后放在项目文件夹中等会一起上传到服务器
2、项目上传至github
本人是将项目上传到github再转到服务器上,然后我们要用到git这个代码管理工具,所以要先下载git,再在GitHub上创建一个仓库,然后通过git把项目上传到GitHub仓库再转存到服务器上。
上传到github可参考这篇文章
3、服务器拉取GitHub项目
1 | sudo apt-get install git #安装git |
4、安装所需pip包
1 | cd 你的仓库名 #进入项目文件夹 |
项目运行
项目运行前要确保项目已经更改为生产下的代码,而非本地调试开发运行的代码。如前端请求函数的ip地址端口要设置好为服务器的ip地址,连接mongodb时要加上数据库用户名和密码获得权限等,具体问题不会就度娘==
1 | #启动应用 |
如果要结束运行,则杀死flask进程
1 | netstat -tulpn #查看系统网络进程 |