• CentOS7.9系统部署(nginx+uwsgi+flask)项目


    一、概述

    上次,我们介绍了如何将CentOS服务器自带的Python3.6.8版本升级到Python3.8.0版本,现在我们开始介绍如何将flask项目部署的CentOS7.9版本的Linux服务器上。

    二、环境准备

    2.1安装git

    我们通常会将自己的项目托管在Github或者gitee平台,这样不仅方便版本控制,而且容易管理。但是我们使用这两个平台管理代码都需要通过Git进行。Linux下载命令如下:

    yum -y install git
    
    • 1

    2.2创建虚拟环境

    # python3 -m venv "环境名"
    python3 -m venv env
    
    # 激活虚拟环境
    # source ./环境名/bin/activate
    source ./env/bin/activate
    
    # 安装依赖库
    pip install XXX
    
    # 退出虚拟环境
    deactivate
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.3拉取代码

    git clone "代码仓库链接"
    
    • 1

    三、直接部署

    python3 blog.py
    
    • 1

    在这里插入图片描述
    运行成功后,可以通过其他电脑访问(前提是服务器的3000端口已经开启

    四、nginx部署

    4.1安装nginx(使用编译安装方式)

    若是命令安装:

    sudo yum install nginx
    
    • 1

    下载nginx安装包网址:http://nginx.org/en/download.html
    在这里插入图片描述
    复制指定版本安装地址后,用wget命令下载

    deactivate # 退出虚拟环境(同时会退出项目文件夹)
    
    # 在项目文件夹同级目录创建nginx文件夹用于安装
    mkdir nginx
    cd nginx
    
    # 安装依赖环境
    yum install gcc gcc-c++ pcre-devel zlib-devel open-devel -y
    
    # 下载安装包
    wget http://nginx.org/download/nginx-1.20.2.tar.gz
    
    # 解压
    tar xf nginx-1.20.2.tar.gz  
    cd nginx-1.20.2
    
    # 配置、并指定安装目录
    ./configure --prefix=/usr/local/nginx
    
    # 编译(注意:不要使用make clean命令清除,否则报错)
    make build
    
    # 安装
    make install 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4.2启动nginx

    cd /usr/local/nginx/  # 进入安装nginx的目录 可以看到一个sbin目录
    cd sbin  # 进入sbin目录可以看到一个绿色的名为nginx的可执行文件
    ./nginx  # 运行启动
    ps -ef|grep nginx    # 查看进程,确认已经启动 
    cd ..
    vim nginx.conf   # 查看nginx配置 默认监听80端口
    #(确保80端口是开启状态才能通过服务器地址:80端口(192.168.0.37:80)访问)
    
    ###### 查看已经开启端口
    firewall-cmd --permanent --list-port
    ###### 开启80端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    ###### 重启防火墙
    service firewalld restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    CentOS7 防火墙开启常见端口命令Centos 7防火墙开放端口方法

    设置nginx为系统服务

    截止现在:
    nginx安装目录:/usr/local/nginx
    nginx.pid目录:/usr/local/nginx/logs/nginx.pid
    nginx配置目录:/usr/local/nginx/conf/nginx.conf
    nginx启动目录:/usr/local/nginx/sbin/ 启动命令:./nginx

    在/usr/lib/systemd/system/ 目录创建一个配置文件 nginx.service

    mkdir /usr/lib/systemd/system/nginx.service
    
    • 1

    在创建的nginx.service写入下面命令

    [Unit]
    Description=nginx - high performance web server 
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid                                                                                                                              
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    # 赋予脚本执行权限
    chmod +x /usr/lib/systemd/system/nginx.service
    # 设置nginx.service为系统服务
    systemctl enable nginx.service
    # 若nginx.service不在当前目录,记得加上路径
    systemctl enable /usr/lib/systemd/system/nginx.service
    
    ##通过系统服务操作nginx
    systemctl start nginx.service
    systemctl reload nginx.service
    systemctl restart nginx.service
    systemctl stop nginx.service
    
    systemctl start nginx
    systemctl reload nginx
    systemctl restart nginx
    systemctl stop nginx
    
    systemctl status nginx # 查看nginx服务状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    CentOS后台执行(nohup命令)

    nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
    nohup命令详解链接:nohup命令详解

    nohup python blog.py > ./flask.log 2>&1 &    
    
    • 1

    命令解释:

    • 2>&1:把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件flask.log里面,所以结果是标准错误和标准输出都导入文件flask.log里面了。
    • 最后面的&:表示即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上)
    jobs # 查看后台任务
    
    • 1
    kill %(jobs命令查看的进程号)
    
    • 1

    在这里插入图片描述

    nginx转发请求到flask

    保持flask项目为后台运行状态,然后打开nginx配置文件

    cd /usr/local/nginx/conf/
    vim nginx.conf
    
    • 1
    • 2

    注:vim显示行索引:set number
    在这里插入图片描述

    配置nginx.conf文件
    在这里插入图片描述
    配置完成后测试nginx
    因为我们没有配置软连接,所以测试或启动需要先进入:/usr/local/nginx/sbin/ 目录

    ./nginx -t 
    
    • 1

    在这里插入图片描述

    测试成功后重启nginx服务

    systemctl reload nginx
    
    • 1

    在这里插入图片描述
    可以看到,成功跳转到了我们的项目页面(3000端口)
    在这里插入图片描述

    给nginx添加软连接

    为了方便我们操作,不用每次测试或者启动都跑到nginx/sbin目录去执行 “./nginx”,我们现在来添加nginx命令的软连接

    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
    
    • 1

    添加后,去到任意目录可以使用nginx命令了。

    uwsgi

    安装uwsgi

    进入虚拟环境直接用pip3命令安装
    在这里插入图片描述

    pip3 install uwsgi
    
    • 1

    安装完成后给uwsgi添加软链接,首先要知道uwsgi的位置,通过下面命令寻找

    find / -name uwsgi # 从根目录/开始找,通过名字
    
    • 1

    在这里插入图片描述
    添加软连接:

    ln -s /opt/flask_blog/env/bin/uwsgi /usr/bin/uwsgi
    
    • 1

    安装完成后,在项目的文件中创建一个uwsgi.ini配置文件

    cd /opt/flask_blog/ # 确保位置在项目文件中
    vim uwsgi.ini  
    
    • 1
    • 2
    [uwsgi]
    # 主进程
    master=true
    # 进程数
    processes=1
    # 线程数
    threads=20
    #配置工程目录
    chdir =/opt/flask_blog/
    # flask项目app文件所在的位置
    wsgi-file=/opt/flask_blog/blog.py
    # app实例的名字
    callable=app
    # 是否启用多线程
    enable-threads=True
    # socket文件指定的位置
    socket = /opt/flask_blog/uwsgi.sock
    # 监听地址
    socket = 127.0.0.1:3000
    # 给权限
    chmod-socket = 777
    # 结束pid的时候自动清理pid和sock文件
    vacuum = true
    # 指定python虚拟环境位置
    virtualenv = /opt/flask_blog/env/
    # 守护和日志
    daemonize=/opt/flask_blog/uwsgi.log
    # pid进程保存目录
    pidfile=/opt/flask_blog/uwsgi.pid
    # 每个进程单独价值flask
    lazy-apps = true
    # 禁用访问日志
    disable-logging = true
    # 一个进程处理多少个请求后重启一次
    max-requests = 1000
    # 日志最大容量多少
    log-maxsize = 5000000
    gid = root
    uid = root
    
    • 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

    在这里插入图片描述
    uwsgi常用命令

    # 需要提前配置号软连接
    uwsgi --ini uwsgi.ini # 指定配置文件启动
    uwsgi --reload uwsgi.pid # 重启
    uwsgi --stop uwsgi.pid # 关闭
    
    • 1
    • 2
    • 3
    • 4

    启动uwsgi

    uwsgi --ini ./uwsgi.ini  # 确保uwsgi.ini在当前目录
    
    • 1

    在这里插入图片描述
    启动成功
    在这里插入图片描述

    启动成功后,当前目录产生了上面这三个文件。

    截止到此,uwsgi配置完成。uwsgi已经成功对接flask服务,但是,现在uwsgi与nginx还相互不认识,接下来我们需要开始重新配置nginx对接现在的uwsgi。

    nginx对接uwsgi

    关闭后台运行的flask应用,关闭方法:需要找到对应的PID,然后kill掉

    ps -aux|grep blog.py     # 查看进程
    kill -9 11444            # 杀死进程                                                                               
    
    • 1
    • 2

    在这里插入图片描述
    关闭后:
    在这里插入图片描述

    在这里插入图片描述
    关闭成功后:nginx的80端口和flask应用的3000端口都访问不了。

    下面开始将nginx与uwsgi对接,到conf目录,打开nginx.conf配置文件

    cd /usr/local/nginx/conf/
    vim nginx.conf
    
    • 1
    • 2

    在这里插入图片描述

    将上面的内容改为:

    include uwsgi_params;                                                                                                                            
    uwsgi_pass unix:///opt/flask_blog/uwsgi.sock; # uwsgi_pass unix://‘sock文件路径’
    
    • 1
    • 2

    在这里插入图片描述
    修改保存后,启动uwsgi,重启nginx

    uwsgi --ini ./uwsgi.ini  # 确保uwsgi.ini在当前目录
    systemctl reload nginx
    
    • 1
    • 2

    即可重新访问80端口:
    在这里插入图片描述

    部署架构

    在这里插入图片描述

    nginx启用压缩响应

    cd /usr/local/nginx/conf
    vim nginx.conf
    
    • 1
    • 2

    在这里插入图片描述
    编辑如下:
    在这里插入图片描述

    # cd到项目目录重启uwsgi
    cd /opt/flask_blog/
    uwsgi --reload uwsgi.pid 
    # 重启nginx
    systemctl reload nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5

    静态资源由nginx直接返回并设置缓存时间

    cd /usr/local/nginx/conf
    vim nginx.conf
    
    • 1
    • 2

    在这里插入图片描述
    编辑如下:
    在这里插入图片描述

    # cd到项目目录重启uwsgi
    cd /opt/flask_blog/
    uwsgi --reload uwsgi.pid 
    # 重启nginx
    systemctl reload nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重新启动后可以看出设置成功:
    在这里插入图片描述

  • 相关阅读:
    23.flink processFunction(高级报警功能必会)
    OTN光层保护
    Kubernetes学习笔记-保障集群内节点和网络安全20220827
    GitLab CI/CD 持续集成/部署 SpringBoot 项目
    目标检测-Yolo框架
    Golang Gorm 一对多 关联模式 Association + Append 添加关联 Association + Replace
    【操作系统】聊聊什么是CPU上下文切换
    基于springboot的高校学生实践成长检测系统
    【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)
    电脑新加的硬盘如何分区?新加硬盘分区选MBR还是GPT
  • 原文地址:https://blog.csdn.net/qq_34184505/article/details/128142313