首页 > 系统相关 >Nginx项目部署

Nginx项目部署

时间:2024-08-16 21:15:28浏览次数:7  
标签:manage nginx 部署 项目 Nginx student MySQL -- uwsgi

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 139.9.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           /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 /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
      

标签:manage,nginx,部署,项目,Nginx,student,MySQL,--,uwsgi
From: https://www.cnblogs.com/cs-songbai/p/18363644

相关文章

  • Scrapy框架进阶攻略:代理设置、请求优化及链家网实战项目全解析
    scrapy框架加代理付费代理IP池middlewares.py#代理IP池classProxyMiddleware(object):proxypool_url='http://127.0.0.1:5555/random'logger=logging.getLogger('middlewares.proxy')asyncdefprocess_request(self,request,spider):......
  • 基于SpringBoot+Vue+uniapp的职业高中智慧作业试题系统源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • MNN框架在windows上的部署
    一、MNN.lib文件等的生成算是第一次接触MNN框架部署这部分内容吧,对整个流程都不是很理解,故先从官方文档入手先从github下载官方的项目,地址为:https://github.com/alibaba/MNN使用visualstudio的powershell打开,执行官网给出的指令cdpath/to/MNNpowershell./schema/generat......
  • 信创环境:鲲鹏ARM+麒麟V10离线部署K8s和Rainbond信创平台
    在上篇《国产化信创开源云原生平台》文章中,我们介绍了Rainbond作为可能是国内首个开源国产化信创平台,在支持国产化和信创方面的能力,并简要介绍了如何在国产化信创环境中在线部署Kubernetes和Rainbond。然而,对于大多数国产化信创环境,如银行、政府等机构,离线部署的需求更为普......
  • 【mysql】mysql安装部署以及用户误删恢复
      本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》: python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新......
  • 2、zabbix-服务端(监控端)的部署--只负责监控
    1、访问zabbix官网:https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=red_hat_enterprise_linux&os_version=7&components=server_frontend_agent&db=mysql&ws=apache可以选择按照官网提供的步骤来安装  =================================================......
  • 【课程总结】day24(下):大模型部署调用(vLLM+LangChain)
    前言在上一章【课程总结】day24(上):大模型三阶段训练方法(LLaMaFactory)内容中主要了解一个大模型的训练过程,无论是第三方的大模型还是自研的大模型,都需要部署到服务端,提供对应API接口供上层应用使用。所以,本章将主要了解vLLm+langchain的基本使用方法。大模型应用框架......
  • etcd集群部署
    etcd集群部署一、环境准备1、准备3台服务器。 操作系统IP地址主机名CentOS7.9192.168.110.12etcd1CentOS7.9192.168.110.13etcd2CentOS7.9192.168.110.15etcd3 2、配置3台服务器hosts。(3个节点相同操作)vim/etc/hosts192.168.110......
  • Linux安装Nginx详细教程
    1.安装nginx依赖yum-yinstallgccgcc-c++pcrepcre-develzlibzlib-developensslopenssl-devel2.安装wgetyum-yinstallwget我这里是已经安装好的,运行代码会是下面的结果,不确定自己有没有安装,可以执行试下 3.创建nginx安装目录    /usr/local/目录下......
  • 打包nginx镜像,添加flv_live模块
    因为工作需要而打包一个包含nginx_http_flv_live模块,记录下编译中遇到的问题,和解决方式编译nginx的最大的一个坑就是基础镜像使用的debian:latest,导致各种编译后能通过rtmp推流但是无法通过http拉取http-flv视频流版本alpine==3.8.5nginx==1.25.5https://nginx.org/down......