当前位置:首页>Linux>Django应用部署难度大?Linux部署Nginx与uWSGI实战教程

Django应用部署难度大?Linux部署Nginx与uWSGI实战教程

  • 2026-10-11 08:40:33
Django应用部署难度大?Linux部署Nginx与uWSGI实战教程

【痛点问题】

Django web应用开发一般在windows上进行,开发完毕后需要将应用部署到Linux系统上。Django自带的runserver由于性能差、不安全、不支持高并发等缺点,不能在线上使用。

而Django+Linux+Nginx+uWSGI是最为经典、最稳定的生产环境组合,在各种大型生产环境广泛应用!但是很多小伙伴反馈说生产上部署难度高,底层依赖复杂、安装步骤繁琐。因此,为了解决痛点问题,本文带领大家一步步完成Django应用部署,新手也能直接照着操作,一次成功。

【业务流程】

(1)前端用户通过浏览器访问http/https网址;

(2)Nginx响应前端业务请求,自己处理请求中静态资源的内容(图片、css、js、视频等),而针对请求中动态交互的内容(信息验证、业务逻辑处理、数据交互),转发给后面的uWSGI进行处理。

(3)uWSGI接收动态业务请求,通过wsgi接口,与后面的Django项目进行联动,从而完成动态业务处理。

【环境准备】

(1)Linux服务器一台,配置2核4G;

(2)准备nginx和uwsgi离线安装包,并已完成上传到Linux系统;

(3)关闭防火墙和SELinux;

(4)已配置基于ISO镜像的YUM源,具体配置步骤可参考本公众号之前的文章运维实操指南|搭建内网YUM源服务器,解决内网软件部署难的问题。

(5)已安装Python环境,具体安装步骤可参考本公众号之前的文章Linux内网环境下Python编译安装与pip 包离线部署实战。

【部署步骤】

(1)安装编译Nginx的基础工具包

#yum install gcc make openssl-devel zlib-devel pcre-devel

(2)解压Nginx和uWSGI安装包

①在/home目录创建nginx文件夹和uWSGI文件夹

#mkdir -p nginx uwsgi

②拷贝nginx压缩包到/home/nginx文件夹,拷贝uWSGI压缩包到/home/uwsgi文件夹。

# cp nginx-1.24.0.tar.gz /home/nginx/

# cp uwsgi-2.0.31.tar.gz/home/uwsgi/

③解压nginx和uWSGI两个压缩包文件

#tar -zxvf nginx-1.24.0.tar.gz

#tar -zxvf uwsgi-2.0.31.tar.gz

(3)编译安装Nginx和uWSGI

一、编译安装Nginx服务

1.生成nginx编译配置文件

进入到nginx-1.24.0文件夹内,需要编译HTTPS/SSL模块、TCP/UDP代理开启SSL加密、四层反向代理、性能优化、静态文件预压缩、支持线程池这6大模块,这些模块基本上覆盖了90%的应用场景。执行命令:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream_ssl_module --with-stream --with-http_gzip_static_module --with-threads

2.编译和安装Nginx

执行指令:

#make

#make install

3.Nginx自带的各类命令

进入到安装目录/usr/local/nginx/sbin,在这个里面进行nginx的启动、停止、重启和配置检查,执行指令:

nginx#启动Nginx服务

nginx -s stop#停止Nginx服务

nginx -s reload#重新加载Nginx

nginx -t#检查Nginx配置文件。

4.设置Nginx服务托管给systemd,并且开机自启

进入到/etc/systemd/system文件夹下,创建nginx.service文件,填写如下内容到nginx.service配置文件中。

[Unit]Description=Nginx HTTP ServerAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pid# 启动前先测试配置ExecStartPre=/usr/local/nginx/sbin/nginx -t# 启动命令ExecStart=/usr/local/nginx/sbin/nginx# 重载配置ExecReload=/usr/local/nginx/sbin/nginx -s reload# 停止命令ExecStop=/usr/local/nginx/sbin/nginx -s stopPrivateTmp=true# 异常退出自动重启(可选)Restart=on-failureRestartSec=2[Install]WantedBy=multi-user.target

#systemctl enable nginx

#systemctl start nginx

二、安装uWSGI服务

1.安装Python开发依赖包,uWSGI编译需要此工具

#yum install python3-devel

2.进入到uWSGI解压目录uwsgi-2.0.31,安装uWSGI服务。本文安装的Python是3.11.9版本,并且通过软链接生成Python3.11命令,执行命令:

#python3.11 setup.py install

3.设置uWSGI托管给systemd,并设置开机自启。

进入到/etc/systemd/system文件夹下,创建uwsgi.service文件,填写如下内容到uwsgi.service文件中。

[Unit]Description=uWSGI ServiceAfter=network.target[Service]# 运行用户(根据你的实际情况修改,通常是root)User=rootGroup=root#如果不确定路径,执行 which uwsgi 查看#uwsgi.ini文件位于/home/django文件夹下ExecStart=/usr/local/bin/uwsgi --ini /home/django/uwsgi.ini# 重启策略(崩溃自动重启)Restart=alwaysRestartSec=5# 工作目录(和你的uwsgi.ini 里的chdir 保持一致)WorkingDirectory=/home/django[Install]WantedBy=multi-user.target

# systemctl enable uwsgi

# systemctl start uwsgi

4.配置uwsgi.ini文件。

进入到/home/django文件夹下,创建uwsgi.ini文件。其中,设置processes为CPU核数*2,threads默认=2即可。如果想通过socket通信,保留socket这一行;如果想http通信,保留http这一行。

[uwsgi]# 你的Django 项目根目录(manage.py 所在文件夹)chdir = /home/django# Django 的 wsgi 文件(项目名.wsgi)module = 你的Django项目名.wsgi:application# 2核4G 服务器最佳进程配置master = trueprocesses = 4threads = 2# 使用 socket 和 Nginx 通信socket = %(chdir)/uwsgi.sockchmod-socket = 666vacuum = true#使用http和Nginx通信,本文进行注释#http=X.X.X.X:端口号 例如,http=127.0.0.1:8000# 安全设置single-interpreter = trueenable-threads = truethunder-lock = true# 日志daemonize = %(chdir)/uwsgi.logpidfile = %(chdir)/uwsgi.pid# 防止中文乱码env = LANG=en_US.UTF-8env = LC_ALL=en_US.UTF-8

(4)拷贝Django代码到指定目录

将开发好的代码,复制到/home/django文件下,保持django项中的manage.py与uwsgi.ini在同一级目录下。

(5)收集静态文件到manage.py同级目录下,本文收集js、css、png文件到static_prod文件夹中。执行命令:

#python3.11 manage.py collectstatic

(6)修改Nginx配置文件,将静态文件指向static_prod,将动态交互内容指向uwsgi

进入到/usr/local/nginx/conf文件夹下,修改nginx.conf文件内容如下所示:

location / {

proxy_pass http://127.0.0.1:8000;

}

location /static/ {

alias /home/django/static_prod/;

}

(7)重启nginx服务,让配置生效,最终达成效果如下图所示。其中,图片、js、css由nginx处理,登录验证等动态交互由uwsgi处理。

【结束语】

恭喜您,成功完成Django应用部署。评论区有文章总结!觉得好可以关注、点赞、推荐、转发,谢谢!

#linux#django#nginx#openEuler#uwsgi#python

最新文章

随机文章