走啊走
加油

新手如何在云服务器上从零部署Python Django网站应用?

服务器价格表

下面按“从零到上线”的步骤,给你一套适合新手的 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 跳转。


八、常见调试与运维要点

  1. 查看日志

    • Gunicorn:journalctl -u django-myproject -f
    • Nginx:sudo tail -f /var/log/nginx/error.log
  2. 重启服务

    sudo systemctl restart django-myproject
    sudo systemctl reload nginx
  3. 代码更新流程

    • 通过 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
  4. 备份数据库

    sudo -u postgres pg_dump myproject_db > backup_$(date +%F).sql

九、给新手的简化路线(如果不熟悉 Linux)

如果你希望减少手动操作,可以考虑:

  1. 使用云厂商的一键部署镜像(部分提供 Django + Nginx 模板)。
  2. 使用 PaaS 平台(如 Heroku、Render、PythonAnywhere、国内的一些云函数/容器服务),把代码上传即可,无需自己配 Nginx/Gunicorn。
  3. 或者使用 Docker 封装整个环境,然后在服务器上只跑一个 docker compose up

如果你告诉我:

  • 使用的云厂商(阿里云/腾讯云等)
  • 是否已有域名
  • 是否接受 Docker / PaaS

我可以给你一份更贴合你环境的“复制粘贴版”命令清单和配置文件。