本教程适用于以下操作系统版本
- Debian 12(Bookworm)
- Debian 11(Bullseye)
- Debian 10(Buster)
本页内容
- 准备工作
- 安装依赖项
- 通过 Pip 安装 Django
- 创建首个 Django 项目:准备数据库和用户、创建 Django 项目、迁移数据库并生成静态文件、创建管理员用户并运行 Django
- 使用 Gunicorn 和 Supervisor 运行 Django:安装 Gunicorn、使用 Gunicorn 和 Supervisor 运行 Django、通过 Supervisorctl 检查 Django
- 将 Nginx 配置为 Django 的反向代理
- 总结
- 准备数据库和用户
- 创建 Django 项目
- 迁移数据库并生成静态文件
- 创建管理员用户并运行 Django
- 安装 Gunicorn
- 使用 Gunicorn 和 Supervisor 运行 Django
- 通过 Supervisorctl 检查 Django
Django 是一个免费且开源的 Python Web 框架,用于开发动态网站和应用程序。它被用于开发复杂且以数据库驱动的 Python 应用程序。
Django 遵循 MVC(Model-View-Controller,模型-视图-控制器)架构,使开发者能够编写更少的代码并快速创建新网站。Django 可以安装在任何运行 Python 的操作系统上,包括 Windows、macOS、Linux/Unix 和 Solaris。
本指南将向你展示如何在 Debian 12 服务器上安装 Django Web 框架。你将通过创建第一个 Django 项目来入门,该项目使用 PostgreSQL 作为默认数据库,并使用 Gunicorn WSGI 服务器与 Nginx 作为反向代理。
准备工作
在开始之前,请确保你具备以下条件:
- 一台 Debian 12 机器。
- 一个具有 sudo 管理员权限的非 root 用户。
安装依赖项
在第一步中,你将安装 Django Web 框架所需的软件包依赖项,包括下列软件包:
- PostgreSQL 服务器:默认情况下 Django 使用 SQLite,本示例将向你展示如何将 PostgreSQL 用作 Django 项目的数据库。
- Supervisor:它是一个进程管理器,你将使用 Gunicorn 和 Supervisor 来运行 Django 应用程序。
- Nginx Web 服务器:本示例将向你展示如何将 Nginx 用作 Django 项目的反向代理。这样你的 Django 项目就可以通过本地域名访问。
首先,执行以下 apt 命令来更新并刷新你的软件包索引。
sudo apt update
现在安装软件包依赖项,例如 Python 虚拟环境、pip 包管理器、PostgreSQL 与 libpq5 驱动、Nginx 和 Supervisor。
sudo apt install build-essential python3-dev python3-pip python3-venv nginx supervisor postgresql libpq5 libpq-dev
输入 y 确认并继续安装。

依赖项安装完成后,运行以下命令来验证 PostgreSQL、Nginx 和 Supervisor 服务,确保这些服务正在运行并已启用。
使用以下命令检查 PostgreSQL 服务。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
如果 PostgreSQL 正在运行且已启用,你将看到如下输出。

使用以下命令检查 Nginx 服务。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
如果 Nginx 正在运行且已启用,你将看到如下输出。

最后,使用以下命令检查 Supervisor。
sudo systemctl is-enabled supervisor
sudo systemctl status supervisor
你应该看到 Supervisor 正在运行且已启用。

通过 Pip 安装 Django
Django Web 框架可以通过多种方式安装,包括通过 Git 手动安装、通过 Pip Python 包管理器安装,或与 venv 模块和 Pip 组成的隔离环境结合使用。在本示例中,你将在隔离的 Python 环境中通过 Pip 包管理器安装 Django。
通过以下命令登录到你的用户。
su - username
现在创建一个新的项目目录 ~/testdjango 并进入该目录。
mkdir -p ~/testdjango; cd ~/testdjango
接下来,运行以下命令在当前项目目录中创建一个名为 venv 的新 Python 虚拟环境。
python3 -m venv venv
然后使用以下命令激活它。虚拟环境激活后,你的当前提示符将变为类似 (venv) bob@hostname: 的形式。
source venv/bin/activate

