下面按“从零到上线”的步骤,给你一套适合新手的 Django 部署流程(以 Ubuntu 22.04 + Nginx + Gunicorn + PostgreSQL 为例)。你可以根据实际情况替换版本或数据库。
一、前期准备
1. 购买并登录云服务器
- 推荐:阿里云/腾讯云/华为云等任意主流云厂商的 Ubuntu 22.04 LTS 实例。
- 配置建议(新手):
- CPU:2 核
- 内存:2GB 以上
- 系统盘:20GB+
- 使用 SSH 登录:
ssh root@<服务器IP> # 或使用你的用户名 ssh <用户名>@<服务器IP>
2. 更新系统
sudo apt update && sudo apt upgrade -y
二、安装基础环境
1. 安装 Python、pip、虚拟环境工具
sudo apt install -y python3 python3-pip python3-venv git
检查版本:
python3 --version
pip3 --version
2. 安装 PostgreSQL(可选但推荐)
sudo apt install -y postgresql postgresql-contrib
创建数据库和用户(示例项目名 myproject):
sudo -u postgres psql
在 psql 中执行:
CREATE DATABASE myproject_db;
CREATE USER myproject_user WITH PASSWORD 'your_strong_password';
GRANT ALL PRIVILEGES ON DATABASE myproject_db TO myproject_user;
q
若用 SQLite 可跳过此步,但生产环境更推荐 PostgreSQL。
3. 安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
三、在服务器上创建 Django 项目
1. 创建工作目录
mkdir -p /var/www/myproject
cd /var/www/myproject
2. 创建 Python 虚拟环境
python3 -m venv venv
source venv/bin/activate
激活后提示符前会有 (venv)。
3. 安装 Django 和相关依赖
pip install --upgrade pip
pip install django gunicorn psycopg2-binary whitenoise
psycopg2-binary用于连接 PostgreSQL;如果编译失败可换pip install psycopg2-binary。
4. 创建 Django 项目
假设项目名称为 myproject,应用名为 blog:
django-admin startproject myproject .
python manage.py startapp blog
编辑 myproject/settings.py:
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'your-secret-key-change-in-production'
DEBUG = False # 生产环境必须关闭 DEBUG
ALLOWED_HOSTS = ['*'] # 后面会改成具体域名
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject_db',
'USER': 'myproject_user',
'PASSWORD': 'your_strong_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # 放在 SecurityMiddleware 之后
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'myproject.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'myproject.wsgi.application'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
5. 编写简单视图和 URL
blog/views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello from Django on Cloud!")
blog/urls.py(新建文件):
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
myproject/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
6. 迁移数据库并创建超级用户
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
7. 收集静态文件
python manage.py collectstatic
四、使用 Gunicorn 运行 Django
1. 创建 systemd 服务文件
sudo nano /etc/systemd/system/django-myproject.service
写入以下内容(注意修改路径和端口):
[Unit]
Description=Django application (Gunicorn)
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/var/www/myproject
Environment="PATH=/var/www/myproject/venv/bin"
ExecStart=/var/www/myproject/venv/bin/gunicorn
--workers 3
--bind unix:/var/www/myproject/django.sock
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
保存退出(Ctrl+O → Enter → Ctrl+X)。
2. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start django-myproject
sudo systemctl enable django-myproject
查看状态:
sudo systemctl status django-myproject
五、配置 Nginx 反向X_X
1. 创建 Nginx 站点配置
sudo nano /etc/nginx/sites-available/myproject
内容示例(根据实际域名修改):
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location /static/ {
alias /var/www/myproject/staticfiles/;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/django.sock;
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;
}
}
2. 启用站点并测试配置
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
此时访问 http://your_domain.com 应该能看到 Django 页面。
六、开放防火墙与安全组
1. 云服务器安全组(控制台操作)
在云厂商控制台中,为实例开放以下端口:
- 22(SSH)
- 80(HTTP)
- 443(HTTPS,后续如需 SSL)
2. UFW(可选)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
七、配置 HTTPS(可选但强烈推荐)
使用 Let’s Encrypt 免费证书:
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
按提示输入邮箱,同意条款,Certbot 会自动修改 Nginx 配置并开启 HTTP→HTTPS 跳转。
八、常见调试与运维要点
-
查看日志
- Gunicorn:
journalctl -u django-myproject -f - Nginx:
sudo tail -f /var/log/nginx/error.log
- Gunicorn:
-
重启服务
sudo systemctl restart django-myproject sudo systemctl reload nginx -
代码更新流程
- 通过 Git 拉取最新代码:
cd /var/www/myproject source venv/bin/activate git pull pip install -r requirements.txt python manage.py migrate python manage.py collectstatic sudo systemctl restart django-myproject - 将
requirements.txt放入 Git:pip freeze > requirements.txt
- 通过 Git 拉取最新代码:
-
备份数据库
sudo -u postgres pg_dump myproject_db > backup_$(date +%F).sql
九、给新手的简化路线(如果不熟悉 Linux)
如果你希望减少手动操作,可以考虑:
- 使用云厂商的一键部署镜像(部分提供 Django + Nginx 模板)。
- 使用 PaaS 平台(如 Heroku、Render、PythonAnywhere、国内的一些云函数/容器服务),把代码上传即可,无需自己配 Nginx/Gunicorn。
- 或者使用 Docker 封装整个环境,然后在服务器上只跑一个
docker compose up。
如果你告诉我:
- 使用的云厂商(阿里云/腾讯云等)
- 是否已有域名
- 是否接受 Docker / PaaS
我可以给你一份更贴合你环境的“复制粘贴版”命令清单和配置文件。
CLOUD云计算