Fork me on GitHub

flask + nginx + uwsgi + python3 + supervisor做flask的nginx代理

ubuntu 16.04为例

安装nginx

1
apt-get install nginx

安装python虚拟环境

  • 安装virtualenvwrapper
1
pip install virtualenvwrapper
  • 在根目录下的.zshrc或者.bashrc添加:
1
2
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
  • 之后运行:
1
source .zhsrc

或者

1
source .bashrc

配置虚拟环境

  • 创建python3的虚拟环境:
1
mkdirvirtualenv /usr/bin/python3
  • 安装flask
1
pip install flask
  • 安装uwsgi
1
pip install uwsgi

安装supervisor

1
apt-get install supervisor

我们在root的根目录下创建项目

hello world项目为例

  • 创建flask文件夹,写入hello.py文件
1
mkdir flask
1
vim hello.py
1
2
3
4
5
6
7
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5009)
  • 创建hello.ini文件,为了uwsgi配置
1
vim hello.ini
1
2
3
4
5
6
7
8
[uwsgi]
wsgi-file = hello.py
chdir = /root/flask
socket = 127.0.0.1:5009
callable = application
processes = 10
threads = 2
stats = 127.0.0.1:9191

解析输入uwsgi --ini hello.ini就可以启动uwsgi了,但是退出就又没有了,我们用supervisor

  • /etc/supervisor/conf.d下创建hello.conf文件:
1
vim hello.conf
1
2
3
4
5
6
7
8
9
10
11
[program:flask]
# 启动命令入口
command=/root/.virtualenvs/py3_flask/bin/uwsgi /root/flask/hello.ini
# 命令程序所在目录
directory=/root/flask
#运行命令的用户名
user=root
autostart=true
autorestart=true
  • /etc/nginx/conf.d下创建hello.conf用于nginx的代理
1
vim hello.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 5002;
server_name IP/domain_name;
charset utf-8;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5009;
uwsgi_param UWSGI_PYTHON /root/.virtualenvs/py3_flask;
uwsgi_param UWSGI_CHDIR /root/flask;
uwsgi_param UWSGI_SCRIPT hello:app;
}
}

重启服务

  • 重启nginx
1
/etc/init.d/nginx restart
  • 重启supervisor
1
/etc/init.d/supervisor restart

访问:

1
http://ip:5002
禹都一只猫,热爱IT,支持原创