当前位置: 首页 > news >正文

Django项目部署实战:Nginx + Gunicorn 云服务器完整指南

本文将详细介绍如何将Django项目从本地开发环境完整地部署到云服务器生产环境,涵盖从服务器初始化到最终上线的每一个步骤。


第一阶段:本地项目准备

1.1 项目检查与配置

确保项目在本地运行正常,然后进行生产环境配置:

# settings.py 关键配置
DEBUG = False  # 必须关闭调试模式
ALLOWED_HOSTS = ['your_server_ip', 'your_domain.com', 'localhost']# 数据库配置(从SQLite切换到PostgreSQL)
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'mydatabase','USER': 'mydatabaseuser','PASSWORD': 'mypassword',  # 生产环境建议使用环境变量'HOST': 'localhost','PORT': '5432',}
}# 静态文件配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')  # 收集静态文件目录
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

1.2 生成依赖文件和环境配置

# 生成依赖列表
pip freeze > requirements.txt# 安装PostgreSQL适配器
pip install psycopg2-binary
pip install gunicorn  # 提前测试# 导出本地数据(在本地执行)
python manage.py dumpdata --exclude auth.permission --exclude contenttypes > datadump.json

第二阶段:服务器初始化

2.1 连接服务器

ssh root@your_server_ip

2.2 创建部署用户

adduser deploy
usermod -aG sudo deploy
su - deploy  # 切换到deploy用户

2.3 系统更新和基础软件安装

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv postgresql postgresql-contrib nginx git curl

2.4 防火墙配置

sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx Full'  # 允许HTTP和HTTPS
sudo ufw enable

第三阶段:数据库配置

3.1 PostgreSQL设置

sudo -u postgres psql
-- 在PostgreSQL控制台中执行
CREATE DATABASE mydatabase;
CREATE USER mydatabaseuser WITH PASSWORD 'strongpassword';
ALTER ROLE mydatabaseuser SET client_encoding TO 'utf8';
ALTER ROLE mydatabaseuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE mydatabaseuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;
\q

第四阶段:项目部署

4.1 获取项目代码

mkdir ~/projects
cd ~/projects
git clone https://github.com/yourusername/yourproject.git myproject
cd myproject

4.2 创建虚拟环境

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

4.3 传输本地数据

在本地机器执行:

scp datadump.json deploy@your_server_ip:~/projects/myproject/
scp .env deploy@your_server_ip:~/projects/myproject/  # 如果有环境变量文件

4.4 环境变量配置

nano ~/projects/myproject/.env.production
# .env.production
DEBUG=False
SECRET_KEY=your-production-secret-key
DJANGO_SETTINGS_MODULE=myproject.settings.production
DATABASE_URL=postgresql://mydatabaseuser:strongpassword@localhost/mydatabase
ALLOWED_HOSTS=your_server_ip,your_domain.com

4.5 数据库迁移和数据导入

source venv/bin/activate
python manage.py migrate
python manage.py loaddata datadump.json
python manage.py collectstatic  # 收集静态文件
python manage.py createsuperuser  # 创建管理员账户

4.6 文件权限设置

sudo chown -R deploy:www-data ~/projects/myproject
sudo chmod -R 755 ~/projects/myproject
sudo chown -R www-data:www-data ~/projects/myproject/staticfiles
sudo chown -R www-data:www-data ~/projects/myproject/media

第五阶段:Gunicorn配置

5.1 创建Gunicorn服务文件

sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn daemon for myproject
After=network.target postgresql.service[Service]
User=deploy
Group=www-data
WorkingDirectory=/home/deploy/projects/myproject
Environment="PATH=/home/deploy/projects/myproject/venv/bin"
EnvironmentFile=/home/deploy/projects/myproject/.env.production
ExecStart=/home/deploy/projects/myproject/venv/bin/gunicorn \--access-logfile - \--workers 3 \--bind unix:/run/gunicorn.sock \--timeout 120 \myproject.wsgi:application[Install]
WantedBy=multi-user.target

5.2 启动并启用Gunicorn

sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn  # 检查状态

第六阶段:Nginx配置

6.1 创建Nginx配置文件

sudo nano /etc/nginx/sites-available/myproject
server {listen 80;server_name your_server_ip your_domain.com;# 静态文件服务location /static/ {alias /home/deploy/projects/myproject/staticfiles/;expires 1y;add_header Cache-Control "public, immutable";}# 媒体文件服务location /media/ {alias /home/deploy/projects/myproject/media/;expires 30d;add_header Cache-Control "public";}# 代理动态请求到Gunicornlocation / {proxy_set_header Host $http_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;proxy_pass http://unix:/run/gunicorn.sock;proxy_connect_timeout 30s;proxy_send_timeout 30s;proxy_read_timeout 30s;}# 客户端最大body大小(文件上传)client_max_body_size 100M;# 禁用favicon日志location = /favicon.ico {access_log off;log_not_found off;}
}

6.2 启用站点并测试

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置
sudo systemctl restart nginx

第七阶段:SSL证书配置(可选但推荐)

7.1 安装Certbot

sudo apt install certbot python3-certbot-nginx

7.2 获取SSL证书

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

7.3 设置自动续期

