如何在 Ubuntu 上使用 NGINX、Gunicorn 和 PostgreSQL 安装 Django?

在本文中,我们将学习如何在 Ubuntu 上使用 NGINX、Gunicorn 和 PostgreSQL 安装 Django。

Django 带有一个不适合生产的轻量级开发服务器,因为它不太安全、性能低且不可扩展。

它仅用于开发目的,因此您可以快速专注于应用程序开发,而不必担心生产服务器。 同样,如果您要在生产中部署应用程序,建议使用 PostgreSQL(或其他一些流行的数据库服务器)。

为什么要在 Django 中使用 NGINX 和 Gunicorn?

我们可以从上面的文本中得出结论,我们不能在生产中使用 Django 的开发服务器,因为它缺乏安全性和性能特性,这就是 NGINX 和 Gunicorn 发挥作用的原因。

  • Gunicorn 是一个 WSGI(Web 服务器网关接口)HTTP 服务器,与用 Python 编程语言编写的 Web 应用程序和框架一起使用。
  • CGI 的 WSGI 后代是一个位于 Web 服务器和 Django 之间的接口,允许它们相互通信。
  • NGINX 用于提供附加功能,如负载平衡、缓存和其他功能。

使用 NGINX、Gunicorn 和 PostgreSQL 安装 Django 的步骤

按照以下步骤使用 NGINX、Gunicorn 和 PostgreSQL 安装和配置 Django。

步骤 1:使用 apt 包管理器安装所需的包

在我们安装所有软件包之前,通过执行以下命令更新您的 apt 软件包管理器索引 易于 命令与 sudo

sudo apt update 

要安装所有必需的软件包,请执行以下命令:

sudo apt install nginx python3-dev python3-pip python3-venv postgresql postgresql-contrib libpq-dev 

现在我们已经安装了所有必需的软件包,我们可以继续执行进一步的步骤。

第二步:在PostgreSQL中创建用户和数据库

要进入 PostgreSQL 交互式 shell,请执行:

sudo -u postgres psql 

现在要创建用户和数据库,请输入:

CREATE USER djangouser WITH PASSWORD 'mypassword';  CREATE DATABASE djangoproject; 
创建 PostgreSQL 用户和数据库

Django 期望此处列出的参数用于其数据库连接,请在 PostgreSQL 交互式 shell 中输入以下内容来设置这些参数。

ALTER ROLE djangouser SET client_encoding TO 'utf8'; ALTER ROLE djangouser SET default_transaction_isolation TO 'read committed'; ALTER ROLE djangouser SET timezone TO 'UTC'; 

Django 在没有这些参数的情况下也能正常工作,但是,它需要进行额外的查询,因此 Django 建议事先进行。 现在授予所有权限 djangoproject 数据库到 djangouser 通过输入:

GRANT ALL PRIVILEGES ON DATABASE djangoproject TO djangouser; 

并通过输入退出交互式会话 q 在 PostgreSQL 交互式 shell 中。

第 3 步:创建 Python 虚拟环境

我们将在一个新目录中创建我们的虚拟环境。 要创建新目录,请执行 mkdir 命令:

mkdir ~/newProject 

并且,通过执行 cd 命令:

cd ~/newProject 

现在我们在目录中创建一个新的虚拟环境 newProjectdjango_venv 通过执行:

python3 -m venv django_venv 

要激活我们新创建的虚拟环境,请执行:

source django_venv/bin/activate 

你的 shell 提示应该如下图所示改变。

激活虚拟环境

第 3 步:使用 pip 安装所需的包并配置 Django

要安装 Django 框架,PostgreSQL 需要 Gunicorn for WSGI 和 psycopg2 执行以下命令 pip 命令:

pip install django gunicorn psycopg2 

现在让我们创建一个名为的示例项目 djangoproject 与姜戈。

要创建一个新项目,请执行:

django-admin startproject djangoproject . 

命令末尾的句点将在同一目录中创建项目。

您可以在以下位置找到 Django 设置 ~/newProject/djangoproject/settings.py ,您可以使用您喜欢的文本编辑器编辑它们。

nano djangoproject/settings.py 

并在下面添加您的服务器域或 IP ALLOWED_HOSTS

. . . ALLOWED_HOSTS = ['your_server_domain_or_ip', 'your_server_domain_or_ip', . . .] . . . 
添加允许的主机添加允许的主机

您需要进行以下更改 settings.py 使用 PostgreSQL 数据库的项目:

. . . DATABASES = {     'default': {         'ENGINE': 'django.db.backends.postgresql_psycopg2',         'NAME': '<db_name>',         'USER': '<db_user>',         'PASSWORD': '<db_password>',         'HOST': 'localhost',         'PORT': '',     } } . . . 
更改 Settings.py 以便 Django 使用 PostgreSQL进行更改 设置.py 让 Django 使用 PostgreSQL

