在本文中,我们将学习如何在 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;
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
现在我们在目录中创建一个新的虚拟环境 newProject
叫 django_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', . . .] . . .
![添加允许的主机](/wp-content/uploads/2022/06/1634862493-1.png)
您需要进行以下更改 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](/wp-content/uploads/2022/06/1634862495.png)
接下来,添加 import os
在。。。之初 settings.py
然后定义 STATIC_ROOT
路径 settings.py
,这是生成和存储您网站的静态文件的地方。 NGINX 的功能是必要的。
import os . . . STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') . . .
![在 Settings.py 中添加静态根路径](/wp-content/uploads/2022/06/1634862497.png)
Save 文件。 现在要迁移数据库,请执行:
python manage.py migrate
![迁移数据库](/wp-content/uploads/2022/06/1634862498.png)
您需要创建一个管理用户才能使用 Django Web admin 界面,执行如下命令创建:
python manage.py createsuperuser
您将需要回答几个提示(用户名、电子邮件、密码)。
![创建超级用户](/wp-content/uploads/2022/06/1634862500.png)
现在允许端口 8000 在防火墙中访问 Django 开发服务器,通过执行:
sudo ufw allow 8000
最后,我们可以在 Django 开发服务器的帮助下通过执行以下命令来测试我们的新项目:
python manage.py runserver server_ip:8000
![正在运行的 Django 开发服务器](/wp-content/uploads/2022/06/1634862501.png)
现在您可以访问您的浏览器 https://server_ip:8000/ 测试您新创建的 Django 项目。
![Django 项目主页](/wp-content/uploads/2022/06/1634862503.png)
您还可以访问 admin 页面在 https://server_ip:8000/admin/ 并输入凭据 admin 我们在上面创建的用户。
![Django 管理界面](/wp-content/uploads/2022/06/1634862505.png)
要测试 Gunicorn 使用 Django 应用程序提供页面的能力,请执行:
gunicorn --bind 0.0.0.0:8000 djangoproject.wsgi
![测试 Gunicorns 的服务能力](/wp-content/uploads/2022/06/1634862507.png)
现在返回到您的浏览器并转到 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 服务状态](/wp-content/uploads/2022/06/1634862508.png)
第五步:配置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反向代理配置](/wp-content/uploads/2022/06/1634862510.png)
Save 文件。
然后通过执行以下命令创建一个符号链接以启用 NGINX 虚拟主机:
sudo ln -s /etc/nginx/sites-available/gunicorn /etc/nginx/sites-enabled/
要测试您的 NGINX 配置是否有错误,请执行:
sudo nginx -t
![NGINX 配置测试成功](/wp-content/uploads/2022/06/1634862512.png)
最后通过执行以下命令重新启动 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 网页](/wp-content/uploads/2022/06/1634862514.png)
恭喜! 我们已经成功地使用 NGINX、Gunicorn 和 PostgreSQL 设置了 Django。
结论
Django 是一个伟大的 Python Web 框架,用于开发 Web 应用程序,它带有一个方便的开发服务器,永远不会在生产环境中使用。 在生产环境中,必须使用类似于我们上面显示的设置。 在本文中,我们设置了一个 Django 应用程序,使用 PostgreSQL 作为数据库,Gunicorn 作为 WSGI,NGINX 作为反向代理。
我们希望您发现本教程对您有所帮助。 感谢您的阅读! ?