Django项目uwsgi+Nginx保姆级部署教程实现
本文详细讲解在CentOS 7.5环境下,使用Nginx与uWSGI部署Django项目的完整流程。涵盖Python虚拟环境搭建、uWSGI配置、Nginx反向代理设置及静态文件处理。通过具体命令和配置文件示例,帮助开发者解决部署中的常见报错,实现从代码上传到服务启动的全流程自动化部署。
前言与背景说明
写在最前:
由于突发疫情导致我的Hadoop系列教程中断,深感遗憾。因分布式环境位于学校,个人笔记本配置无法支撑运行,未验证代码前不敢随意撰写博客。寒假期间在家进行代码开发缺乏实际意义,因此我重新系统学习了计算机网络与操作系统。鉴于未来实习方向将侧重Python技术栈,虽然Java相关内容仍会持续更新,但也会推出更多入门教程,感谢大家的支持。
背景:
近期学习Django并开发了一个小型Demo,尝试将其部署至服务器以熟悉Django的完整部署流程。此前学习Flask时曾使用uWSGI作为Python Web服务器进行部署,因此本次部署同样选择Nginx配合uWSGI的组合方案。
购买云服务器后,我尝试安装宝塔面板以部署Django项目。鉴于之前使用宝塔部署PHP项目较为简便,便尝试利用宝塔部署Django,但经过一小时测试未果,最终放弃。因此决定回归原生方式,使用uWSGI配合Nginx进行部署。下文将重点标注可能遇到的坑点,以便未来编写博客或再次部署时减少配置文件编写的工作量。
部署环境准备
环境:
系统版本 :centos7.5
python 版本:3.6.5
nginx 版本:1.16.1
uwsgi 版本:2.0.18
若环境配置不同,请查阅其他相关资料进行相应调整。
环境准备:
部署前,请确保Linux服务器已正确安装对应版本的Python。如需使用Python 3版本,请自行查阅资料完成升级安装。
为实现更独立的部署环境,避免干扰其他项目,我们需要安装Python虚拟环境:
Python虚拟环境配置
sudo pip install virtualenv
sudo pip install virtualenvwrapper
virtualenvwrapper是virtualenv的扩展管理包,可将所有虚拟环境整合至一个目录下统一管理。
配置虚拟环境:
mkdir ~/.virtualenvs
打开.bashrc文件:
sudo vim ~/.bashrc
在.bashrc文件末尾添加以下内容:
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/python3/bin/virtualenvwrapper.sh
注意!:此处/usr/local/bin/virtualenvwrapper.sh仅为当前系统环境下的路径,并非所有服务器均位于此位置。若不清楚virtualenvwrapper.sh的具体位置,可通过搜索文件找到其在系统中的位置,并相应修改.bashrc文件。
启用配置文件:
source ~/.bashrc
若执行后无报错,则代表虚拟环境配置成功。常见报错通常是因为找不到virtualenvwrapper.sh文件。
创建虚拟环境:
选择你易于记忆的路径,新建一个env文件夹:
cd /www
mkdir env
cd env #进入env目录
新建一个虚拟环境:
mkvirtualenv -p /usr/bin/python3 orange_env # my_env是虚拟环境的名称
注意:若系统中不存在软连接/usr/bin/python3,将会报错提示找不到/usr/bin/python3。此时需手动新建软连接:
若遇到报错:
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 路径要改成自己的python安装路径
随后即可进入我们的虚拟环境:
source /www/env/orange_env/bin/activate
进入虚拟环境后,命令行前会出现括号,其中显示虚拟环境的名称:
(orange_env) [root@iz2ze1cvux96riiwfh05qqz ~]#
在虚拟环境中安装uWSGI:
pip install uwsgi
退出虚拟环境:
deactivate
再次在主环境中安装uWSGI:
pip install uwsgi
注意:若你有其他依赖库,如Django、mysqlclient等,请务必在虚拟环境中通过pip进行安装。
部署过程:
选择一个合适的位置,新建一个文件夹,并将你的Django项目上传至该目录:
以我为例:
Django项目部署与配置
cd /www
mkdir orange
上传解压操作省略,请记得上传至项目根目录,即直接包含manage.py文件的目录。
新建一个uWSGI配置文件。uWSGI支持多种配置文件类型,如YAML、XML、JSON、INI等,此处我选择XML格式。
执行命令vim mysite.xml(请注意mysite.xml文件需与项目的manage.py位于同一目录下)。
mysite.xml内容如下:
<uwsgi>
<socket>127.0.0.1:8080</socket><!-- 内部端口,自定义 -->
<chdir>/www/orange/</chdir><!-- 项目路径 -->
<module>orangeproject.wsgi</module> <!-- 一般模块名 项目名+wsgi -->
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
安装Nginx:
关于Nginx的基础入门教程(包括安装、启动、重启等)我之前已写过系列文章,若对此不熟悉,可参考以下文章:
链接:写给后端的Nginx初级入门教程:实战篇
查看Nginx配置文件路径:
Nginx反向代理设置
nginx -t
记得备份Nginx原有的配置文件,然后删除原有配置,直接加入以下内容:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 8000;
server_name 你的域名;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080;
uwsgi_param UWSGI_SCRIPT orangeproject.wsgi;
uwsgi_param UWSGI_CHDIR /www/orange/;
}
location /static/ {
alias /www/orange/transfer/static/;
}
}
}
注意模块名需保持一致,且Nginx监听的端口不能与Django启动端口相同,否则uWSGI会因端口被Nginx占用而启动失败。alias /www/orange/transfer/static/; 指定的是你的静态文件地址,包括CSS、图片等。
检查Nginx配置是否成功:
nginx -t
重启Nginx服务:
nginx -s reload
随后,再次进入我们的虚拟环境orange_env中,启动uWSGI服务器:
cd /www/orange
uwsgi -x mysite.xml
然后打开本地浏览器,输入:域名:8000(若已完成备案,可修改Nginx配置文件为80端口)。
大功告成:

到此这篇关于Django项目uWSGI+Nginx保姆级部署教程实现的文章就介绍到这了,更多相关Django uWSGI+Nginx部署内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













