使用Nginx+uWSGI部署Django项目


使用Nginx+uWSGI部署Django项目

Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目。本教程介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。

步骤一:安装或核对Python版本

which python3 
ll /usr/bin/python*

回显信息类似如下所示。

user@localhost:~$ which python3 
/usr/bin/python3
user@localhost:~$ ll /usr/bin/python*
-rwxr-xr-x 1 root root 3662032 Jul 1 2022 /usr/bin/python2.7*
lrwxrwxrwx 1 root root 9 Feb 8 14:05 /usr/bin/python3 -> python3.8*
-rwxr-xr-x 1 root root 5494584 Nov 14 20:59 /usr/bin/python3.8*
lrwxrwxrwx 1 root root 33 Nov 14 20:59 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config*
lrwxrwxrwx 1 root root 16 Mar 13 2020 /usr/bin/python3-config -> python3.8-config*

步骤二:部署Nginx环境

1.执行以下命令,安装Nginx。

sudo apt update
sudo apt -y install nginx

2.执行以下命令,启动并查看Nginx服务状态。

sudo systemctl start nginx
systemctl status nginx

如果回显信息中出现Active: active (running),表示Nginx服务已启动。

步骤三:部署及测试uWSGI环境

1.执行以下命令,安装uWSGI。

sudo pip3 install uwsgi
  • 如果回显信息如下所示,表示uWSGI已安装成功。
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting uwsgi
Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/b3/8e/b4fb9f793745afd6afcc0d2443d5626132e5d3540de98f28a8b8f5c753f9/uwsgi-2.0.21.tar.gz (808kB)
100% |████████████████████████████████| 808kB 72.9MB/s 
Installing collected packages: uwsgi
Running setup.py install for uwsgi ... done
Successfully installed uwsgi-2.0.22
  • 如果在安装中出现如下图所示的报错信息,请您执行以下命令后,重新安装uWSGI。
sudo apt -y install python3-devel.x86_64

image

2.执行以下命令,创建测试目录。

本示例以创建/home/myblog目录为例,您可以根据需求自定义文件路径。

sudo mkdir /home/myblog

3.执行以下命令,创建并编辑测试程序文件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保存并退出文件。

4.执行以下命令,测试运行访问。

sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py

回显信息如下图所示。

image

5.在本地电脑浏览器的地址栏输入http://<IP地址>:8001,访问测试文件。

如出现如下页面,表示uWSGI环境搭建成功。

image

步骤四:部署及测试Django环境

1.执行以下命令,安装Django。

sudo pip3 install Django

image

2.执行以下命令,创建项目。

本示例以创建项目文件uwsgi_project为例,您可以根据需求自定义文件夹。

sudo /usr/local/bin/django-admin startproject uwsgi_project

3.执行以下命令,编辑settings.py文件。

sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py

输入i进入编辑模式,将ALLOWED_HOSTS = [ ]修改为ALLOWED_HOSTS = ["*"]。修改完成后,按Esc键,输入:wq保存并退出文件。

说明

["*"]表示允许任何IP地址访问进来,否则访问会被拒绝,具体以您实际环境为准。

image

4.执行以下命令,启动Django环境。

cd /home/myblog/uwsgi_project
sudo python3 manage.py runserver 0.0.0.0:8002

如果出现以下类似报错:

django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).

image

您可以将settings.py文件中的DATABASES注释掉,重新启动Django环境即可。修改settings.py文件的具体操作,请参见编辑settings.py文件

image

5.在本地电脑浏览器的地址栏输入http://<IP地址>:8002,即可访问相关Django页面。

image

## 配置Django的静态文件存放目录
# 指定静态文件存放目录
STATIC_ROOT = BASE_DIR / 'static'

# 将django中默认静态文件存放到static目录中
python3 manage.py collectstatic

步骤五:配置Nginx、uWSGI、Django

1.如需配置Django,请在对应目录添加相关文件,具体以您部署的网站项目为准。本步骤仅用于展示基本的Django网页,请忽略此步骤。

2.执行以下命令,打开Nginx配置文件。

sudo vim /etc/nginx/sites-enabled/default

3.按i键进入编辑模式,在server中修改或添加以下参数。编辑完成后,按Esc键,输入:wq保存并退出文件。

        upstream django {
            server 127.0.0.1:8001; #具体端口必须与您uWSGI配置文件中定义的端口一致
        }
        server {
            listen       80; #设置的nginx访问端口
            server_name  test;
            charset      utf-8;
            location /static {
                autoindex on;
                alias /home/myblog/uwsgi_project/static; #具体目录以您现场具体部署的目录为准
            }

            location / {
                uwsgi_pass 127.0.0.1:8001;
                include uwsgi_params; #具体目录以您现场具体部署的目录为准
                include /etc/nginx/uwsgi_params; #具体目录以您现场具体部署的目录为准
                uwsgi_param UWSGI_SCRIPT iCourse.wsgi; #具体目录以您现场具体部署的目录为准
                uwsgi_param UWSGI_CHDIR /iCourse; #具体目录以您现场具体部署的目录为准
                index  index.html index.htm;
                client_max_body_size 35m;
                index index.html index.htm;
            }
        }

image

4.执行以下命令,新建uWSGI配置文件uwsgi_config.ini

sudo vim uwsgi_config.ini

i键进入编辑模式,在文件中添加以下参数。编辑完成后,按Esc键,输入:wq保存并退出文件。

[uwsgi]
socket = 127.0.0.1:8001
chdir = /home/myblog/uwsgi_project/
wsgi-file = uwsgi_project/wsgi.py
processes = 4
threads = 2
vacuum = true
buffer-size = 65536

上述参数配置说明如下所示:

  • socket:此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致。
  • chdir:指定项目目录,本示例中为/home/myblog/uwsgi_project,根据项目修改。
  • wsgi-file:指定Django's wsgi file文件,根据项目修改。
  • processes:最大工作进程。
  • threads:每个工作进程processes启动后开启的线程个数。
  • vacuum:环境退出时自动清理。
  • buffer-size:设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k。

image

其他参数配置请根据项目自定义添加。

5.启动程序。

1).执行以下命令,重启Nginx服务。

sudo systemctl restart nginx

2.执行以下命令,重启uWSGI服务。

1).执行以下命令,停止已启动的uWSGI程序。

ps aux |grep uwsgi
sudo kill -9 13187 #13187指通过上述命令获取的pid,具体pid以您现场实时获取的为准

image

  1. 执行以下命令,启动uWSGI服务。
sudo uwsgi --ini uwsgi_config.ini
  1. 在本地电脑浏览器的地址栏输入http://<IP地址>,即可访问相关Django页面。

image