本站包含联盟推广链接 — 通过链接注册我们可能获得佣金

Python Django 虚拟主机完整指南 2026

Complete Python Django Hosting Guide 2026

Python Django 网站开发

Django 是一个强大的 Python Web 框架,用于构建 Web 应用程序 — 但选择合适的虚拟主机同样重要。并非所有标准的网站虚拟主机(PHP 虚拟主机)都能很好地支持 Python 和 Django。本完整指南将帮助您了解如何选择合适的虚拟主机、安装和配置 Django、以及成功地将应用程序部署到生产环境。

什么是 Python/Django 虚拟主机,与 PHP 虚拟主机有什么区别?

PHP 虚拟主机是专门为支持 PHP 代码设计的 — 通常,Apache 或 Nginx 会直接读取 .php 文件并自动处理代码。但 Django 的工作方式完全不同。

Django 应用程序是一个长期运行的进程,需要 Gunicorn 或 uWSGI 等应用程序服务器来处理用户请求。Nginx 充当反向代理,将请求转发到后台运行的 Gunicorn 进程。

主要区别包括:

亚洲大多数标准网站虚拟主机提供商主要针对 PHP 设计。当您需要 Django 时,您需要一个 VPS 或云虚拟主机,它能给予您对 Linux 服务器的完全控制。

Django 应用的服务器要求

Django 应用需要多个组件才能正常运行:

适合 Django 的服务器应至少有 512 MB 至 1 GB 的 RAM(用于小型应用),2 GB 或更多用于中型或大型应用。CPU 通常不是瓶颈,RAM 更重要。

共享主机 vs VPS vs 云主机 用于 Django

选择 Django 虚拟主机时,请考虑以下三个主要选项:

1. 共享主机 — 大多数共享主机提供商不支持 Django。即使支持,也有严重限制 — 无法安装新的 Python 包、没有虚拟环境支持、控制权有限。不推荐。

2. VPS(虚拟专用服务器) — 您对 Linux 服务器拥有完全控制。可以按照需要安装 Python、Gunicorn、Nginx。适合具有服务器管理知识的开发人员或拥有团队支持。价格:约每月 200-500 泰铢(泰国)或 500-1000 泰铢(新加坡)。

3. 云虚拟主机(AWS、Google Cloud、DigitalOcean) — 高度灵活,具有自动扩展功能,但成本更高(起价每月 250-1000 泰铢)。最适合流量变化较大或需要频繁扩展的应用程序。

对于初学者来说,泰国或新加坡的 VPS 是最佳选择 — 价格便宜,足以应对中型应用程序,您可以同时学习 Linux 系统管理。

如何在 VPS 上安装 Python 和 Django

假设您拥有运行 Ubuntu 22.04 LTS 的 VPS,请按照以下步骤安装 Python 3.11 和 Django:

第 1 步:更新服务器并安装依赖项

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3.11 python3.11-venv python3-pip build-essential libpq-dev

build-essential 需要编译具有 C 扩展的 Python 包。libpq-dev 对于 PostgreSQL 集成至关重要。

第 2 步:验证 Python 版本

python3.11 --version
pip3 --version

第 3 步:创建项目目录

mkdir -p /home/django
cd /home/django
sudo chown -R $USER:$USER /home/django

第 4 步:创建虚拟环境

python3.11 -m venv venv
source venv/bin/activate

您的提示符现在应显示 (venv) user@server:/home/django$ — 这确认虚拟环境处于活动状态。

第 5 步:安装 Django

pip install --upgrade pip
pip install django gunicorn psycopg2-binary

现在创建您的 Django 项目:

django-admin startproject mysite
cd mysite
python manage.py migrate

这将创建必要的文件,如 manage.pysettings.pyurls.pywsgi.py

为 Django 生产环境配置 Gunicorn + Nginx

接下来,配置 Gunicorn 以运行 Django 应用程序,并配置 Nginx 充当反向代理。

第 1 步:设置 Gunicorn

首先测试 Gunicorn:

cd /home/django/mysite
source ../venv/bin/activate
gunicorn mysite.wsgi:application --bind 0.0.0.0:8000

如果成功,创建 Systemd 服务文件以持续运行:

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

添加以下内容:

[Unit]
Description=Gunicorn Django Application
After=network.target

[Service]
User=www-data
WorkingDirectory=/home/django/mysite
ExecStart=/home/django/venv/bin/gunicorn mysite.wsgi:application --bind unix:/home/django/mysite/gunicorn.sock --workers 3
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

保存并启用服务:

sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn

第 2 步:安装并配置 Nginx

安装 Nginx:

sudo apt install -y nginx

创建 Nginx 配置:

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

添加此配置:

upstream django {
    server unix:/home/django/mysite/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        alias /home/django/mysite/static/;
    }

    location /media/ {
        alias /home/django/mysite/media/;
    }

    location / {
        proxy_pass http://django;
        proxy_set_header Host $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;
    }
}

启用网站:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Nginx 现在充当反向代理,通过 Unix 套接字将 HTTP 请求转发到 Gunicorn。

虚拟环境和 requirements.txt

