Django项目uwsgi+Nginx保姆级部署教程实现

认真发呆
认真发呆
发布时间:2026-10-14 | 4人浏览过
原创

本文详细讲解在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部署内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表