centos7 部署flask uwsgi方式
1.登录finalShell 下载python(我用的是finalShell)
cd /
cd home
mkdir python
cd python
wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz
2.解压python压缩包
tar zxf Python-3.9.6.tgz
3.更新依赖并安装依赖
yum update
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
4.执行命令配置编译安装的基本环境
./configure prefix=/user/local/python3
make clean 清空缓存
make && make install 编译安装
5.备份python2软连接
/usr/bin
mv python python2.bak
6.修改yum配置
/usr/bin
ls -la yum*
vi yum
进入之后,按i进入编辑模式,将
vi /usr/libexec/urlgrabber-ext-down
进行同样的修改
7.将python3设置为默认python
ln -s /usr/local/python3/bin/python3.9 /usr/bin/python
ln -s /usr/local/python3/bin/pip3.9 /usr/bin/pip
如果提示pip存在 则删除 执行
rm /usr/bin/pip
8.创建项目文件夹
在哪个目录创建都可以
cd opt
mkdir api_flask
cd api_flask
创建python虚拟环境 文件夹叫env
python -m venv env
激活虚拟环境(linux)windows是 \venv\Scripts\activate.bat
source ./env/bin/activate
导入项目及安装项目依赖
pip install -r requirements.txt
9.安装rz命令
yum install lrzsz -y
rz命令是用来上传文件的
直接输入rz 然后在弹出的窗口中选择上传的文件
10.安装ngnix
在opt下再创建一个nginx文件夹
下载nginx
wget http://nginx.org/download/nginx-1.20.2.tar.gz
安装依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
解压
tar -zxvf nginx-1.20.2.tar.gz
预编译
cd nginx-1.20.2
./configure --prefix=/opt/nginx/
编译
make build
安装
make install
配置
cd ..
cd conf
vim nginx.conf 进程数改成cpu核的数量
配置nginx
cd /usr/lib/systemd/system
vim ./nginx.service
把这个粘贴进去
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
赋予脚本执行权限
chmod +x /usr/lib/systemd/system/nginx.service
设置nginx.service为系统服务
cd /usr/lib/systemd/system
systemctl enable nginx.service
去nginx文件夹 ./nginx -s stop
再启动nginx systemctl start nginx
进入项目文件夹激活虚拟环境
source ./env/bin/activate
后台运行python
nohup python manage.py runserver > ./flask.log 2>&1 &
11.nginx转发请求
cd /opt/nginx/conf
vim nginx.conf
i
编辑server中的location
proxy_pass http://127.0.0.1:5000
cd opt/nginx/sbin
执行 ./nginx -t
12.nginx添加软连接
ln -s /opt/nginx/sbin/nginx /usr/bin/nginx
13.uwsgi 生产模式部署
在flask项目文件夹下创建 uwsgi.ini 内容为
[uwsgi]
master = true
processes = 1
threads = 20
chdir = /opt/xingxingke/ 工作目录
wsgi-file = //flaskAPP文件位置
callable = app //flask应用名
enable-threads = true
socket = //sock文件位置
socket = 127.0.0.1:
chmod-socket = 777
vacuum = true //关闭时自动清理pid sock文件
virtualenv = //python虚拟环境目录
daemonize = //日志文件位置
pidfile = //pid文件位置
lazy-apps = true //每个进程单独加载flask
disable-logging = true //禁用访问日志
max-requests = 1000
log-maxsize = 5000000
gid = root
uid = root
找到uwsgi路径
找 从根 根据名字 关键字
find / -name uwsgi
创建软连接
ln /opt/api_flask/env/bin/uwsgi /usr/bin/uwsgi
执行
uwsgi --ini ./uwsgi.ini
关闭后台进程是 jobs查找进程 kill %进程号
uwsgi --ini uwsgi.ini
uwsgi --reload uwsgi.pid
uwsgi --stop uwsgi.pid
sudo pkill -f uwsgi -9
如果报错invalid request block size: 4398 (max 4096)...skip
在uwsgi.ini文件中 添加 buffer-size = 32768
运行uwsgi启动命令即可
14.zip压缩响应体
gzip on;
gzip_comp_level 4;
gzip_min_length 1k;
15.对json响应进行压缩
gzip_types application/json
16.过程总结
请求:浏览器 -> nginx的80端口 -> uwsgi -> flask api
响应:浏览器 <- nginx的80端口 <- uwsgi <- flask api
17.静态资源nginx直接返回并压缩
location ^~/static/ {
root /opt/api_flask/api/;
expires 1h;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types application/javascript;
gzip_vary on;
}
18.部署多个项目
- 首先在每个项目的文件夹中都创建一套uwsgi配置文件
- 内容如下
[uwsgi]
master = true
processes = 1
threads = 20
chdir = /opt/api_flask/
wsgi-file = /opt/api_flask/manage.py
callable = app
py-autoreload = 1
enable-threads = true
socket = /opt/api_flask/uwsgi.sock
socket = 127.0.0.1:5100
chmod-socket = 777
vacuum = true
virtualenv = /opt/api_flask/env/
daemonize = /opt/api_flask/logs/uwsgi.log
pidfile = /opt/api_flask/uwsgi.pid
lazy-apps = true
disable-logging = true
max-requests = 1000
log-maxsize = 5000000
buffer-size = 32768
gid = root
uid = root
- 写两个nginx.conf 或者写在一个里 两个server