使用Nginx+uWSGI部署Django项目
Django是一个功能全面、高效且安全的Web框架,旨在帮助开发者快速构建高性能、安全且可维护的Web应用程序。本文主要介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。
前提条件·
- 已购买一台弹性云服务器,且为其绑定弹性公网IP。
- 操作系统为CentOS 7/8、Ubuntu 22/10/18、Huawei Cloud EulerOS 2.0。
- 弹性云服务器所在安全组添加了如下表所示的安全组规则,具体步骤参见为安全组添加安全组规则。
表1 安全组规则 方向
优先级
策略
类型
协议端口
源地址
入方向
1
允许
IPv4
TCP: 22
0.0.0.0/0
入方向
1
允许
IPv4
TCP: 80
0.0.0.0/0
入方向
1
允许
IPv4
TCP: 8001
0.0.0.0/0
入方向
1
允许
IPv4
TCP: 8002
0.0.0.0/0
入方向
1
允许
IPv4
TCP: 8003
0.0.0.0/0
- 为了更好的获取和更新系统和软件,建议您更新镜像源为华为云镜像源,详细操作,请参见如何使用华为云开源镜像配置yum源(x86_64和鲲鹏)?。
操作步骤
- 登录弹性云服务器。
- 搭建Python环境。具体操作请参见搭建Python环境。
- 已安装Nginx。具体操作请参见搭建LNMP环境。
- 部署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,按Enter键关闭并保存配置文件。
- 执行以下命令,测试运行访问。
- CentOS 7/8
sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py
- Ubuntu 18/20/22
sudo uwsgi --http :8001 --wsgi-file test.py
回显信息如下图所示。
- CentOS 7/8
- 使用浏览器访问“http://服务器IP地址:8001”,显示如下页面,说明环境搭建成功。
在运行test.py命令执行期间才可以正常通过8001访问内容,访问期间会新增如下回显。
- 执行以下命令,安装uWSGI。
- 部署Django。
- 执行以下命令,安装Django。
sudo pip3 install Django
回显信息如下图所示。
- 执行以下命令,创建项目。
本示例以创建项目文件django_project为例,您可以根据需求自定义文件夹。
sudo /usr/local/bin/django-admin startproject django_project
- 执行以下命令,编辑settings.py文件。
sudo vim /home/myblog/django_project/django_project/settings.py
- 执行以下命令,启动Django环境。
cd /home/myblog/django_project sudo python3 manage.py runserver 0.0.0.0:8003
此处端口号可以自由配置,下一步访问时按执行命令中的端口号访问。
- 使用浏览器访问“http://服务器IP地址:8003”,即可访问相关Django页面。
在启动Django环境期间才可以正常通过8003访问内容。
- 执行以下命令,安装Django。
- 配置nginx+uwsgi+Django应用集成。
- 执行以下命令,打开Nginx配置文件。
- CentOS 7/8
sudo vim /etc/nginx/nginx.conf
- Ubuntu 22/20/18
sudo vim /etc/nginx/sites-enabled/default
- CentOS 7/8
- 按i键进入编辑模式,在server中修改或添加以下参数。
upstream django { server 127.0.0.1:8001; #具体端口必须与您uWSGI配置文件中定义的端口一致 } server { listen 8002; #设置的访问端口 server_name test; charset utf-8; location /static { autoindex on; # 启用目录列表 alias /home/myblog/django_project/static; # 静态文件的绝对路径。请根据实际情况修改这个路径。 } location / { uwsgi_pass 127.0.0.1:8001; # 将请求传递给uWSGI服务器,这里的地址与upstream块中的定义相匹配。 include uwsgi_params; # 包含 uwsgi 参数配置 include /etc/nginx/uwsgi_params; # Nginx自带的uWSGI参数文件,具体目录请根据实际情况修改 index index.html index.htm; # 指定默认的索引文件。 client_max_body_size 35m; } }
- 编辑完成后,按Esc键,输入:wq保存并退出文件。
- 执行以下命令,创建日志目录,uWSGI 将会作为守护进程在后台运行,并将它的输出重定向到这个日志文件中。
sudo mkdir -p /var/log/uwsgi/
- 执行以下命令,新建uWSGI配置文件uwsgi_config.ini。
sudo vim uwsgi_config.ini
- 按i键进入编辑模式,在文件中配置以下参数。
[uwsgi] socket = 127.0.0.1:8001 #此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致。 chdir = /home/myblog/django_project/ #指定项目目录,根据您的实际项目修改该路径。 wsgi-file = django_project/wsgi.py #指定Django的wsgi file文件,根据项目修改。 processes = 4 #最大工作进程。 threads = 2 #每个工作进程processes启动后开启的线程个数。 vacuum = true #环境退出时自动清理。 buffer-size = 65536 #设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k。 daemonize = /var/log/uwsgi/uwsgi_project.log #日志文件路径,请确保此路径可写。根据您的实际项目修改该路径。 enable-threads = true #确保线程支持已启用。
- 编辑完成后,按Esc键,输入:wq保存并退出文件。
- 执行以下命令,打开Nginx配置文件。
- 验证。
- 执行以下命令,重启Nginx服务。
sudo systemctl restart nginx
- 执行以下命令,启动uWSGI服务。
- CentOS 7/8
uwsgi --ini uwsgi_config.ini
- Ubuntu 22/20/18
sudo uwsgi --ini uwsgi_config.ini
回显信息如下。
可以通过netstat -tuln| grep 8002观察到8002端口已配置成功,处于监听中状态。
sudo netstat -tuln | grep 8002
- CentOS 7/8
- 使用浏览器访问“http://服务器IP地址:8002”,即可访问相关Django页面。
以上相关配置仅用于测试演示,业务环境请谨慎使用。
- 执行以下命令,重启Nginx服务。