centos7 部署flask uwsgi方式

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进入编辑模式,将#!/usr/bin/python 改为 #!/usr/bin/python2 ,按esc退	 出编辑模式 输入 :wq! 保存并退出,有多个yum文件都需要这样修改
    
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直接返回并压缩

 #access_log  logs/host.access.log  main;
        location ^~/static/ {
            root /opt/api_flask/api/;  # 静态资源位置 会自动在后面拼接static
            expires 1h;  # 缓存一个小时
            gzip on;  # 打开
            gzip_min_length 1k;  # 允许压缩的最小字节数
            gzip_buffers 4 16k;  # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
            gzip_comp_level 6;  # 压缩比1-9
            gzip_types application/javascript;  # 类型
            gzip_vary on;  #  在响应头加一个Vary:Accept-Encoding
		}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萨科学习之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值