Django是一个功能丰富、高效且安全的框架,适合各种规模的Web应用程序开发。它不仅能够加速开发过程,还能确保应用程序的质量和稳定性。本文介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。
产品优势
使用Nginx和uWSGI部署Django项目,能够高效处理高并发请求、快速提供静态资源、确保运行、增强安全性以保护敏感数据,并支持灵活扩展以应对流量高峰,从而显著提升用户体验和业务连续性。
高性能:Nginx能处理大量并发连接;而uWSGI专注于Python Web应用的高效执行,两者结合确保Django程序的快速响应。
易于管理和配置:简单直观的配置语法您可以快速设置和调整服务器参数,适应不同的业务需求变化,降低运维复杂度。
模块化设计:高度模块化的特性允许根据具体需求选择必要的组件,节省资源的同时提高了系统的灵活性和效率。
方案架构
用户请求:浏览器发送HTTP请求。
Nginx:接收请求,如果是静态文件,直接返回;否则,转发给uWSGI。
uWSGI:接收请求并通过WSGI协议传递给Django应用。
Django:处理业务逻辑,可能涉及数据库查询或模板渲染,生成响应内容。
返回响应:Django将处理结果交给uWSGI,uWSGI负责将这些信息打包成适当的格式,再传递回Nginx。
准备工作
创建或已有ECS实例,ECS实例必须满足以下条件。
操作系统必须为Alibaba Cloud Linux 3/2、CentOS 7/8、Ubuntu 22/20/18。
已分配公网IP或绑定弹性公网IP(EIP),具体操作,请参见为ECS实例开通公网。
安全组的入方向添加安全组规则并放行22、80、8001和8002端口。具体操作,请参见添加安全组规则。
说明8001端口为测试uWSGI服务。
8002端口为测试Django项目。
已安装Python 3。
已安装Nginx。如需安装,请参见安装Nginx环境。
请您务必满足以上所有条件。
步骤一:部署uWSGI
执行以下命令,安装uWSGI。
sudo pip3 install uwsgi
如果回显信息如下所示,表示uWSGI已安装成功。
执行以下命令,创建测试目录。
本示例以创建
/home/myblog
目录为例,您可以根据需求自定义文件路径。sudo mkdir /home/myblog
执行以下命令,创建并编辑测试程序文件
test.py
。cd /home/myblog sudo vim test.py
输入
i
进入编辑模式,将以下内容复制到文件中。def application(env,start_response): start_response('200 ok',[('Content-Type','text/html')]) return [b"Hello World"]
按
Esc
键,输入:wq
保存并退出文件。执行以下命令,测试运行访问。
Alibaba Cloud Linux 3/2 、CentOS 7/8
sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py
Ubuntu 22/20/18
sudo uwsgi --http :8001 --wsgi-file test.py
回显信息如下图所示。
在本地电脑浏览器的地址栏输入
http://<ECS实例的公网IP地址>:8001
,访问测试文件。出现如下页面,表示uWSGI环境搭建成功。
同时后台回显信息如下。
步骤二:部署Django
执行以下命令,安装Django。
sudo pip3 install Django
安装成功回显信息如下图所示。
执行以下命令,创建项目。
本示例以创建项目文件
uwsgi_project
为例,您可以根据需求自定义文件夹。Alibaba Cloud Linux 3/2 、CentOS 7/8
sudo /usr/local/bin/django-admin.py startproject uwsgi_project
Ubuntu 22/20/18
sudo /usr/local/bin/django-admin startproject uwsgi_project
执行以下命令,编辑
settings.py
文件。sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py
将
ALLOWED_HOSTS = [ ]
修改为ALLOWED_HOSTS = ["*"]
。说明["*"]
表示允许任何IP地址访问,否则访问会被拒绝,具体以您实际环境为准。将
DATABASES
中的内容注释。重要DATABASES
用于指定Django项目将要使用的数据库设置。本实例中未使用数据库所以需要注释。在实际项目中您可按需配置。
修改完成后,按
Esc
键,输入:wq
保存并退出文件。执行以下命令,启动Django环境。cd /home/myblog/uwsgi_project sudo python3 manage.py runserver 0.0.0.0:8002
在本地电脑浏览器的地址栏输入
http://<ECS实例的公网IP地址>:8002
,即可访问相关Django页面。
步骤三:配置Nginx、uWSGI与Django的集成
您需要依次修改Nginx和uSWGI配置,目的是在Nginx和uSWGI配置文件中写入Django项目、Nginx和uSWGI的位置或者版本信息,让这个流程可以运转起来。
执行以下命令,打开Nginx配置文件。
Alibaba Cloud Linux 3/2 、CentOS 7/8
sudo vim /etc/nginx/nginx.conf
Ubuntu 22/20/18
sudo vim /etc/nginx/sites-enabled/default
按
i
键进入编辑模式,在server
中修改或添加以下参数。upstream django { #具体端口必须与您uWSGI配置文件中定义的端口一致 server 127.0.0.1:8001; } server { #设置的nginx访问端口 listen 8002; server_name test; charset utf-8; location /static { # 启用目录列表 autoindex on; # 静态文件的绝对路径。请根据实际情况修改这个路径。 alias /home/myblog/uwsgi_project/static; } location / { # 将请求传递给uWSGI服务器,这里的地址与upstream块中的定义相匹配。 uwsgi_pass 127.0.0.1:8001; # 包含 uwsgi 参数配置 include uwsgi_params; # Nginx自带的uWSGI参数文件,具体目录请根据实际情况修改 include /etc/nginx/uwsgi_params; # 指定uWSGI使用的Python WSGI入口点。iCourse.wsgi为Django项目的wsgi文件名。 uwsgi_param UWSGI_SCRIPT iCourse.wsgi; #设置uWSGI的工作目录,具体目录请根据实际情况修改。 uwsgi_param UWSGI_CHDIR /iCourse; # 指定默认的索引文件。 index index.html index.htm; client_max_body_size 35m; } }
具体位置如下图所示。
执行以下命令,创建日志目录,uWSGI 将会作为守护进程在后台运行,并将它的输出重定向到这个日志文件中。
sudo mkdir -p /var/log/uwsgi/ #您可根据实际情况修改。
执行以下命令,新建uWSGI配置文件
uwsgi_config.ini
。sudo vim uwsgi_config.ini
按
i
键进入编辑模式,在文件中添加以下参数。编辑完成后,按Esc
键,输入:wq
保存并退出文件。[uwsgi] #此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致。 socket = 127.0.0.1:8001 #指定项目目录,根据您的实际项目修改该路径。 chdir = /home/myblog/uwsgi_project/ #指定Django的wsgi file文件,根据项目修改。 wsgi-file = uwsgi_project/wsgi.py #最大工作进程。 processes = 4 #每个工作进程processes启动后开启的线程个数。 threads = 2 #环境退出时自动清理。 vacuum = true #设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k。 buffer-size = 65536 #日志文件路径,请确保此路径可写。根据您的实际项目修改该路径。 daemonize = /var/log/uwsgi/uwsgi_project.log #确保线程支持已启用。 enable-threads = true
启动程序。
执行以下命令,重启Nginx服务。
sudo systemctl restart nginx
执行以下命令,重启uWSGI服务。
执行以下命令,停止已启动的uWSGI程序。
ps aux |grep uwsgi sudo kill -9 13187 #13187指通过上述命令获取的pid,具体pid以您现场实时获取的为准
执行以下命令,启动uWSGI服务。
Alibaba Cloud Linux 3/2 、CentOS 7/8
uwsgi --ini uwsgi_config.ini
Ubuntu 22/20/18
sudo uwsgi --ini uwsgi_config.ini
同时后台回显信息如下。
在本地电脑浏览器的地址栏输入
http://<ECS实例的公网IP地址>
:8002,即可访问相关Django页面。