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
-
-
三、安装 MySQL
( yum
安装)
-
删除已安装的
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.txt
与student_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
-