sudo crontab -e
# 添加以下行:
0 12 * * * /usr/bin/certbot renew --quiet

第八阶段:最终测试与监控

8.1 服务状态检查

# 检查所有服务状态
sudo systemctl status gunicorn
sudo systemctl status nginx
sudo systemctl status postgresql# 查看日志
sudo journalctl -u gunicorn -f
sudo tail -f /var/log/nginx/error.log

8.2 网站功能测试

  1. 访问网站首页
  2. 测试静态文件加载(CSS/JS)
  3. 测试动态页面(登录、表单提交)
  4. 测试媒体文件上传和显示
  5. 检查管理员后台

8.3 性能监控设置

# 安装基本监控工具
sudo apt install htop nethogs# 监控服务器资源
htop  # CPU和内存
nethogs  # 网络流量

故障排除指南

常见问题解决:

  1. 502 Bad Gateway: 检查Gunicorn是否运行:sudo systemctl status gunicorn
  2. 静态文件404: 检查Nginx配置中的路径和文件权限
  3. 数据库连接错误: 检查PostgreSQL服务状态和用户权限
  4. 权限被拒绝: 检查文件和目录的所有权及权限

日志查看命令:

# Gunicorn日志
sudo journalctl -u gunicorn --since today# Nginx访问日志
sudo tail -f /var/log/nginx/access.log# Nginx错误日志  
sudo tail -f /var/log/nginx/error.log# PostgreSQL日志
sudo tail -f /var/log/postgresql/postgresql-13-main.log

总结

通过以上完整的8个阶段,您已经成功将Django项目部署到生产环境。这个配置提供了:

  1. 安全性: 关闭调试模式、配置防火墙、使用SSL
  2. 性能: Nginx处理静态文件,Gunicorn处理动态内容
  3. 稳定性: 系统服务管理、日志监控、自动重启
  4. 可维护性: 清晰的目录结构、环境变量配置、版本控制

记得定期备份数据库和重要文件,并保持系统和依赖包的更新。


文章转载自:

http://guGKgw0B.snjpj.cn
http://zvGlpJGw.snjpj.cn
http://NgET07HY.snjpj.cn
http://enOACcPW.snjpj.cn
http://nOVmuGr2.snjpj.cn
http://rPbF8Neu.snjpj.cn
http://1kFXcFQX.snjpj.cn
http://KAaQdNFZ.snjpj.cn
http://09o4Swtl.snjpj.cn
http://0XVuil2o.snjpj.cn
http://NqdHG69X.snjpj.cn
http://6yLE0XGP.snjpj.cn
http://HXZLrga4.snjpj.cn
http://HD45C15z.snjpj.cn
http://8hTqDV2a.snjpj.cn
http://aWeG65sP.snjpj.cn
http://uCuvJ29w.snjpj.cn
http://RUpL2GdD.snjpj.cn
http://4pH2mLgh.snjpj.cn
http://oaMMoLIo.snjpj.cn
http://lc0e6CjG.snjpj.cn
http://7z0TMqZs.snjpj.cn
http://pK05Gkcm.snjpj.cn
http://BDHyotj4.snjpj.cn
http://N4eALtwX.snjpj.cn
http://8w4LSFO6.snjpj.cn
http://OCTddeWR.snjpj.cn
http://xYf6sqEI.snjpj.cn
http://VO2Pi1Gd.snjpj.cn
http://SqJOd6fi.snjpj.cn
http://www.dtcms.com/a/376755.html

相关文章:

  • 【实战+原理】微软云 Azure Database 私有网络接入模式全解析:从子网委派到Private Endpoint
  • 排序---插入排序(Insertion Sort)
  • k8s的service
  • 量化冗余分析中变量的关系丨TomatoSCI分析日记
  • Python设计模式
  • AD8028ARZ-REEL7电子元器件ADI 运算放大器IC 精密模拟芯片
  • uniapp和vue3项目中引入echarts 、lime-echart(微信小程序、H5等)
  • SpringMVC 执行流程分析 详解(图解SpringMVC执行流程)
  • Pytest 常见问题及其解决方案
  • 9-10关于JS初学产生的问题
  • Gradle使用技巧(Android场景)
  • 【Kubernetes】常见面试题汇总(十三)
  • MySql 内外连接
  • 从Java全栈到前端框架的实战之路
  • AI电子宠物本地部署模型方案全面解析
  • 行业学习【电商】:垂直电商如何理解?以专业宠物平台为例
  • Android 项目:画图白板APP开发(五)——橡皮擦(全面)
  • 2018年下半年 系统架构设计师 综合知识
  • SPEA2多目标进化算法:理论与应用全解析
  • 医院高值耗材智能化管理路径分析(上)
  • Java 声明式编程- Stream API 实战
  • 9月10日
  • LeakCanary原理示例讲解
  • 多集群 Kubernetes 部署与混合云资源治理架构设计分享
  • 人工智能机器学习——模型评价及优化
  • IndexTTS2安装说明
  • Vue:事件处理机制详解
  • 【笔记】空气弹簧概述、刚度调节原理
  • IgH EtherCAT 主站核心技术解析:从架构到工业部署的底层逻辑
  • tvm/triton/tensorrt比较