虚拟环境至关重要 — 它将您的项目 Python 依赖项与系统 Python 隔离开来。优点包括:

创建 requirements.txt:

pip freeze > requirements.txt

这会保存所有已安装的包及其版本。示例 requirements.txt

Django==4.2.2
gunicorn==21.2.0
psycopg2-binary==2.9.7
Pillow==10.0.0
celery==5.3.1
redis==4.5.5

在新服务器上从 requirements.txt 安装:

python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

这会使用完全相同的版本安装所有包,确保环境一致性。每当添加或删除包时,请保持此文件更新。

从 GitHub 部署 Django 应用

大多数 Django 项目都在 GitHub 上开发。从 GitHub 部署应该尽可能自动化。

第 1 步:在服务器上设置 SSH 密钥

创建部署 SSH 密钥:

ssh-keygen -t ed25519 -f /home/django/.ssh/deploy -C "deploy"
cat /home/django/.ssh/deploy.pub

复制公钥并将其添加到 GitHub 存储库设置 → 部署密钥。

第 2 步:克隆存储库

cd /home/django
git clone [email protected]:yourusername/mysite.git mysite
cd mysite
source ../venv/bin/activate
pip install -r requirements.txt

第 3 步:创建部署脚本

创建 deploy.sh

#!/bin/bash
cd /home/django/mysite
source ../venv/bin/activate
git pull origin main
pip install -r requirements.txt
python manage.py collectstatic --noinput
python manage.py migrate
sudo systemctl restart gunicorn
sudo systemctl restart nginx
echo "部署成功!"

使其可执行:

chmod +x deploy.sh

第 4 步:GitHub Actions(可选)

在您的存储库中创建 .github/workflows/deploy.yml 用于自动部署:

name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to VPS
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy
          chmod 600 ~/.ssh/deploy
          ssh -i ~/.ssh/deploy -o StrictHostKeyChecking=no [email protected] './deploy.sh'

这会在每次推送到主分支时自动进行部署。

静态文件、媒体文件和生产设置

在开发期间,Django 会自动提供静态文件。在生产环境中,Nginx 应该直接提供它们。

配置 settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
DEBUG = False
SECRET_KEY = os.environ.get('SECRET_KEY', 'fallback-secret-key-not-for-production')
CSRF_TRUSTED_ORIGINS = ['https://yourdomain.com', 'https://www.yourdomain.com']
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

收集静态文件:

python manage.py collectstatic --noinput

此命令将收集每个应用程序的所有静态文件到 STATIC_ROOT 目录中,Nginx 可以直接提供这些文件,而无需通过 Django。

对于媒体文件(用户上传),配置 Nginx 从 /media/ 目录直接提供它们。

Django 的 PostgreSQL 数据库

Django 支持 SQLite、PostgreSQL、MySQL 和 Oracle。对于生产环境,建议使用 PostgreSQL,因为它具有优异的性能和工具。

第 1 步:安装 PostgreSQL

sudo apt install -y postgresql postgresql-contrib

第 2 步:创建数据库和用户

sudo -u postgres psql
CREATE DATABASE mysite_db;
CREATE USER mysite_user WITH PASSWORD 'strong_password_here';
ALTER ROLE mysite_user SET client_encoding TO 'utf8';
ALTER ROLE mysite_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE mysite_user SET default_transaction_deferrable TO on;
GRANT ALL PRIVILEGES ON DATABASE mysite_db TO mysite_user;
\q

第 3 步:配置 Django settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mysite_db',
        'USER': 'mysite_user',
        'PASSWORD': 'strong_password_here',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

第 4 步:运行迁移

python manage.py migrate

Django 表现在已在 PostgreSQL 中创建。PostgreSQL 的优点包括:

推荐AsiaGB.com — 我们使用和推荐的网站虚拟主机和 VPS。服务器位于泰国和新加坡,SSD 存储,通过 DirectAdmin 管理,24 小时泰语语言支持,99% 正常运行时间

AsiaGB.com — hosting & VPS we use and recommend: TH/SG servers, SSD storage, DirectAdmin, 24h Thai support, 99% uptime.

访问 AsiaGB →

常见问题:关于 Django 虚拟主机

1. Django 应用需要多少 RAM?
对于小型 Django 应用(< 100 用户),512 MB RAM 足够。对于中型应用(100-1000 用户),需要 1-2 GB。对于大型应用(> 1000 用户),需要 4 GB 或更多。将 Gunicorn workers 设置为 2 × CPU 核心数 + 1。
2. SQLite 可以在生产环境中使用吗?
不推荐。SQLite 存在并发问题 — 在多个同时请求的情况下,写入操作可能会失败。请使用 PostgreSQL 或 MySQL。
3. 我需要 Redis 或 Celery 吗?
对于小型应用不是必需的。Redis 对缓存和会话存储很有用。Celery 在您需要后台任务处理长期运行操作时有帮助。
4. 如何设置 SSL 证书?
使用 Let's Encrypt 和 Certbot。安装:sudo apt install certbot python3-certbot-nginx。然后:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com。Certbot 会自动配置 Nginx 的 HTTPS。