部署nginx+uwsgi+flask
服务器配置
Centos7.6
python3.7
nginx 1.12
项目文件
项目文件最好放在一个权限较低的目录,当然,配置好权限也是可以的
将flask项目通过ftp或者git上传到/home/project
uwsgi
虚拟环境
什么是虚拟环境?
virtualenv - 廖雪峰
简而言之就是将当前项目需要用到的一些第三方库分开存储,不直接放置到系统目录,这样可以保证环境的独立性和稳定性,系统目录中的库升级不会影响到项目。
新建虚拟环境
1 2 3 4 5 6 7 8 9
| # 安装 pip3 install virtualenv # 进入项目目录 cd /home/project # 更改目录所有者 sudo chown -R yourUserName:yourUserName 项目路径/ cd 项目路径/ # 新建虚拟环境,保存当前项目所需依赖 sudo virtualenv venv
|
进入虚拟环境
1
| source venv/bin/activate
|
安装依赖
1 2 3 4 5
| # 虚拟环境中就不要用sudo了,不然又是调用系统目录的pip了 # 在虚拟环境中安装项目所需依赖 pip install -r requirements.txt # 在虚拟环境中安装 uwsgi 和 uwsgi的状态监控器 pip install uwsgi uwsgitop
|
编写uwsgi配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| vim uwsgi.ini [uwsgi] # python 启动程序文件 app.run所在的文件名 wsgi-file =
# python 程序内用以启动的变量名 app callable = app
# 进程数 processes = 5
# 线程数 threads = 2
#主进程 master=true
# 指向网站目录 chdir=/home/project/项目路径/
# socket文件,配置nginx时候使用 # 也可以写出ip:port端口模式 # 比如 127.0.0.1:5001 # 端口模式的话nginx也要一个端口,就挺啰嗦的 socket=%(chdir)/uwsgi/uwsgi.sock chmod-socket=666 #http模式,不需要配合nginx即可单独使用 #但是nginx是c编写的,解析http请求的效率要高很多 #建议使用socket加nginx的模式 #http=0.0.0.0:5001
# status文件,可以查看uwsgi的运行状态 stats=%(chdir)/uwsgi/uwsgi.status # pid文件,通过该文件可以控制uwsgi的重启和停止 pidfile=%(chdir)/uwsgi/uwsgi.pid # 日志文件,通过该文件查看uwsgi后台运行的日志 daemonize=%(chdir)/uwsgi/uwsgi.log logfile-chmod=644
# uid= # gid= # uwsgi的进程名称前缀 # procname-prefix-spaced=mysite
# py文件修改自动加载,生成环境不建议开启 #py-autoreload=true
buffer-size = 32768
|
启停uwsgi
1 2 3 4 5 6 7
| # 虚拟环境运行 # 启动 uwsgi --ini uwsgi.ini # 重启 uwsgi --reload uwsgi.pid # 关闭 uwsgi --stop uwsgi.pid
|
服务监控
1 2
| # 虚拟环境运行 uwsgi --connect-and-read uwsgi/uwsgi.status
|
1 2
| # 虚拟环境运行 uwsgitop uwsgi/uwsgi.status
|
退出虚拟环境
nginx
安装
编译安装或者用包管理安装都是可以的,满足项目需求就可以
配置文件目录:/etc/nginx
配置文件: /etc/nginx/nginx.conf
站点文件源文件:/etc/nginx/sites-available
站点文件激活文件夹:/etc/nginx/sites-enabled
说明:
- centos yum安装的nginx是没用下面俩个站点目录的,手动创建,然后在
nginx.conf
中include/etc/nginx/sites-enabled/*
- 将站点文件源文件写在
sites-available
目录,添加软链接到sites-enabled
,如若要关闭站点,只需要将 sites-enabled
目录下的软链接删除即可
日志目录:/var/log/nginx/
配置站点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| cd /etc/nginx/sites-available/ sudo vim 项目名称.conf
server { # 有域名就配置server_name为域名,端口监听80 # 监听端口 listen 5001; server_name localhost; access_log /var/log/project_name/project_name_access.log; error_log /var/log/project_name/project_name_error.log index index.html; #动态请求 location / { include uwsgi_params; uwsgi_pass unix:///home/project/项目名称/uwsgi/uwsgi.sock; } }
#创建软链接 sudo ln -s /etc/nginx/sites-available/项目名称.conf /etc/nginx/sites-enabled/项目名称.conf
#检验配置文件 sudo nginx -t sudo systemctl restart nginx.service
|
最后
访问站点是否可以访问
排查问题参考
- 云服务器确认端口是否开启可访问
- 服务器本地是否可访问
curl http://127.0.0.1:port
- 有响应检查服务器端口,无响应检查nginx
- ip:port是否可访问
- 有响应,但是只是出现nginx,检查uwsgi
- 无响应,检查服务器端口,然后再检查nginx
- 注意权限问题引发的日志或者程序拒绝服务500等错误码