在 venv 虚拟环境中,执行以下 pip 命令来安装 Django Web 框架。这会将 Django 安装到你的 Python 虚拟环境中,而不是系统范围。
pip install django
or
pip install django==4.2.4
以下为正在运行的 Django 安装过程。

安装完成后,使用以下 django-admin 命令验证你的 Django 版本。
django-admin --version
以下输出确认 Django 4.2.4 已通过 Pip Python 包管理器安装在 venv 虚拟环境中。

创建首个 Django 项目
本节将教你如何创建第一个 Django 项目,并使用 PostgreSQL 服务器作为其默认数据库。为此,请完成以下步骤:
- 准备数据库和用户。
- 通过 django-admin 创建 Django 项目。
- 迁移数据库并生成静态文件。
- 创建管理员用户并运行 Django。
准备数据库和用户
运行以下 pip 命令,将 Python 包 psycopg2 安装到你的虚拟环境中。这是 Django 用于连接 PostgreSQL 数据库服务器的 Python 驱动程序。
pip install psycopg2
exit

现在运行以下命令登录到 PostgreSQL shell。
sudo -u postgres psql
执行以下查询,为你的 Django 项目创建一个新数据库和用户。以下示例将创建一个新数据库 djangodb、用户 django,以及密码 p4ssw0rd。
CREATE USER django WITH PASSWORD 'p4ssw0rd';
CREATE DATABASE djangodb OWNER django;

接下来,运行以下查询来验证 PostgreSQL 服务器上的数据库和用户列表。
\du
\l
你应该看到数据库 djangodb 和用户 django 已创建。

输入 quit 退出 PostgreSQL 服务器。
创建 Django 项目
在创建 Django 项目之前,请登录到你的用户并激活 venv 虚拟环境。
su - bob
cd testdjango; source venv/bin/activate
要创建新的 Django 项目,请运行以下 django-admin 命令。在本例中,你将在当前工作目录中创建一个新项目 testapp。
django-admin startproject testapp .
项目创建完成后,工作目录中将生成新目录 testapp。

接下来,运行以下命令为你的 Django 项目生成一个随机密钥。请务必复制该输出,因为你将使用它来保护你的 Django 安装。
python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

现在使用你喜欢的编辑器打开 testapp/settings.py 文件。
nano testapp/settings.py
在文件顶部插入以下配置。
import os
将你的密钥插入 SECRET_KEY 参数中。
SECRET_KEY = 'fzahzbm*wrxoleqb0^-3%%tf^y!b6lsc5-c#2^@#s6gkyrl2ef'
将你的本地 IP 地址和本地域名填入 ALLOWED_HOSTS 参数。
ALLOWED_HOSTS = ['127.0.0.1','192.168.10.15','first-django.dev']
使用 PostgreSQL 服务器信息如下修改默认数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangodb',
'USER': 'django',
'PASSWORD': 'p4ssw0rd',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
最后,添加 STATIC_ROOT 参数以定义用于存储静态文件的目录。
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
完成后保存文件并退出编辑器。
迁移数据库并生成静态文件
在迁移数据库之前,运行以下命令以确保数据库配置正确。
python3 manage.py check --database default
如果没有错误,运行以下命令迁移数据库。
python3 manage.py makemigrations
python3 manage.py migrate
如果一切顺利,你应该会看到类似如下的数据库迁移过程:

最后,运行以下命令为你的 Django 项目生成静态文件。命令执行后,将创建新目录 static,静态文件将生成到其中。
python3 manage.py collectstatic
以下是生成静态文件时的输出。

创建管理员用户并运行 Django
运行以下命令为你的 Django 项目创建管理员用户。
python3 manage.py createsuperuser
根据提示输入你的电子邮件地址和密码。

管理员用户创建完成后,运行以下命令来运行你的 Django 项目。
python3 manage.py runserver 0.0.0.0:8080
命令执行后,你的 Django 项目将在你本地 IP 地址的 8080 端口上运行。

现在打开你的 Web 浏览器,访问服务器 IP 地址加 8080 端口,即 http://192.168.10.15:8080/。如果你的 Django 安装成功,你应该会看到如下默认的 Django index.html 页面:

现在通过 URL 路径 /admin 访问你的 Django 管理后台,即 http://192.168.10.15:8080/admin。输入你的 Django 管理员用户名和密码,然后点击 Sign In(登录)。

