1

部署nginx+uwsgi+flask

 2 years ago
source link: https://yanmymickey.github.io/2020/08/06/Note/%E9%83%A8%E7%BD%B2nginx+uwsgi+flask/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

部署nginx+uwsgi+flask

服务器配置

Centos7.6

python3.7

nginx 1.12

项目文件最好放在一个权限较低的目录,当然,配置好权限也是可以的

将flask项目通过ftp或者git上传到/home/project

uwsgi

什么是虚拟环境?

virtualenv - 廖雪峰

简而言之就是将当前项目需要用到的一些第三方库分开存储,不直接放置到系统目录,这样可以保证环境的独立性和稳定性,系统目录中的库升级不会影响到项目。

新建虚拟环境

# 安装
pip3 install virtualenv
# 进入项目目录
cd /home/project
# 更改目录所有者
sudo chown -R yourUserName:yourUserName 项目路径/
cd 项目路径/
# 新建虚拟环境,保存当前项目所需依赖
sudo virtualenv venv

进入虚拟环境

source venv/bin/activate
# 虚拟环境中就不要用sudo了,不然又是调用系统目录的pip了
# 在虚拟环境中安装项目所需依赖
pip install -r requirements.txt
# 在虚拟环境中安装 uwsgi 和 uwsgi的状态监控器
pip install uwsgi uwsgitop

编写uwsgi配置文件

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

# 虚拟环境运行
# 启动
uwsgi --ini uwsgi.ini
# 重启
uwsgi --reload uwsgi.pid
# 关闭
uwsgi --stop uwsgi.pid
  • 读取uwsgi实时状态,json字符串形式
# 虚拟环境运行
uwsgi --connect-and-read uwsgi/uwsgi.status
  • uwsgitop
# 虚拟环境运行
uwsgitop uwsgi/uwsgi.status

退出虚拟环境

deactivate

nginx

编译安装或者用包管理安装都是可以的,满足项目需求就可以

yum install 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/

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等错误码

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK