Django项目基于uWSGI与Nginx的服务器部署指南

键盘旁的猫
键盘旁的猫
发布时间:2026-10-15 | 4人浏览过
原创

本文详细讲解如何在Linux服务器上使用Anaconda管理Python环境,并通过uWSGI与Nginx完成Django项目的生产环境部署。内容涵盖虚拟环境创建、uWSGI配置文件编写、Nginx反向代理设置以及HTTPS SSL证书的配置步骤,帮助开发者实现高效稳定的Web服务上线。

准备工作

建议使用Anaconda来管理Python运行环境,因为Python环境中经常会出现各种版本依赖冲突的问题。

安装Anaconda:

wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
bash Anaconda3-2020.11-Linux-x86_64.sh

安装过程中一路回车,当出现提示时输入“yes”并回车,安装目录默认位于/root下。

将conda添加到系统环境变量中。

vim /etc/profile

在配置文件末尾添加相应的环境变量设置。

PATH=$PATH:/root/anaconda3/bin		# 根据目录情况
export PATH

执行命令以启用更新后的环境变量。

source /etc/profile

创建合适的虚拟环境。

conda env list			# 查看环境
conda create -n myDjango python=3.7.5
conda activate myDjango
# 启动虚拟环境时可能需要先
source activate

安装项目所需的依赖组件。

主要需要安装的组件包括Django、uWSGI以及Nginx。

pip install django		# 版本为4以上
pip install uwsgi		
yum install nginx

使用查看版本的命令来确认各组件是否安装成功。

python -m django --version
uwsgi --version
nginx -V

在本地创建Django程序。

可以通过PyCharm一键生成,也可以使用命令行工具创建。

django-admin startproject mysite

生成的目录结构如下所示。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py文件用于启动项目,运行命令为python manage.py runserver。
  • 二级目录mysite用于对项目的整体配置进行管理。
  • mysite/settings.py是项目的核心配置文件,包含数据库连接、Debug模式、语言及时间区等设置。
  • mysite/urls.py负责配置项目的URL路由规则。
  • mysite/wsgi.py文件在使用uWSGI管理Django程序时会被调用。

创建Django应用。

python manage.py startapp myApp

生成的app目录结构如下,可以在其中编写视图模块,并在urls中配置路由以提供访问接口,此处不再赘述具体代码。

myApp/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

使用文件传输工具将Django程序上传至服务器。

可以使用Xftp、FileZilla或宝塔面板等工具进行传输。

部署工作

配置uWSGI。

在已上传至服务器的Django项目目录下创建uwsgi.ini文件,用于定义uWSGI的配置参数。

示例中项目目录路径为/home/mysite。

[uwsgi]
chdir=/home/djangoProject	# 项目位置
#socket=:8000				# 通过nginx使用的配置
http=:8000					# 单独启动时使用的配置
wsgi-file=/home/djangoProject/djangoProject/wsgi.py		# 项目中wsgi文件位置
process=4
threads=2
pidfile=uwsgi.pid			# 生产pid,log文件,以查看日志和pid信息
daemonize=uwsgi.log
master=True

此时可以启动uWSGI来运行项目。

uwsgi --ini uwsgi.ini	# 通过刚创立的ini配置来启动,会生成pid和log文件
uwsgi --stop uwsgi.pid	# 必须使用pid文件来停止程序

随后可以使用端口查看命令检查程序是否正在运行。

netstat -tlnp|grep 8000	# django程序默认开启端口为8000,也可在ini文件中自行修改

若启动成功,可以通过访问域名或IP地址加端口8000来访问Django程序。

配置Nginx。

首先需要修改uwsgi.ini配置,注释掉http部分,启用socket部分。

[uwsgi]
chdir=/home/djangoProject	# 项目位置
socket=:8000				# 通过nginx使用的配置
#http=:8000					# 单独启动时使用的配置
wsgi-file=/home/djangoProject/djangoProject/wsgi.py		# 项目中wsgi文件位置
process=4
threads=2
pidfile=uwsgi.pid			# 生产pid,log文件,以查看日志和pid信息
daemonize=uwsgi.log
master=True

Nginx的默认配置文件位于/etc/nginx/nginx.conf,需要编辑的是http块下的server内容。在location中增加以下两项配置。

uwsgi_pass 0.0.0.0:8000;			# 与uwsgi.ini文件配置的socket保持一致
include /etc/nginx/uwsgi_params;	# 引用nginx的uwsgi_params载入参数

server部分的配置示例如下。

server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
    		uwsgi_pass 0.0.0.0:8000;
    		include /etc/nginx/uwsgi_params;
    }
}

可以使用nginx -t命令检查配置是否合法。通过server命令可以启动、停止或重启Nginx服务。

server nginx start/stop/restart

Nginx默认开启的端口为80,也可以通过查看端口状态来确认是否成功开启。

netstat -tlnp|grep 80

若启动成功,则Nginx反向代理配置生效,此时可以通过访问80端口来访问Django程序。

配置SSL证书以提供HTTPS访问。

需要在服务器代理服务商处申请SSL证书并下载Nginx版本,得到包含域名的证书文件.pem和证书密钥.key。将这两个文件传输到服务器的Nginx目录下,建议建立一个专用的证书目录存放。

修改nginx.conf配置文件中的server部分。

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  _;
    root         /usr/share/nginx/html;

    ssl_certificate "/etc/nginx/cert/证书名.pem";
    ssl_certificate_key "/etc/nginx/证书密钥.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
            uwsgi_pass 0.0.0.0:8000;
            include /etc/nginx/uwsgi_params;
    }
    error_page 404 /404.html;
        location = /40x.html {
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
}

注意:每次更改Nginx配置后,都需要重启Nginx服务才能生效。

到此这篇关于Django+uWSGI+Nginx服务器部署的文章就介绍到这了,更多相关Django+uWSGI+Nginx服务器部署内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本站声明

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

Python 相关产品和应用

全部下载

专题列表