Nginx项目部署

Nginx 部署 Django 项目 (基于centos7

一、安装 Python (源码编译安装)

  • 下载 Python Python下载网址
  • Python 源代码上传到服务器
    # scp 文件 服务器用户名@服务器IP:拷贝的文件存放路径
    scp D:\下载\Python-3.8.19.tgz remote-centos:/opt
    
  • 安装 Python
    # 安装 Python 依赖包
    sudo yum install -y gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel readline-devel tk-devel
    # 解压软件包 (src目录是存放源码的目录)
    tar -xzvf /opt/Python-3.8.19.tgz -C /usr/local/src/
    # 编译并安装
    cd /usr/local/src/Python-3.8.19
    ./configure --prefix=/usr/local/python3
    make && make install
    
  • 添加 Python3.8 到环境变量 ,安装 python 基本工具库
    vim ~/.bashrc
    # 在文件末尾添加以下行,python2默认使用系统的python2.7, python3使用我们安装的python3.8
    alias python='/usr/bin/python2.7'
    alias python3='/usr/local/python3/bin/python3'
    alias pip3='/usr/local/python3/bin/pip3'
    # 重新加载配置(加载配置以后需要重新进入终端)
    source ~/.bashrc
    # 查看环境变量配置是否添加成功
    which python3
    python3 --version
    pip3 --version
    # 使用 pip 工具来安装或升级 setuptools 和 wheel
    pip3 install --upgrade setuptools wheel
    
  • 安装Python3以后的BUG修复 (系统部分工具的运行依赖python2,修改python指向会导致有些工具不可用 )
    # 说明:在将系统默认的Python解释器从Python2升级到Python3之后因为yum包管理器默认使用Python2编写,而Python3在语法上与之不兼容;解决这个问题的步骤:
    # 1.修改 "yum的配置文件" 和 "urlgrabber-ext-down"
    vim /usr/bin/yum
    vim /usr/libexec/urlgrabber-ext-down
    # 2.将其第一行的 "#! /usr/bin/python" 更改为 "#! /usr/bin/python2.7" 或系统中实际存在的Python2路
    
  • 创建Python虚拟环境
    # 安装virtualenv
    pip3 install virtualenv
    # 创建虚拟环境目录
    sudo mkdir -p /python_envs
    # 创建虚拟环境;使用指定Python解释器在指定目录下创建一个名为 "stu_manage" 的虚拟环境
    virtualenv -p /usr/local/python3/bin/python3 /python_envs/stu_manage
    # 激活虚拟环境
    source /python_envs/stu_manage/bin/activate
    # 退出虚拟环境
    deactivate
    

二、安装Nginx (源码编译安装)

  • 下载 Nginx Nginx下载网址
    wget https://nginx.org/download/nginx-1.24.0.tar.gz -O /opt/nginx-1.24.0.tar.gz
    
  • 安装 Python (也可以跟Python 一样本地下载以后再上传到服务器)
    # 解压软件包 (src目录是存放源码的目录)
    tar -xzvf /opt/nginx-1.24.0.tar.gz -C /usr/local/src/
    # 编译并安装
    cd /usr/local/src/nginx-1.24.0
    ./configure --prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log --pid-path=/run/nginx.pid
    make && make install
    
  • 添加 Nginx 到环境变量
    vim ~/.bashrc
    # 在文件末尾添加以下行
    alias nginx='/usr/local/nginx/sbin'
    # 重新加载配置(加载配置以后需要重新进入终端)
    source ~/.bashrc
    # 查看环境变量配置是否添加成功
    which nginx
    nginx -v 
    
  • 运行测试
    # 编译安装的程序指令都放在 /usr/local 路径下
    # 启动nginx 
    nginx
    # 重启nginx 
    nginx -s reload
    # 关闭nginx 
    nginx -s stop
    # 查看正在使用端口 80 的进程
    sudo lsof -i :80
    
    # 关闭防火墙
    # centos系统关闭防火墙
    sudo systemctl stop firewalld
    # ubuntu系统关闭防火墙
    sudo ufw disable
    # 浏览器访问测试
    
  • CentOS 系统中将自己安装的 Nginx 配置为系统服务
    • 将自己安装的 Nginx 配置为系统服务主要有以下几个重要作用

      1.方便管理:可以使用系统提供的统一命令(如 systemctl )来启动、停止、重启 Nginx 服务,而无需记住和手动执行复杂的命令或操作。
      例如,通过 sudo systemctl start nginx 启动,sudo systemctl stop nginx 停止,sudo systemctl restart nginx 重启。
      2.开机自启动:配置为系统服务后,可以设置 Nginx 服务在系统开机时自动启动,确保服务能够及时可用,无需手动干预。这对于需要持续运行的服务(如网站服务器)非常重要,避免了系统启动后还需要手动去启动服务可能导致的服务中断。
      3.服务监控和日志:系统服务框架通常会提供一些机制来监控服务的运行状态,并记录相关的日志信息。这有助于及时发现服务出现的问题,并根据日志进行故障排查和分析。
      4.与系统集成:能够更好地与系统的其他功能和服务进行集成,例如与防火墙规则、资源管理等协同工作。
      5.一致性和规范性:遵循系统的服务管理规范,使得服务的管理和配置方式更加统一和可预测,方便管理员进行维护和管理。
      
      总之,将 Nginx 配置为系统服务可以提高管理的效率和便利性,增强服务的可靠性和稳定性。
      
    • 配置步骤

      • 创建一个服务单元文件 nginx.service (通常放在 /etc/systemd/system/ 目录下,文件内容如下)

        [Unit]
        Description=Nginx Service
        After=network.target
        
        # 根据实际 Nginx 安装路径修改 ExecStart、ExecReload 和 ExecStop 中的路径。
        [Service]
        Type=forking
        PIDFile=/run/nginx.pid
        ExecStart=/usr/local/nginx/sbin/nginx
        ExecReload=/usr/local/nginx/sbin/nginx -s reload
        ExecStop=/usr/local/nginx/sbin/nginx -s stop
        PrivateTmp=true
        
        [Install]
        WantedBy=multi-user.target
        
      • 重新加载 systemd 配置:

        sudo systemctl daemon-reload
        
      • 启动 Nginx

        # 启动 Nginx 服务
        sudo systemctl start nginx
        # 设置 Nginx 服务开机自启动
        sudo systemctl enable nginx
        # 取消 Nginx 服务开机自启动
        sudo systemctl disable nginx
        # 查看 Nginx 的运行状态
        sudo systemctl status nginx
        

三、安装 MySQLyum 安装)

  • 删除已安装的 MySQL
    • 检查/删除 MariaDB

      # 检查 MariaDB
      rpm -qa|grep mariadb
      -- mariadb-server-5.5.60-1.el7_5.x86_64
      -- mariadb-5.5.65-1.el7_5.x86_64
      -- mariadb-libs-5.5.65-1.el7.x86_64
      # 删除 MariaDB (如果不存在(上面检查结果返回空)则跳过步骤)
      rpm -e --nodeps mariadb-server
      rpm -e --nodeps mariadb
      rpm -e --nodeps mariadb-libs
      
    • 检查/删除 MySQL

      # 检查mysql
      rpm -qa|grep mysql
      # 删除 mysql (如果不存在(上面检查结果返回空)则跳过步骤)
      rpm -e --nodeps xxx
      
  • 添加 MySQL Yum Repository
    • 添加 MySQL Yum Repository 的作用

      1.从官方源获取软件包:确保能够从 MySQL 的官方源获取到最新、稳定的 MySQL 软件包及其相关组件。
      2.方便管理和更新:通过 Yum Repository,可以更方便地进行 MySQL 的安装、升级和卸载等操作,同时也便于系统对软件包的依赖关系进行管理。
      3.解决默认安装问题:在 CentOS 7 及以上系统中,使用默认的 Yum 源安装 MySQL 时,可能会安装成 MariaDB(MySQL 的一个分支)。添加 MySQL Yum Repository 可以确保安装的是官方的 MySQL 版本。
      4.获得更好的支持:官方的 Yum Repository 通常会提供更好的支持和兼容性,减少在安装和使用过程中可能出现的问题。
      
      综上所述,添加 MySQL Yum Repository 可以使 MySQL 的安装和管理更加方便、稳定和可靠。
      
    • 根据当前系统在官网选择对应的版本下载并安装最新的Yum 最新Yum源下载地址

      # 查看系统版本
      cat /etc/redhat-release
      # 下载最新的yum源
      wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm -O /opt/mysql80-community-release-el7-3.noarch.rpm
      # 安装MySQL源
      sudo rpm -Uvh /opt/mysql80-community-release-el7-3.noarch.rpm
      
    • 检查MySQL源是否安装成功

      1.执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件 mysql-community.repo 及 mysql-community-source.repo
      2.通过yum repolist可以看到mysql相关资源
      yum repolist enabled | grep "mysql.-community."
      
  • 选择MySQL版本(可选)
    • 说明

      使用MySQL Yum Repository安装MySQL,默认会选择当前最新的稳定版本,例如通过上面的MySQL源进行安装的话,默安装会选择MySQL 8.0版本,如果就是想要安装该版本,可以直接跳过此步骤,如果不是,比如我这里希望安装MySQL5.7版本,就需要“切换一下版本”:
      
    • 查看当前MySQL Yum Repository中所有MySQL版本(每个版本在不同的子仓库中)

      yum repolist all | grep mysql
      
    • 切换版本

      # 希望安装MySQL5.7版本的配置
      sudo yum-config-manager --disable mysql80-community
      sudo yum-config-manager --enable mysql57-community
      
  • 安装MySQL
    # 该命令会安装MySQL服务器 (mysql-community-server) 及其所需的依赖、相关组件,包括mysql-community-client、mysql-community-common、mysql-community-libs等
    # 在yum install 版本后面加上 --nogpgcheck,即可绕过GPG验证成功安装 
    sudo yum install mysql-community-server --nogpgcheck
    
  • 启动MySQL
    # 启动MySQL
    sudo systemctl start mysqld.service
    # 停止MySQL
    sudo systemctl stop mysqld.service
    # 重启MySQL
    sudo systemctl restart mysqld.service
    # 查看MySQL启动状态
    sudo systemctl status mysqld.service
    
  • 修改MySQL 密码
    • 查看初始密码

      # MySQL第一次启动后会创建超级管理员账号root@localhost,初始密码存储在日志文件中:
      sudo grep "temporary password" /var/log/mysqld.log
      -- [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lKnyO%VgP5#1
      
    • 修改默认密码

      • 修改密码

        mysql -uroot -plKnyO%VgP5#1
        ALTER USER "root"@"localhost" IDENTIFIED BY "your_password";
        
      • 密码太简单错误解决

        # 使用复杂密码,MySQL默认的密码策略是要包含数字、大小字母及特殊字符;如果只是测试用,不想用那么复杂的密码,可以先设置一个满足当前密码策略的新密码然后修改默认策略 (注意:直接修改validate_password变量为OFF在MySQL 8.0中是不支持的)
        # 1.先设置一个满足当前密码策略的新密码
        ALTER USER "root"@"localhost" IDENTIFIED BY "Dong@123456789";
        # 2.调整密码策略 (在MySQL交互环境下)
        set global validate_password.policy=0;
        set global validate_password.length=1;
        # 3.之后你就可以设置一个较简单的密码如 "1234"
        ALTER USER "root"@"localhost" IDENTIFIED BY "your_password";
        
  • 允许root远程访问 (云服务器需要开启安全组策略)
    # 创建用户
    CREATE USER "root"@"%" IDENTIFIED BY "your_password";
    # 授予权限
    GRANT ALL PRIVILEGES ON *.* TO "root"@"%";
    # 刷新权限
    FLUSH PRIVILEGES;
    
  • 设置编码为utf8
    # 查看编码
    SHOW VARIABLES LIKE "character%";
    # 设置编码, 编辑/etc/my.cnf,[mysqld]节点增加以下代码
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    init_connect="SET NAMES utf8"
    character-set-client-handshake = FALSE
    
  • 设置开机启动
    sudo systemctl enable mysqld
    sudo systemctl daemon-reload
    

四、安装 Git 客户端

# 清理yum缓存
yum clean all
# 安装 Git 客户端
sudo yum install git

五、在本机导出Python 的第三方模块和数据库

这里我们可以把导出的文件统一放在指定文件夹便于管理,这里我们把导出的 requirements.txtstudent_manage.sql 放在项目目录的 scripts 文件夹下

  • 导出第三方模块
    • 导出模块

      pip3 freeze > requirements.txt
      
    • 检查导出模块的格式

      类似于"asgiref @ file:///home/conda/feedstock_root/build_artifacts/asgiref_1711268871457/work" 格式需要通过 "pip list" 指令查看asgiref版本并修改为指定的模块版本;eg:
      asgiref==3.8.1
      
  • 导出项目数据库
    • 导出项目数据库

      # 将数据库 "student_manage" 导出到 "student_manage.sql" 文件
      mysqldump -u student_manage -p student_manage > student_manage.sql
      
    • 可能的报错

      # mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces 这个错误提示表明你在执行 mysqldump 操作时,没有足够的权限,特别是缺少 PROCESS 权限
      # 解决方案:
      1. 以具有足够权限的用户身份登录 MySQL 服务器。通常,管理员用户(如 root)具有所需的权限。
      2. 为当前用户授予所需的权限。您可以使用以下命令为用户授予 PROCESS 权限:
      # 授予权限
      GRANT PROCESS ON *.* TO 'student_manage'@'%';
      # 刷新权限
      FLUSH PRIVILEGES;
      

六、拉取项目到服务器,并使用 Django 自带 WebServer 启动测试项目

  • 将本地测试没有问题的 Django 项目通过 git push 推送到代码仓库
  • 拉取项目到服务器 注意:不要将项目放在root目录下,可能会有访问限制问题>
    # 创建一个文件夹用来保存web项目源代码
    mkdir /var/www
    cd /var/www
    # 拉取项目代码到服务器
    git clone https://gitee.com/dongdengwen/student_management.git
    
  • 安装项目的Python 环境
    # 进入script文件目录
    cd /var/www/student_management/scripts
    # 激活项目的虚拟环境
    source /python_envs/stu_manage/bin/activate
    # 批量安装第三方模块
    pip3 install -r requirement.txt
    
  • 导入项目数据库
    • 为项目创建数据库和管理账户并授权访问

      # 使用管理员账户进入数据库
      mysql -uroot -p
      # 使用管理员账户为项目创建一个数据库 student_manage 用来存放项目数据
      create database student_manage default charset=utf8;
      # 创建用户账号 student_manage, 密码 student_manage (由identified by 指明)
      create user student_manage identified by 'student_manage'; 
      # 授权student_manage 数据库下的所有表(student_manage.*)的所有权限(all)给用户student_manage在以任何ip访问数据库('student_manage'@'%')
      grant all on student_manage.* to 'student_manage'@'%';
      # 刷新生效用户权限
      flush privileges;
      
    • 创建数据库时可能的报错

      ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
      # 这个错误提示表明您设置的密码不符合当前数据库的密码策略要求,数据库的密码策略通常会对密码的复杂性、长度等方面有一定的要求。如果你希望仍然使用简单密码,但是遇到了密码策略的限制,需要先调整数据库的密码策略,以允许使用这个相对简单的密码。(可能会降低数据库的安全性,仅在特殊情况下并且您完全了解风险时才建议这样做)
      # 解决方案:修改一些系统变量来放宽密码策略,使用以下命令来临时修改密码策略(需要具有足够的权限)
      # 将密码策略设置为 LOW 并将密码最小长度设置为 4
      SET GLOBAL validate_password.policy=LOW;
      SET GLOBAL validate_password.length=4;
      
    • 导入数据到服务器的数据库

      mysql -u student_manage -p student_manage < student_manage.sql
      
  • 使用 Django 自带 WebServer 启动测试项目
    • 启动项目

      # 关闭防火墙
      sudo systemctl stop firewalld
      # 进入项目目录
      cd /var/www/student_management
      # 创建日志存放目录
      mkdir -p /var/www/student_management/logs/
      # 使用stu_manage环境中的python3启动项目
      /python_envs/stu_manage/bin/python3 manage.py runserver 127.0.0.1:80
      
    • 访问测试

      wget http://127.0.0.1:80/admin
      --2024-08-15 13:58:29--  http://127.0.0.1/admin
      Connecting to 127.0.0.1:80... connected.
      HTTP request sent, awaiting response... 301 Moved Permanently
      Location: /admin/ [following]
      --2024-08-15 13:58:29--  http://127.0.0.1/admin/
      Reusing existing connection to 127.0.0.1:80.
      HTTP request sent, awaiting response... No data received.
      Retrying.
      

七、使用 uWSGI + Nginx 部署项目

  • 前端项目打包并上传到服务器
    • 修改前端项目API请求的地址

      # 我们在nginx部署时,后端项目的访问接口为: http://139.9.253.236:80/api
      # 所以我们需要修改前端异步请求的的baseURL (项目目录src\utils\request.js)
      const baseURL = 'http://139.9.253.236:80/api/'
      
    • 在前端项目根目录下执行打包指令

      # 打包成功将生成一个 dist 文件夹,其中包含了打包后的前端静态文件
      npm run build
      
    • dist 文件夹上传到服务器

      # 在服务器的student_management项目目录下创建front_project目录用来存放前端源码
      mkdir -p /var/www/student_management/front_project/
      
      # 将本机前端项目源码dist目录上传到服务器的front_project目录
      # remote-centos为服务器地址,如果没有配置密钥访问可以使用 "用户名@IP地址"代替
      scp -r D:\我的项目\学生管理系统\student_management_frontend\dist remote-centos:/var/www/student_management/front_project/
      
  • 收集项目的静态文件
    • 修改Django项目配置文件

      # 编辑settings.py文件
      vim /var/www/student_management/student_management/settings.py
      
      # 关闭DEBUG调式模式,使用生产环境运行项目
      DEBUG = False
      # 将静态文件收集的到all_static目录
      STATIC_ROOT = os.path.join(BASE_DIR, "all_static")
      # 修改 ALLOWED_HOSTS,添加服务器的域名或 IP 地址(表示只允许指定IP访问我的Django后端API)
      ALLOWED_HOSTS = ['139.9.253.236']
      # 跨源资源共享配置,允许域名加入白名单(我们这里将前后端项目部署在一个域名下,这里其实可以省略;我们这里做以后的扩展准备)
      # CORS_ALLOWED_ORIGINS 为推荐使用的配置选项; 可以直接指定允许的源列表,每个源可以是完整的URL或者只是域名
      # CORS_ORIGIN_WHITELIST 相对较旧的配置方式,也是用于指定允许的源,但通常只接受域名形式,不接受完整的 URL
      CORS_ALLOWED_ORIGINS = (
      	# 仅允许来自 139.9.253.236 的请求进行跨源资源共享
      	'http://139.9.253.236:80',
          'http://127.0.0.1:8888',
          'http://localhost:8888',
          'http://192.168.110.169:8888',
          'http://www.studentmanage.com:8888',
      )
      
    • 收集前端项目后端项目的静态文件进行整合部署

      # 进入项目根目录,执行静态文件收集
      cd /var/www/student_management
      /python_envs/stu_manage/bin/python3 manage.py collectstatic
      # 查看搜集的静态文件
      ll /var/www/student_management/all_static
      # 将前端生成的 dist 文件夹中的内容移动到 Django 项目的静态文件目录下(由 STATIC_ROOT 配置指定,这里为all_static)
      cp -r /var/www/student_management/front_project/dist/* /var/www/student_management/all_static
      
    • 修改文件访问权限

      # 确保 nginx 用户和组对指定的目录及其内容具有适当的所有权和权限,以解决可能存在的权限问题。
      chown -R nobody:nobody /var/www
      chmod -R 755 /var/www
      
  • 创建 uWSGI 配置文件,启动 uWSGI 服务
    • 安装 uWSGI

      # 重要说明:通过 yum install uwsgi 安装的 uWSGI 可能与您虚拟环境中的 Python 解释器和依赖库存在不兼容或不一致的情况。建议使用 pip 在虚拟环境中安装 uwsgi ,这样可以更好地确保其与虚拟环境中的配置和依赖项相匹配。
      # 激活虚拟环境
      source /python_envs/stu_manage/bin/activate
      # 使用 pip 工具来安装或升级 setuptools 和 wheel
      pip3 install --upgrade setuptools wheel
      # 在虚拟环境中安装uwsgi
      pip3 install uwsgi
      
    • 以命令行的方式启动 uWSGI 服务并测试

      # 使用虚拟环境中的 uwsgi 启动项目
      /python_envs/stu_manage/bin/uwsgi --http 172.21.134.88:80 --file student_management/wsgi.py --static-map=/static=static
      
      # 指令说明:
      # 使用位于 /python_envs/stu_manage/bin/ 目录下的 uwsgi 程序,并为其指定了以下参数:
      --http 172.21.134.88:80:表示以 HTTP 协议在指定的 IP 地址 172.21.134.88(服务器局域网IP) 和端口 80 上提供服务。
      --file student_management/wsgi.py:指定要运行的 WSGI(Web Server Gateway Interface)应用程序文件为 student_management/wsgi.py 。
      --static-map=/static=static:设置静态文件的映射,将 URL 路径中以 /static 开头的请求映射到本地目录 static 。
      
      # 访问测试
      wget http://172.21.134.88:80/admin
      --2024-08-16 15:05:07--  http://172.21.134.88/admin
      Connecting to 172.21.134.88:80... connected.
      HTTP request sent, awaiting response... 301 Moved Permanently
      Location: /admin/ [following]
      --2024-08-16 15:05:07--  http://172.21.134.88/admin/
      Connecting to 172.21.134.88:80... connected.
      HTTP request sent, awaiting response... 302 Found
      Location: /admin/login/?next=/admin/ [following]
      --2024-08-16 15:05:07--  http://172.21.134.88/admin/login/?next=/admin/
      Connecting to 172.21.134.88:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 4195 (4.1K) [text/html]
      Saving to: ‘admin’
      
      100%[===========================================>] 4,195       --.-K/s   in 0s
      2024-08-16 15:05:07 (353 MB/s) - ‘admin’ saved [4195/4195]
      
    • 以配置文件的方式启动 uWSGI 服务

      • scripts 目录下创建一个 uWSGI 配置文件,例如 uwsgi.ini

        cd /var/www/student_management/scripts
        vim uwsgi.ini
        
      • uwsgi.ini

        [uwsgi]
        # 项目目录
        chdir=/var/www/student_management/
        # 启动uwsgi的用户名和用户组
        uid=root
        gid=root
        # 指定项目的application
        module=student_management.wsgi:application
        # 虚拟环境的根目录(使用虚拟环境中的Python解释器)
        home = /python_envs/stu_manage
        # 通过socket文件与nginx通信,指定sock的文件路径
        socket=/var/www/student_management/scripts/uwsgi.sock
        # 通过HTTP协议与nginx进行通信
        # http = 0.0.0.0:9999
        # 启用主进程
        master=true
        # 进程个数
        workers=5
        pidfile=/var/www/student_management/scripts/uwsgi.pid
        # 自动移除unix Socket和pid文件当服务停止的时候
        vacuum=true
        # 序列化接受的内容,如果可能的话
        thunder-lock=true
        # 启用线程
        enable-threads=true
        # 设置自中断时间
        harakiri=30
        # 设置缓冲
        post-buffering=4096
        # 设置日志目录
        daemonize=/var/www/student_management/scripts/uwsgi.log
        
      • 启动 uWSGI 服务

        # 启动uwsgi服务:
        /python_envs/stu_manage/bin/uwsgi --ini uwsgi.ini
        
        # uwsgi的其他操作指令
        # 重新加载: 
        /python_envs/stu_manage/bin/uwsgi --reload uwsgi.pid
        # 停止uwsgi服务:
        /python_envs/stu_manage/bin/uwsgi --stop uwsgi.pid
        # 强制杀死uwsgi进程:
        pkill -f uwsgi -9 
        killall -s INT uwsgi
        # 查看uwsgi进程状态:
        ps -aux|grep uwsgi
        ps -ef | grep -i uwsgi
        # 查看uwsgi服务运行状态(uwsgi为系统服务的前提下,这里我们没有设置):
        systemctl status uwsgi.service
        
    • 查看uWSGI 服务启动情况 (以下说明成功启动uWSGI 服务)

      ps -ef | grep -i uwsgi
      root       686     1  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       687   686  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       688   686  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       689   686  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       690   686  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       691   686  0 16:44 ?        00:00:00 uwsgi --ini uwsgi.ini
      root       741 23788  0 16:45 pts/2    00:00:00 grep --color=auto -i uwsgi
      
  • 配置 Nginx 服务器,启动项目
    • 创建 nginx 配置文件 student_manage.conf

      # 进入nginx的配置文件夹(我这里编译安装的是这个路径,其他的不一定)
      cd /usr/local/nginx/conf
      vim student_manage.conf
      
    • student_manage.conf

      events {
          worker_connections  1024;
      }
      http {
          include       mime.types;
          default_type  application/octet-stream;
          server {
              listen 80;
              server_name 39.99.253.236 ;
              access_log  /var/log/nginx/access.log;
              charset  utf-8;
              gzip on;
              gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
      
              error_page  404           /var/www/student_management/all_static/404.html;
              error_page  500 502 503 504  /50x.html;
      
      
              # 处理 Django 的请求(nginx作为反向代理服务服务器处理uwsgi 服务器的请求)
              location /api/ {
                  # 通过 rewrite 规则将其重写为去掉 /api 前缀的形式,再转发给 Django
                  rewrite ^/api/(.*)$ /$1 break;
                  include uwsgi_params;
                  uwsgi_connect_timeout 30;
                  # 指定将这些请求通过 Unix 套接字(uwsgi.sock)传递给 uwsgi 服务器进行处理
                  uwsgi_pass unix:/var/www/student_management/scripts/uwsgi.sock;
              }
      
              # 处理前端静态文件
              location / {
                  # 前端静态文件项目目录
                  root /var/www/student_management/all_static;
                  try_files $uri $uri/ /index.html;
      
              }
              # 处理媒体文件访问请求
              location /api/media {
                  alias /var/www/student_management/media;
              }
          }
      }
      
    • 启动项目(需要确保 uWSGI 服务已经正常启动)

      # 使用指定的nginx配置文件启动nginx
      nginx -c /usr/local/nginx/conf/student_manage.conf
      # 启动nginx 
      nginx
      # 重启nginx 
      nginx -s reload
      # 关闭nginx 
      nginx -s stop
      # 强制杀死uwsgi进程:
      pkill -f nginx -9 
      killall -s INT nginx
      # 查看nginx进程状态:
      ps -aux|grep nginx
      
    • 跟踪日志运行

      # 跟踪nginx运行
      tail -f /var/log/nginx/access.log
      # 跟踪uwsgi运行
      tail -f /var/www/student_management/scripts/uwsgi.log
      # 跟踪django运行
      tail -f student_management.log
      
    • 访问测试

      # 关闭防火墙
      sudo systemctl stop firewalld
      # 本机wget访问测试
      wget http://139.9.253.236:80/admin
      # 浏览器访问测试
      http://139.9.253.236/login
      
posted @ 2024-08-16 21:19  CSMrDong  阅读(21)  评论(0编辑  收藏  举报