You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在单台VPS中部署多套Django、Celery与Redis应用的方案咨询

部署100+独立Django+Celery+Redis实例的优化方案

一、Docker+Docker Compose标准化部署

  • 为所有应用制定通用的docker-compose.yml模板,每个应用仅需修改环境变量、端口映射和挂载路径:
    version: '3.8'
    services:
      django:
        build: ./django-app
        command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
        environment:
          - DJANGO_SETTINGS_MODULE=myproject.settings
          - REDIS_URL=redis://redis:6379/0
        volumes:
          - ./static:/app/static
          - ./media:/app/media
        ports:
          - "8001:8000" # 每个应用分配唯一端口
        depends_on:
          - redis
    
      celery:
        build: ./django-app
        command: celery -A myproject worker --loglevel=info
        environment:
          - DJANGO_SETTINGS_MODULE=myproject.settings
          - REDIS_URL=redis://redis:6379/0
        volumes:
          - ./static:/app/static
          - ./media:/app/media
        depends_on:
          - redis
    
      redis:
        image: redis:alpine
        ports:
          - "6381:6379" # 每个Redis实例分配唯一端口
        volumes:
          - ./redis-data:/data
    
  • 编写批量初始化脚本,输入应用名称、起始端口等参数,自动生成每个应用的目录结构、.env文件和定制化的docker-compose.yml,最后执行docker-compose up -d启动服务。

二、Supervisor统一管理进程(无容器方案)

  • 创建通用的Supervisor配置模板app-template.conf:
    [program:%(app_name)s_django]
    command=gunicorn --bind 0.0.0.0:%(django_port)s %(app_name)s.wsgi:application
    directory=/var/www/%(app_name)s
    user=www-data
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/%(app_name)s_django.log
    stderr_logfile=/var/log/supervisor/%(app_name)s_django_err.log
    
    [program:%(app_name)s_celery]
    command=celery -A %(app_name)s worker --loglevel=info
    directory=/var/www/%(app_name)s
    user=www-data
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/%(app_name)s_celery.log
    stderr_logfile=/var/log/supervisor/%(app_name)s_celery_err.log
    
    [program:%(app_name)s_redis]
    command=redis-server --port %(redis_port)s --dir /var/lib/redis/%(app_name)s
    user=redis
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/%(app_name)s_redis.log
    stderr_logfile=/var/log/supervisor/%(app_name)s_redis_err.log
    
  • 用脚本批量替换模板中的%(app_name)s、%(django_port)s、%(redis_port)s等变量,生成每个应用的配置文件并放到/etc/supervisor/conf.d/目录,执行supervisorctl update即可加载新配置。

三、Redis资源优化(可选)

若业务允许,无需为每个应用启动独立Redis实例——可共用一个Redis服务,通过不同数据库编号(如0-100)隔离应用数据:

  • 修改Django和Celery配置,将REDIS_URL设为redis://localhost:6379/1(数字对应不同数据库)
  • 此方式可大幅减少内存和进程占用,降低运维复杂度。

四、全流程自动化部署

编写Shell或Python脚本,实现从代码拉取到服务启动的自动化:

  1. 克隆应用代码到指定目录
  2. 创建虚拟环境并安装依赖
  3. 生成对应容器或Supervisor配置
  4. 启动服务并验证运行状态

内容的提问来源于stack exchange,提问作者Al Jaber Nishad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:55:54