Python Django 虚拟主机完整指南 2026
Complete Python Django Hosting Guide 2026
Django 是一个强大的 Python Web 框架,用于构建 Web 应用程序 — 但选择合适的虚拟主机同样重要。并非所有标准的网站虚拟主机(PHP 虚拟主机)都能很好地支持 Python 和 Django。本完整指南将帮助您了解如何选择合适的虚拟主机、安装和配置 Django、以及成功地将应用程序部署到生产环境。
目录
什么是 Python/Django 虚拟主机,与 PHP 虚拟主机有什么区别?
PHP 虚拟主机是专门为支持 PHP 代码设计的 — 通常,Apache 或 Nginx 会直接读取 .php 文件并自动处理代码。但 Django 的工作方式完全不同。
Django 应用程序是一个长期运行的进程,需要 Gunicorn 或 uWSGI 等应用程序服务器来处理用户请求。Nginx 充当反向代理,将请求转发到后台运行的 Gunicorn 进程。
主要区别包括:
- PHP 虚拟主机: Apache/Nginx 直接读取 .php 文件 → 处理 → 返回结果。简单易用,适合小型网站。
- Django 虚拟主机: 需要 Python 运行时 + Gunicorn/uWSGI 应用服务器 + Nginx 反向代理 + PostgreSQL/MySQL 数据库。更复杂,但更适合大型应用程序。
亚洲大多数标准网站虚拟主机提供商主要针对 PHP 设计。当您需要 Django 时,您需要一个 VPS 或云虚拟主机,它能给予您对 Linux 服务器的完全控制。
Django 应用的服务器要求
Django 应用需要多个组件才能正常运行:
- Python 运行时: Python 3.8 及以上版本(目前 Python 3.11 或 3.12 是标准)
- pip 包管理器: 用于安装 Django 和其他库
- 虚拟环境: venv — 用于隔离项目依赖项
- 应用服务器: Gunicorn 或 uWSGI — 用于运行 Django 应用
- 网络服务器: Nginx — 充当反向代理
- 数据库: PostgreSQL 或 MySQL — 用于您的 Django ORM
- SSL 证书: HTTPS 支持(现在是必需的)
- 进程管理器: Supervisor 或 Systemd — 使 Gunicorn 持续运行
适合 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.py、settings.py、urls.py 和 wsgi.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 的优点包括:
- 出色的 ACID 事务支持
- 全文搜索功能
- 本机 JSON 数据类型
- 对大型数据集的卓越性能
常见问题:关于 Django 虚拟主机
sudo apt install certbot python3-certbot-nginx。然后:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com。Certbot 会自动配置 Nginx 的 HTTPS。