Flask Nginx uWSGI&gunicorn
使用Nginx部署Flask uWSGI和gunicorn服务器
Flask
-
创建项目文件夹
mkdir flask_t && cd flask_t
-
配置python虚拟环境
由于是Ubuntu 16.04版本,所以需要安装python3-venv
sudo apt-get install python3-venv
python3 -m venv venv
激活. /venv/bin/activate
-
安装相应的包
pip install flask
pip install gunicorn
pip install uWSGI
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<title>hello nginx and flask and gunicorn</title>Hello, World!'
Nginx安装
-
安装PCRE库
sudo apt-get install libpcre3 libpcre3-dev
-
下载Nginx包
wget http://nginx.org/download/nginx-0.7.66.tar.gz
解压tar zxf nginx-0.7.66.tar.gz
-
下载zlib库
sudo apt-get install zlib1g zlib1g-dev
-
OpenSSL
sudo apt-get install openssl libssl-dev
-
编译三部曲
./configure
make
sudo make install
这个版本的Nginx的安装路径还是在/usr/local/nginx
下
后面的Nginx默认的安装路径已经改为了/etc/nginx/
- 创建nginx文件设置守护进程,并添加执行权限
caisi@ubuntu:~/src/flask_t$ cat /etc/init.d/nginx
#! /bin/sh
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d_start(){
$DAEMON || echo -n " already running"
}
d_stop(){
$DAEMON -s quit || echo -n " not running"
}
d_reload(){
$DAEMON -s reload || echo -n " could not reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 2
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 2
;;
esac
exit 0
sudo chmod +x /etc/init.d/nginx
刷新系统级别初始化脚本update-rc.d -f nginx defaults
- 启动和查看状态
service nginx start
service nginx status
使用uwsgi或gunicorn
-
使用uwsgi启动flask
(venv) caisi@ubuntu:~/src/flask_t$ uwsgi --http 127.0.0.1:8000 --module app:app
-
gunicorn启动命令
(venv) caisi@ubuntu:~/src/flask_t$ gunicorn -b 127.0.0.1:8000 app:app
-
注意这里一次启动一个就可以了
[nginx配置]
- 这里只改了location下的内容
总结
- 可能是比较老的nginx版本了,又或者是nginx的安装配置本来就比较麻烦,开始安装一些库的时候有很多库名都不一样的,比如openssl-dev,还好后面都解决了,后面看到很多安装nginx都是使用docker的
- 看了nginx的资料,一大堆也没记住多少,或者也没用到多少,最后还是在flask官方文档中的靠谱
- 最后看了一些使用docker部署flask+uWSGI、gunicorn的,感觉还差数据库这块就差不多了
- 循序渐进,昨天看了关于docker的资料,今天看了nginx的,在去看一下使用docker部署上线的就感觉简单多了
https://soft.ryana.cn/eBook/15_Nginx%E7%9B%B8%E5%85%B3/%E5%AD%A6%E4%B9%A0Nginx%20HTTP%20Server%E4%B8%AD%E6%96%87%E7%89%88.pdf