终于到了部署环节…本来以为会一帆风顺了,但是还是一步步会遇到问题,现在我就把我部署的过程和遇到的问题写一写吧~
准备虚拟环境(虚拟环境必须有我们在本地虚拟环境中安装过的一些包)
先导出本地虚拟环境中已经安装过的包
# 此处py_flask是我本地的虚拟环境
(py3_flask) chan@ubuntu:/$ pip freeze > ~/Desktop/requirements.txt
在本地桌面可以看到requirements.txt 可以看到里面就是我们本地虚拟环境中安装好的一些包
将文件拷贝到远程服务器:
# 1.从本地传到远程服务器的~目录
chan@ubuntu:~$ scp ~/Desktop/requirements.txt [email protected]:~/
# 2.输入远程服务器的密码
[email protected]'s password: 服务器密码
然后在远程服务器的~目录通过ls确认是否传输成功即可。
cd ~
ls
创建py3-flask的虚拟环境
mkvirtualenv -p python3 Flask_py3
将所有的包安装到远程服务器的虚拟环境Flask_py3中
(Flask_py3) [email protected]:~# pip3 install -r requirements.txt
安装过程中如果哪个包报错了,就把那个包删了后面单独安装
比如包里可能有pkg-resources==0.0.0,这个是一起下不了的,只需把这行从requirements.txt去掉就行了。
在安装 Flask-MySQLdb 的时候可能会报错,列出了2种情况:
如果遇到找不到mysql_config文件时,要先安装 MySQL-community-devel
yum install mysql-community-devel
如果以上安装了还遇到failed with error with code 1 in /tmp/pip_build_root/mysql-python
yum install python-devel
以上步骤都做完了,再运行
pip3 install -r requirements.txt
这里我就做个简单的配置,情况是是分流到2个端口,简单示范,之后你也可以照葫芦画样对吧兄弟们~
由于我在上一章下的nginx是1.14.2版的,配置文件就在其文件夹下
先进入其配置文件夹
cd /usr/local/nginx/conf
编辑配置
vim nginx.conf
配置内容其他部分不变,就改以下的server部分:(upstream flask是需要添加的)
upstream flask {
# 转发到了2个端口
server 127.0.0.1:5000;
server 127.0.0.1:5001;
}
server {
# 监听80端口
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# 请求转发到gunicorn服务器
# proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
配置完重启nginx
systemctl restart nginx.service
pip3 install gunicorn
远程服务器把项目克隆下来,或者你们想scp传项目也ok:
git clone www.xxx.com
在远程服务器创建数据库,要跟你项目文件里mysql数据库的名字一致(这里用xixiguai代替)
create database xixiguai charset=utf8
在项目目录下,做数据库迁移:
python manage.py db init 数据库管理的初始化,会生成一个迁移文件夹
python manage.py db migrate -m '对这个文件的说明信息' 生成数据库迁移文件
python manage.py db upgrade 根据迁移文件中的upgrade生成数据库中表
进入到项目目录,假设我的运行文件是manage.py,使用gunicorn来运行项目
# -w 2 代表2个worker
gunicorn -w 2 -b 127.0.0.1:5000 manage:app
然后可以去网站输入远程服务器的ip号查看项目是否能运行
如果可以,ctrl+c停止gunicorn,并以后台的形式来重新运行
# -D为守护进程的意思,开了2个端口来运行项目
gunicorn -w 2 -b 127.0.0.1:5000 manage:app -D
gunicorn -w 2 -b 127.0.0.1:5001 manage:app -D