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

从零开始:使用Docker容器化部署Django项目到腾讯云CVM(附完整配置文件)

从零开始:使用Docker容器化部署Django项目到腾讯云CVM(附完整配置文件)

在当今快速迭代的开发环境中,传统部署方式常常面临环境不一致、依赖冲突等问题。Docker容器化技术为解决这些痛点提供了优雅方案,本文将带您从零开始,通过Docker将Django项目无缝部署到腾讯云CVM,实现"一次构建,处处运行"的现代化部署体验。

1. 环境准备与架构设计

1.1 腾讯云CVM基础配置

建议选择以下规格的云服务器:

  • 操作系统:Ubuntu 22.04 LTS(长期支持版)
  • 推荐配置
    • 计算型C3:2核4GB(中小型项目)
    • 计算型C4:4核8GB(中大型项目)
  • 安全组设置
    • 开放80/443端口(Web服务)
    • 开放22端口(SSH管理)
    • 开放8000端口(调试用)

提示:购买后建议立即设置SSH密钥登录,禁用密码认证提升安全性

1.2 项目结构优化

标准Django项目的Docker化前需要调整目录结构:

myproject/ ├── app/ # Django应用代码 ├── manage.py ├── requirements.txt ├── Dockerfile # 主容器构建文件 ├── docker-compose.yml # 多服务编排文件 ├── nginx/ │ └── nginx.conf # 反向代理配置 └── static/ # 收集的静态文件

1.3 容器化架构设计

采用生产级三容器方案:

  1. Django容器:运行Gunicorn应用服务器
  2. Nginx容器:处理静态文件与反向代理
  3. PostgreSQL容器:数据库服务(可选替换为云数据库)

2. 核心配置文件编写

2.1 Dockerfile详解

# 基础镜像 FROM python:3.9-slim-bullseye # 设置环境变量 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # 创建工作目录 WORKDIR /code # 安装系统依赖 RUN apt-get update && apt-get install -y \ gcc \ libpq-dev \ && rm -rf /var/lib/apt/lists/* # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 收集静态文件(可在构建时执行) RUN python manage.py collectstatic --noinput # 暴露端口 EXPOSE 8000 # 启动命令 CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]

2.2 docker-compose.yml配置

version: '3.8' services: web: build: . command: gunicorn --bind 0.0.0.0:8000 --workers 3 myproject.wsgi:application volumes: - .:/code expose: - "8000" environment: - DJANGO_SETTINGS_MODULE=myproject.settings.prod - DATABASE_URL=postgres://postgres:password@db:5432/postgres depends_on: - db db: image: postgres:13 volumes: - postgres_data:/var/lib/postgresql/data/ environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=password - POSTGRES_DB=postgres nginx: image: nginx:1.21 ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./static:/static depends_on: - web volumes: postgres_data:

2.3 Nginx配置文件

upstream django { server web:8000; } server { listen 80; server_name your_domain.com; location /static/ { alias /static/; } 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; } }

3. 部署流程与优化

3.1 完整部署步骤

  1. 构建镜像

    docker-compose build
  2. 启动服务

    docker-compose up -d
  3. 执行数据库迁移

    docker-compose exec web python manage.py migrate
  4. 创建超级用户

    docker-compose exec web python manage.py createsuperuser

3.2 生产环境优化建议

Gunicorn参数调优

# gunicorn_config.py bind = "0.0.0.0:8000" workers = (2 * cpu_count()) + 1 worker_class = "gthread" threads = 2 max_requests = 1000 timeout = 30 keepalive = 2

Django生产配置

# settings/prod.py DEBUG = False ALLOWED_HOSTS = ['your_domain.com', 'localhost'] STATIC_ROOT = '/static/' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DB_NAME'), 'USER': os.getenv('DB_USER'), 'PASSWORD': os.getenv('DB_PASSWORD'), 'HOST': os.getenv('DB_HOST'), 'PORT': os.getenv('DB_PORT', '5432'), } }

4. 高级运维技巧

4.1 日志管理方案

查看容器日志:

docker-compose logs -f web

配置日志轮转:

# 在Dockerfile中添加 RUN mkdir -p /var/log/gunicorn && \ touch /var/log/gunicorn/access.log /var/log/gunicorn/error.log

4.2 自动化部署策略

使用GitHub Actions实现CI/CD:

name: Deploy to Tencent CVM on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install SSH key uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_PRIVATE_KEY }} known_hosts: ${{ secrets.KNOWN_HOSTS }} - name: Deploy via SSH run: | ssh user@your_server_ip "cd /path/to/project && git pull && docker-compose build && docker-compose up -d"

4.3 监控与告警配置

使用cAdvisor监控容器资源:

docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:latest
http://www.jsqmd.com/news/495754/

相关文章:

  • 深入解析Chrome CORS跨域限制及实战解决方案
  • 基于强化学习的图片旋转判断模型优化
  • Harmonyos应用实例119:立体图形展开折叠游戏
  • 国企工程建筑局域网Web应用如何基于JS实现BIM模型大文件的目录结构分片传输?
  • 揭开Deliberate模型的实战面纱:从技术优势到落地挑战
  • 新手避坑指南:Simulink中AC Voltage Source最常见的3个配置错误及解决方法
  • 无需代码!Z-Image-Turbo_UI界面小白教程:开箱即用,快速出图
  • CLIP-GmP-ViT-L-14图文匹配测试工具:辅助数据库课程设计中的多媒体检索模块
  • 惊艳!bge-large-zh-v1.5向量生成效果展示:sglang部署实测案例
  • AI编程新时代:Mirage Flow实战自动化代码审查与重构
  • 企业数字化转型的核心策略与实践路径 - 企业推荐官【官方】
  • 医疗局域网如何通过百度WebUploader组件优化病历PDF文件的浏览器端分片断点恢复?
  • Overleaf本地化部署实战:从零搭建高效LaTeX协作环境
  • 深入解析Techpoint TP2855视频解码芯片的寄存器配置与应用(第四部分)
  • 电子电路进阶:反馈机制与多级放大电路的实战应用解析
  • BGP选路避坑指南:当AS-PATH修改引发路由黑洞时该怎么办?
  • 2026年设计行业企业网盘选型指南:AI驱动下的协作革命
  • 大模型微调技术宝典:概念解析、方法分类与工具推荐!
  • DeepSeek-R1-Distill-Llama-8B数据库课程设计实战
  • 米酒设备口碑企业
  • 国防军工局域网Vue如何集成百度WebUploader组件支持卫星数据大文件夹的加密分片?
  • ComfyUI工作流搭建入门:像搭积木一样玩转AI图片生成
  • 告别简历排版噩梦:Reactive-Resume零代码构建专业简历全攻略
  • TortoiseGit 实战技巧:高效解决代码合并冲突
  • FRCRN语音降噪工具部署教程:Ubuntu+CUDA环境下GPU算力高效利用
  • 避坑指南:SPI+DMA配置STM32显示屏时中断与DMA优先级那些事儿
  • 效率提升秘籍:用快马平台自动生成Touchgal复杂手势管理代码
  • SpringBoot + Vue 水果仓库管理系统毕设实战:从零搭建到部署避坑指南
  • explore_lite vs rrt_explore:移动机器人自主建图方案对比与实战测评
  • python、django、vue.js从零开发基于WideDeep深度学习的电影推荐系统 基于神经网络的电影/影视/短剧/电视剧/视频推荐系统设计与开发 WideDeep深度学习模型 可视化数据分析