Django 网站上线部署流程
一、购买服务器
本次部署使用的是:
腾讯云轻量应用服务器
地域:中国香港
系统:Ubuntu 22.04 LTS
配置:2核 2G / 40GB
选择香港服务器的原因:
不用备案
部署流程简单
适合个人学习项目
不选宝塔、WordPress、LAMP 这类应用镜像,而是选择:
系统镜像 Ubuntu
原因是可以完整练习真实部署流程:
GitHub 拉代码
Python 虚拟环境
Daphne 后台运行
Nginx 反向代理
域名解析
HTTPS 证书
二、服务器基础环境配置
登录服务器后,先更新系统并安装基础工具:
sudo apt update
sudo apt install -y python3 python3-pip python3-venv git nginx
检查版本:
python3 --version
git --version
nginx -v
这些工具的作用:
python3:运行 Django
pip:安装 Python 依赖
venv:创建虚拟环境
git:从 GitHub 拉代码
nginx:对外提供网站访问
三、从 GitHub 拉项目代码
先创建项目目录:
mkdir -p ~/projects
cd ~/projects
从 GitHub 拉取项目:
git clone 项目仓库地址
cd 项目目录
例如:
git clone https://github.com/xxx/my-study-site.git
cd my-study-site
四、创建虚拟环境并安装依赖
在项目目录中执行:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
虚拟环境激活后,终端前面会出现:
(venv)
五、创建服务器环境变量文件
服务器上需要创建 .env 文件,用来保存生产环境配置。
例如:
DEBUG=False
SECRET_KEY=服务器自己的密钥
ALLOWED_HOSTS=服务器IP,localhost,127.0.0.1,域名,www.域名
注意:
SECRET_KEY 不要发给别人
.env 不要上传到 GitHub
六、初始化数据库和静态文件
执行数据库迁移:
python manage.py migrate
创建管理员账号:
python manage.py createsuperuser
收集静态文件:
python manage.py collectstatic
静态文件会被收集到:
staticfiles/
七、先用 runserver 临时测试
临时启动项目:
python manage.py runserver 0.0.0.0:8000
然后浏览器访问:
http://服务器IP:8000/
如果访问不了,要检查腾讯云防火墙是否开放:
TCP 8000
这个只是测试,正式部署不使用 runserver。
八、配置 Daphne 后台运行
Django 项目正式运行使用 Daphne。
创建 systemd 服务文件:
sudo nano /etc/systemd/system/my-study-site.service
内容示例:
[Unit]
Description=My Study Site Daphne Service
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/projects/my-study-site
ExecStart=/home/ubuntu/projects/my-study-site/venv/bin/daphne -b 127.0.0.1 -p 8000 my_study_site.asgi:application
Restart=always
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl daemon-reload
sudo systemctl start my-study-site
sudo systemctl enable my-study-site
sudo systemctl status my-study-site
看到:
active (running)
说明服务运行成功。
九、配置 Nginx 反向代理
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/my-study-site
示例配置:
server {
listen 80;
server_name 服务器IP 域名 www.域名;
location /static/ {
alias /home/ubuntu/projects/my-study-site/staticfiles/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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/my-study-site /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
检查并重启 Nginx:
sudo nginx -t
sudo systemctl restart nginx
十、解决静态文件 403 问题
如果页面能打开,但是 CSS 没加载,并且访问 CSS 地址显示:
403 Forbidden
说明 Nginx 没权限读取静态文件。
执行:
sudo chmod o+x /home/ubuntu
sudo chmod o+x /home/ubuntu/projects
sudo chmod o+x /home/ubuntu/projects/my-study-site
sudo chmod -R 755 /home/ubuntu/projects/my-study-site/staticfiles
sudo nginx -t
sudo systemctl reload nginx
十一、购买域名
购买域名时选择普通域名即可,例如:
studylog.site
域名需要实名认证,但这不等于备案。
服务器在香港,一般不需要 ICP 备案。
十二、配置 DNS 解析
进入 DNSPod / DNS 解析页面,添加两条 A 记录:
主机记录:@
记录类型:A
记录值:服务器公网 IP
主机记录:www
记录类型:A
记录值:服务器公网 IP
作用:
域名.com → 服务器 IP
www.域名.com → 服务器 IP
十三、修改 Django 和 Nginx 域名配置
.env 中添加域名:
ALLOWED_HOSTS=服务器IP,localhost,127.0.0.1,域名,www.域名
Nginx 中修改:
server_name 服务器IP 域名 www.域名;
然后执行:
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart my-study-site
十四、配置 HTTPS
安装 Certbot:
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
申请 HTTPS 证书:
sudo certbot --nginx -d 域名 -d www.域名
中途选项:
是否同意协议:Y
是否接收邮件:N
是否跳转 HTTPS:Redirect
申请成功后,会看到类似:
Congratulations! You have successfully enabled HTTPS
测试自动续期:
sudo certbot renew --dry-run
如果出现:
all simulated renewals succeeded
说明自动续期正常。
十五、腾讯云防火墙最终保留端口
最终防火墙保留:
22 SSH 登录服务器
80 HTTP 访问 / 跳转 HTTPS
443 HTTPS 正式访问
Ping 可留可不留
正式上线后,测试用的:
8000
可以删除。
十六、HTTPS 后 CSRF 报错处理
如果登录、注册、发布笔记时报:
CSRF 验证失败
需要在 settings.py 中添加:
CSRF_TRUSTED_ORIGINS = [
"https://域名",
"https://www.域名",
]
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
然后重启服务:
sudo systemctl restart my-study-site
sudo systemctl reload nginx
十七、以后更新网站的流程
以后主要在本地 PyCharm 修改代码,不直接在服务器上改代码。
本地修改后:
git add .
git commit -m "update"
git push
服务器更新:
cd ~/projects/my-study-site
git pull
source venv/bin/activate
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart my-study-site
如果只是改页面逻辑,可以只执行:
git pull
sudo systemctl restart my-study-site
如果改了 CSS / JS / 图片,要执行:
python manage.py collectstatic --noinput
如果改了 models.py,要执行:
python manage.py migrate
总结
完整部署流程:
本地 Django 项目
↓
Git 提交
↓
推送 GitHub
↓
购买香港服务器
↓
安装 Python / Git / Nginx
↓
服务器拉取代码
↓
创建虚拟环境
↓
安装依赖
↓
配置 .env
↓
数据库迁移
↓
收集静态文件
↓
Daphne 后台运行
↓
Nginx 反向代理
↓
购买域名
↓
DNS 解析到服务器 IP
↓
配置 HTTPS
↓
正式上线
核心结论:
本地负责开发
GitHub 负责同步代码
服务器负责运行网站
Nginx 负责对外访问
Daphne 负责运行 Django
域名负责替代 IP
HTTPS 负责安全访问
CC_dog 2026年6月10日 12:28
得吃