网上有很多关于部署nginx+uwsgi+flask的文章,我在刚开始摸索的时候,也是各处搜索实验,中途遇到许多困难。部署好了之后,常遇到502错误。还好经过多方搜索,最后总结了一套自己可以理解的部署模式。
下面写部署笔记(提示一下:uwsgi部署的重点应该是.sock文件还有加入自动启动)
1 更新软件源列表
对比软件源列表,若有更新版本,则更新
sudo apt-get update
sudo apt-get upgrade
2 安装pip 和 源外类的依赖包
sudo apt-get install python3-pip python3-dev
3 安装nginx
apt install nginx
4 安装uwsgi和flask 主环境下使用pip3命令,虚拟环境下用pip命令
pip3 install uwsgi flask
5 在www下创建网站程序
joinyond/main.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello joinyond' if __name__ == '__main__': app.run(host='0.0.0.0') |
以上是基本步骤。
以下是重点:
.ini配置里面很多选项,可以搜索了解一下。
.ini运行之后,一定要有.sock文件生成,否则就是失败的配置。
一般nginx配置都不会出错,容易出错的就是uwsgi.ini没有配置好,或者没有启动,导致502错误。
6 配置一个uwsgi.ini文件 :joinyond_uwsgi.ini
[uwsgi] app = main ;指定程序文件? module = %(app) callable = app ;指定入口 master = true ;以主模式启动 processes = 5 ;5个进程 chdir = /var/www/joinyond ;工作目录 socket = /var/www/joinyond/joinyond_uwsgi.sock ;套接字文件路径 chmod-socket = 666 ;权限 vacuum = true ;回收资源 die-on-term = true ;用来保持和uwsgi一致 |
7 配置一个nginx.conf文件 :joinyond_nginx.conf
server { listen 80; listen [::]:80; server_name localhost; location / { include uwsgi_params; uwsgi_pass unix:/var/www/joinyond/joinyond_uwsgi.sock; } } |
8 删掉nginx的默认配置(一定要删掉,否则nginx还是指向默认的html)
rm /etc/nginx/sites-enabled/default
9 将项目的配置文件软连接到nginx相关文件夹下(配置nginx的文件夹有两个,放在conf.d里面只是其中一种,还有一个是文件夹似乎叫site-anbale,放在这里面也是可以的。 )
ln -s /var/www/joinyond/joinyond_nginx.conf /etc/nginx/conf.d
10 重启nginx
systemctl restart nginx
11 使用nohup运行uwsgi,测试上面的配置是否正确
nohup uwsgi /var/www/joinyond/joinyond_uwsgi.ini &
访问默认网址,就应该可以正常访问了。
那么就可以将uwsg加入自动启动了
下面将uwsgi加入系统自动启动(uwsgi自动启动的方式也有两种,另一种是采用upstart,似乎upstart更简单一点。但是我刚开始搜到的是使用service服务,那么我就采用service服务吧)
12 配置service文件
[Unit] Description=uWSGI Emperor After=syslog.target [Service] ExecStart=/usr/local/bin/uwsgi --ini /var/www/html/project/uwsgi.ini # Requires systemd version 211 or newer RuntimeDirectory=uwsgi Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target |
将joinyond_uwsgi.service 软连接到/etc/systemd/system文件夹下
Ls –s /var/www/joinyond/joinyond_uwsgi.service /etc/system/system
13 启动service服务
sudo systemctl start joinyond_uwsgi
sudo systemctl enable joinyond_uwsgi
重启服务器,测试是否成功自动运行!
部署说难吧也不难,难在知识面不广,很多参数不能理解。很多原理也不懂,单单的打几个hello word ,算不上程序员呀。。。。
参考资料:
在Ubuntu 16.04上部署Flask项目 - 掘金 (juejin.cn)
Debian 10 使用 Nginx 和 uWSGI 部署 Python Flask 网站教程-老唐笔记 (oldtang.com)
https://h4ck.org.cn/2018/12/ubuntu-16-04-uwsgi%e8%87%aa%e5%90%af%e5%8a%a8/