本教程适用于以下操作系统版本

  • 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 确认并继续安装。

在 Debian 12 上安装 Django Web 框架

依赖项安装完成后,运行以下命令来验证 PostgreSQL、Nginx 和 Supervisor 服务,确保这些服务正在运行并已启用。

使用以下命令检查 PostgreSQL 服务。

sudo systemctl is-enabled postgresql
sudo systemctl status postgresql

如果 PostgreSQL 正在运行且已启用,你将看到如下输出。

在 Debian 12 上安装 Django Web 框架

使用以下命令检查 Nginx 服务。

sudo systemctl is-enabled nginx
sudo systemctl status nginx

如果 Nginx 正在运行且已启用,你将看到如下输出。

在 Debian 12 上安装 Django Web 框架

最后,使用以下命令检查 Supervisor。

sudo systemctl is-enabled supervisor
sudo systemctl status supervisor

你应该看到 Supervisor 正在运行且已启用。

在 Debian 12 上安装 Django Web 框架

通过 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

在 Debian 12 上安装 Django Web 框架

在 venv 虚拟环境中,执行以下 pip 命令来安装 Django Web 框架。这会将 Django 安装到你的 Python 虚拟环境中,而不是系统范围。

pip install django
or
pip install django==4.2.4

以下为正在运行的 Django 安装过程。

在 Debian 12 上安装 Django Web 框架

安装完成后,使用以下 django-admin 命令验证你的 Django 版本。

django-admin --version

以下输出确认 Django 4.2.4 已通过 Pip Python 包管理器安装在 venv 虚拟环境中。

在 Debian 12 上安装 Django Web 框架

创建首个 Django 项目

本节将教你如何创建第一个 Django 项目,并使用 PostgreSQL 服务器作为其默认数据库。为此,请完成以下步骤:

  • 准备数据库和用户。
  • 通过 django-admin 创建 Django 项目。
  • 迁移数据库并生成静态文件。
  • 创建管理员用户并运行 Django。

准备数据库和用户

运行以下 pip 命令,将 Python 包 psycopg2 安装到你的虚拟环境中。这是 Django 用于连接 PostgreSQL 数据库服务器的 Python 驱动程序。

pip install psycopg2
exit

在 Debian 12 上安装 Django Web 框架

现在运行以下命令登录到 PostgreSQL shell。

sudo -u postgres psql

执行以下查询,为你的 Django 项目创建一个新数据库和用户。以下示例将创建一个新数据库 djangodb、用户 django,以及密码 p4ssw0rd。

CREATE USER django WITH PASSWORD 'p4ssw0rd';
CREATE DATABASE djangodb OWNER django;

在 Debian 12 上安装 Django Web 框架

接下来,运行以下查询来验证 PostgreSQL 服务器上的数据库和用户列表。

\du
\l

你应该看到数据库 djangodb 和用户 django 已创建。

在 Debian 12 上安装 Django Web 框架

输入 quit 退出 PostgreSQL 服务器。

创建 Django 项目

在创建 Django 项目之前,请登录到你的用户并激活 venv 虚拟环境。

su - bob
cd testdjango; source venv/bin/activate

要创建新的 Django 项目,请运行以下 django-admin 命令。在本例中,你将在当前工作目录中创建一个新项目 testapp。

django-admin startproject testapp .

项目创建完成后,工作目录中将生成新目录 testapp。

在 Debian 12 上安装 Django Web 框架

接下来,运行以下命令为你的 Django 项目生成一个随机密钥。请务必复制该输出,因为你将使用它来保护你的 Django 安装。

python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

在 Debian 12 上安装 Django Web 框架

现在使用你喜欢的编辑器打开 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

如果一切顺利,你应该会看到类似如下的数据库迁移过程:

在 Debian 12 上安装 Django Web 框架

最后,运行以下命令为你的 Django 项目生成静态文件。命令执行后,将创建新目录 static,静态文件将生成到其中。

python3 manage.py collectstatic

以下是生成静态文件时的输出。

在 Debian 12 上安装 Django Web 框架

创建管理员用户并运行 Django

运行以下命令为你的 Django 项目创建管理员用户。

python3 manage.py createsuperuser

根据提示输入你的电子邮件地址和密码。

在 Debian 12 上安装 Django Web 框架

管理员用户创建完成后,运行以下命令来运行你的 Django 项目。

python3 manage.py runserver 0.0.0.0:8080

命令执行后,你的 Django 项目将在你本地 IP 地址的 8080 端口上运行。

在 Debian 12 上安装 Django Web 框架

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

在 Debian 12 上安装 Django Web 框架

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

在 Debian 12 上安装 Django Web 框架

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

在 Debian 12 上安装 Django Web 框架

按 Ctrl+c 终止该进程。

使用 Gunicorn 和 Supervisor 运行 Django

至此,你已完成 Django 安装并创建了第一个 Django 项目。在下一步中,你将利用 Gunicorn WSGI 服务器和 Supervisor 进程管理器将 Django 配置为在后台运行。

安装 Gunicorn

在 venv 虚拟环境中,执行以下 pip 命令来安装 gunicorn。

pip install gunicorn

在 Debian 12 上安装 Django Web 框架

现在执行以下命令以停用 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

在 Debian 12 上安装 Django Web 框架

通过 Supervisorctl 检查 Django

执行以下 supervisorctl 命令来检查在 supervisor 中运行的应用程序状态。

sudo supervisorctl status

你应该看到 testapp 应用程序正在 PID 2577 上运行。

在 Debian 12 上安装 Django Web 框架

最后,通过以下 curl 命令检查你的 Django 应用程序。

curl --unix-socket /home/bob/testdjango/testapp.sock 127.0.0.1

如果一切顺利,你应该会看到你的 Django 项目的 index.html 页面的源代码。

在 Debian 12 上安装 Django Web 框架

将 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 创建并开发你的应用程序了。