安装相关文件
python环境(看情况使用)
pip install virtualenv # 如果已安装则跳过
cd /var/virtualenvs
python -m venv flask # 新建flask虚拟环境
source flask/bin/activate # 激活flask虚拟环境(退出虚拟环境:deactivate)
cd /var/www/flask
pip install -r requirements.txt # 安装依赖库
# pip install -r requirements.txt --no-dependencies 包版本冲突时可忽略版本要求,解决冲突
# 生成依赖库文件用 pip freeze > requirements.txt
进入root模式安装Nginx/Gunicorn/Supervisor
su
输入密码
apt-get install nginx
pip install gunicorn
apt-get install supervisor
写一段测试程序
cd /var/www/mysite
vi myapp.py
from flask import Flask
app = Flask(__name__)
.route('/')
def index():
return '<h1>Hello World!</h1>'
if __name__ == '__main__':
app.run()
:wq
测试gunicorn运行
端口未开放的话需要先开放端口(在防火墙中设置,略),这里是8000端口。
gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
在网站上测试,结果如下:
输入不加端口的网址,结果为502
配置ngnix
cd /etc/nginx/sites-available/
vi mysite
server {
listen 80;
server_name mysite.com www.mysite.com; # 这是HOST机器的外部域名,用地址也行
root /var/www/mysite/;
# access_log /srv/NovBlog/log/access_log;
# error_log /srv/NovBlog/log/error_log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
:wq
添加引用链接
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/mysite ./mysite
再回去运行Gunicorn
cd /var/www/mysite
gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
再打开网址,不加端口也可以正常加载。
配置Supervisor
cd /etc/supervisor/conf.d
vi mysite.conf
# 进程的名字,取一个以后自己一眼知道是什么的名字。(这行字不能删,第一行需要一行注释,删了就有问题)
[program:mysite]
# 定义Gunicorn启动命令
command=gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
# 网站目录
directory=/var/www/mysite
# 进程所属用户
user=root
# 自动重启设置。
autostart=true
autorestart=true
# 日志存放位置(可能造成print中文UnicodeEncodeError)
#stdout_logfile=/var/www/mysite/logs/gunicorn_supervisor.log
# 设置环境变量。这里这行的意思是:设置环境变量MODE的值为UAT。请根据自己的需要配置,如没有需要这行可以删除。
#environment = MODE="UAT"
[supervisord]
:wq
进入supervisorctl控制台
supervisorctl
reread
update
start mysite
之后就会自动运行Gunicorn了。
控制台相关指令如下:
supervisorctl status: 查看当前运行的进程列表
supervisorctl stop xxx: 停止某一个进程(xxx),xxx为[program:theprogramname]里配置的值。
supervisorctl start xxx: 启动某个进程
supervisorctl restart xxx: 重启某个进程
supervisorctl stop groupworker: 重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
参考文献
Ubuntu配置环境3:Nginx+Gunicorn+Supervisor:https://www.jianshu.com/p/cdddc88f90cf
Linux下部署Flask项目——Ubuntu+Flask+Gunicorn+Supervisor+Nginx:https://zhuanlan.zhihu.com/p/27508488
centos下通过gunicorn+nginx+supervisor部署Flask项目:https://zhuanlan.zhihu.com/p/21262280