接下来,添加 import os 在。。。之初 settings.py 然后定义 STATIC_ROOT 路径 settings.py,这是生成和存储您网站的静态文件的地方。 NGINX 的功能是必要的。

import os . . . STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') . . . 
在 Settings.py 中添加静态根路径 添加 STATIC_ROOT 路径 设置.py

Save 文件。 现在要迁移数据库,请执行:

python manage.py migrate 
迁移数据库迁移数据库

您需要创建一个管理用户才能使用 Django Web admin 界面,执行如下命令创建:

python manage.py createsuperuser 

您将需要回答几个提示(用户名、电子邮件、密码)。

创建超级用户创建超级用户

现在允许端口 8000 在防火墙中访问 Django 开发服务器,通过执行:

sudo ufw allow 8000 

最后,我们可以在 Django 开发服务器的帮助下通过执行以下命令来测试我们的新项目:

python manage.py runserver server_ip:8000 
正在运行的 Django 开发服务器正在运行的 Django 开发服务器

现在您可以访问您的浏览器 https://server_ip:8000/ 测试您新创建的 Django 项目。

Django 项目主页Django项目主页

您还可以访问 admin 页面在 https://server_ip:8000/admin/ 并输入凭据 admin 我们在上面创建的用户。

Django 管理界面Django 管理界面

要测试 Gunicorn 使用 Django 应用程序提供页面的能力,请执行:

gunicorn --bind 0.0.0.0:8000 djangoproject.wsgi 
测试 Gunicorns 的服务能力测试 Gunicorn 提供网页的能力

现在返回到您的浏览器并转到 https://server_ip:8000/ 测试一下。 您应该能够看到相同的页面。

CTRL+C 停止 Gunicorn 服务器并返回终端。

第 4 步:为 Gunicorn 创建一个 systemd 服务文件

使用您最喜欢的文本编辑器,创建 gunicorn.service 文件在 /etc/systemd/system/ 通过执行:

sudo nano /etc/systemd/system/gunicorn.service 

然后在 gunicorn.service 文件,并确保在下面替换您的详细信息:

[Unit] Description=gunicorn daemon After=network.target  [Service] User=myusername Group=www-data WorkingDirectory=/home/myusername/newProject ExecStart=/home/myusername/newProject/django_venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/myusername/newProject/djangoproject.sock djangoproject.wsgi:application  [Install] WantedBy=multi-user.target 

然后执行以下命令启动并启用 Gunicorn 服务:

sudo systemctl start gunicorn sudo systemctl enable gunicorn 

您可以通过执行以下命令了解 Gunicorn 服务的状态:

sudo systemctl status gunicorn 
Gunicorn 服务状态Gunicorn 服务状态

第五步:配置NGINX反向代理

我们已经设置了 Gunicorn,现在我们需要设置 Gunicorn 的 NGINX 反向代理。

通过执行创建一个新文件:

sudo nano /etc/nginx/sites-available/gunicorn 

然后添加以下内容并将其替换为您的详细信息:

server {     listen 80;     server_name your_server_domain_or_IP;      location = /favicon.ico { access_log off; log_not_found off; }     location /static/ {         root /home/myusername/newProject;     }      location / {         include proxy_params;         proxy_pass https://unix:/home/myusername/newProject/djangoproject.sock;     } } 
NGINX反向代理配置NGINX反向代理配置

Save 文件。

然后通过执行以下命令创建一个符号链接以启用 NGINX 虚拟主机:

sudo ln -s /etc/nginx/sites-available/gunicorn /etc/nginx/sites-enabled/ 

要测试您的 NGINX 配置是否有错误,请执行:

sudo nginx -t 
NGINX 配置测试成功NGINX 配置测试成功

最后通过执行以下命令重新启动 NGINX 服务:

sudo systemctl restart nginx 

您现在可以 close 端口 8000 并允许 NGINX 端口,通过执行:

sudo ufw delete allow 8000 sudo ufw allow 'Nginx Full' 

现在访问 https://your_server_domain_or_ip/ 测试您使用 NGINX、Gunicorn 和 PostgreSQL 设置的 Django。

Django 网页Django 网页

恭喜! 我们已经成功地使用 NGINX、Gunicorn 和 PostgreSQL 设置了 Django。

结论

Django 是一个伟大的 Python Web 框架,用于开发 Web 应用程序,它带有一个方便的开发服务器,永远不会在生产环境中使用。 在生产环境中,必须使用类似于我们上面显示的设置。 在本文中,我们设置了一个 Django 应用程序,使用 PostgreSQL 作为数据库,Gunicorn 作为 WSGI,NGINX 作为反向代理。

我们希望您发现本教程对您有所帮助。 感谢您的阅读! ?