你应该会看到类似如下的 Django 用户仪表盘示例:

按 Ctrl+c 终止该进程。
使用 Gunicorn 和 Supervisor 运行 Django
至此,你已完成 Django 安装并创建了第一个 Django 项目。在下一步中,你将利用 Gunicorn WSGI 服务器和 Supervisor 进程管理器将 Django 配置为在后台运行。
安装 Gunicorn
在 venv 虚拟环境中,执行以下 pip 命令来安装 gunicorn。
pip install gunicorn

现在执行以下命令以停用 venv 虚拟环境并返回到你的 root 用户。
deactivate
exit
使用 Gunicorn 和 Supervisor 运行 Django
使用以下 nano 编辑器命令创建一个新的 supervisor 配置文件 /etc/supervisor/conf.d/testapp.conf。
sudo nano /etc/supervisor/conf.d/testapp.conf
插入以下配置,并务必将应用程序名称、项目路径和用户等详细信息替换为你自己的信息。在本示例中,你将在 UNIX socket /home/bob/testdjango/testapp.sock 下运行你的 Django 项目。
[program:testapp] command=/bin/bash -c 'source /home/bob/testdjango/venv/bin/activate; gunicorn -t 3000 --workers 3 --bind unix:unix:/home/bob/testdjango/testapp.sock testapp.wsgi:application -w 2' directory=/home/bob/testdjango user=bob group=www-data autostart=true autorestart=true stdout_logfile=/home/bob/testdjango/testapp.log stderr_logfile=/home/bob/testdjango/error.log
完成后保存并退出文件。
最后,运行以下命令重启 supervisor 服务并应用更改。然后验证 supervisor 服务,确保其正在运行。
sudo systemctl restart supervisor
sudo systemctl status supervisor

通过 Supervisorctl 检查 Django
执行以下 supervisorctl 命令来检查在 supervisor 中运行的应用程序状态。
sudo supervisorctl status
你应该看到 testapp 应用程序正在 PID 2577 上运行。

最后,通过以下 curl 命令检查你的 Django 应用程序。
curl --unix-socket /home/bob/testdjango/testapp.sock 127.0.0.1
如果一切顺利,你应该会看到你的 Django 项目的 index.html 页面的源代码。

将 Nginx 配置为 Django 的反向代理
既然你的 Django 项目已在后台运行,下一步是将 Nginx 设置为 Django 的反向代理。以下示例将使用一个本地域名。
使用以下 nano 编辑器创建一个新的 Nginx 服务器块配置文件 /etc/nginx/sites-available/django。
sudo nano /etc/nginx/sites-available/django
插入以下配置,并务必修改 server_name 参数中的域名。
server {
listen 80;
server_name first-django.dev;
location = /favicon.ico { access_log off; log_not_found off; }
try_files $uri @django;
location /static {
alias /home/bob/testdjango/static/;
}
location @django {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/bob/testdjango/testapp.sock;
}
}
完成后保存并退出文件。
现在运行以下命令以启用 /etc/nginx/sites-available/django 服务器块,然后验证 Nginx 语法以确保配置正确。
sudo ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled/
sudo nginx -t
如果 Nginx 语法正确,你将看到 `syntax is ok - test is successful` 的输出。
最后,执行以下命令重启你的 Nginx 服务并应用你所做的更改。
sudo systemctl restart nginx
至此,你的 Django 项目可以通过本地域名访问了。
在你的本地机器上,编辑 Linux 的 /etc/hosts 文件,或 Windows 的 C:\Windows\System32\drivers\etc\hosts 文件。然后,按如下方式定义你的服务器 IP 地址和域名。
192.168.10.15 first-django.dev
完成后保存并退出文件。
回到你的 Web 浏览器并访问你的本地域名,你应该会看到你的 Django 项目的默认 index.html 页面。
总结
总之,按照本分步指南,你已在 Debian 12 上安装了配合 PostgreSQL、Nginx、Gunicorn 和 Supervisor 使用的 Django Web 框架。你已学会如何创建一个以 PostgreSQL 作为默认数据库的 Django 项目,并使用 Gunicorn 和 Supervisor 运行 Django。现在你可以使用 Django 创建并开发你的应用程序了。