cnetos7下nginx+uwsgi+flask项目部署
环境安装
//安装 uwsgi
pip3 install uwsgi
//创建软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
//查看 uwsgi版本
uwsgi --version
//安装虚拟环境管理类库
pip3 install pipenv
//进入项目文件目录,建立虚拟环境,安装项目需要的类库
pipenv install
//上传项目到服务器指定目录,验证通过 开发环境是否可以跑起来
python flaskbasedemo.py
uwsgi启动项目
文档地址:http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#deploying-flask
//用uwsgi命令行的方式启动uwsgi,
uwsgi --http :5000 --wsgi-file flaskbasedemo.py --callable app --home /root/.local/share/virtualenvs/FlaskBaseDemo-QItxpnHv
tips:
--http 以http的启动,如果有前置服务器(如nginx)需要配置为 scoket
--wsgi-file 项目的启动文件,运行app.run()的文件
--callable app.run() 方式的实例对象
--home 虚拟环境的绝对路径
//杀死进程
kill -9 进程id
uwsgi配置文件启动 验证
//创建配置文件 uwsgi.ini
[uwsgi]
#地址为内网地址 ifconfig地址
http=10.141.8.240:5050
# 项目目录
chdir=/opt/flasktest/FlaskBaseDemo
# 启动uwsgi的用户名和用户组
uid=root
gid=root
#flask项目必须的配置
callable= app
#指定虚拟环境路径
home=/root/.local/share/virtualenvs/FlaskBaseDemo-QItxpnHv
# 指定项目启动文件,该路径是相对于 chdir目录来的
wsgi-file = flaskbasedemo.py
# 启用主进程
master=true
# 进程个数
workers=5
pidfile=/opt/flasktest/scripts/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置后台启动
daemonize=/opt/flasktest/scripts/uwsgi.logi
#通过该配置文件启动
uwsgi --ini uwsgi.ini
#查看进程相关的信息
ps aux |grep uwsgi
#停掉uwsig
uwsgi --stop uwsgi.pid
测试验证访问即可 外网地址:5050访问即可
nginx代理设置
uwsig配置文件修改,http改为 socket ,其它不变
[uwsgi]
#这个地址可以是127.0.0.1地址也可以是 ifconf 内网的地址,注意要与 nginx配置的地址一致
socket=10.141.8.240:5050
...
nginx配置文件 flskbase.conf
server {
listen 8090;
# ifconf 内网地址
server_name 10.141.8.240 www.applelife.com;
#开启静态文件处理强能力
sendfile on;
#charset koi8-r;
#配置请求日志
#access_log /var/log/nginx/host.access.log main;
# uwsgi相关参数配置
location / {
include uwsgi_params;
# 这个需要与 uwsgi配置文件出的 socket一致
uwsgi_pass 10.141.8.240:5050;
}
# 静态文件定义
location /static {
#开启gzip
#gzip on;
#指定gzip http的版本
#gzip_http_version 1.1;
#指定gzip压缩比
#gzip_comp_level 2;
#指定需要压缩的格式
#gzip_types text/pain application/javascript application/x-javascript text/css/application/xml text/javascript application/x-http-php ima # e/jpeg image/gif image/png;
root /opt/test ;
}
}
socket另外一种配置方式:
官方文档: https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html?highlight=nginx
# usgi配置修改为,其余不变
socket = /opt/flasktest/scripts/uwsgi.sock;
# nginx 配置修改为,其余不变
location / {
include uwsgi_params;
uwsgi_pass unix:///opt/flasktest/scripts/uwsgi.sock;
}
注意:
root的处理结果是:root路径+location路径
访问地址:http://118.89.238.148:8000/static/timg.jpg
location /static {
root /opt/test;
}
真实的地址为:http://118.89.238.148:8000/opt/test/static/timg.jpg
alias的处理结果是:使用alias路径替换location路径
访问地址:http://118.89.238.148:8000/static/timg.jpg
location /static/ {
alias /opt/test/static/;
}
实际为 http://118.89.238.148:8000/opt/test/static/timg.jpg