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

如何合并Docker Compose文件并整合Mayan EDMS服务?

整合Mayan EDMS到现有Docker Compose项目的实操指南

1. 前置冲突排查

先梳理现有Airflow、Django项目的核心资源,提前规避和Mayan默认配置的冲突:

  • 端口:Mayan默认映射8000端口,Airflow默认用8080、Django常使用8000,需将Mayan的主机端口改为未占用的(比如8081)
  • 服务名称:Mayan默认包含postgres、redis、mayan-edms-web等服务,若现有项目已有同名服务,需给Mayan的服务加前缀(比如mayan-postgres、mayan-redis)
  • 卷名称:Mayan默认卷名如mayan-edms-media,建议统一加前缀避免和现有卷重名
  • 网络:确保所有服务加入同一个自定义网络,而非Docker默认桥接网络,方便互通

2. 整合方案(推荐多文件分离管理)

保留现有docker-compose.yml,新增docker-compose.mayan.yml单独存放Mayan配置,既不污染原有配置,又能灵活启停。

步骤1:确保现有项目已定义自定义网络

在现有docker-compose.yml末尾添加自定义网络(若已有则跳过):

networks:
  app-shared-network:
    driver: bridge

步骤2:编写Mayan专属Compose文件

新建docker-compose.mayan.yml,配置如下(已规避冲突):

version: '3.8'

services:
  # 重命名PostgreSQL服务,避免和现有项目冲突
  mayan-postgres:
    image: postgres:15-alpine
    restart: always
    volumes:
      - mayan-postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: mayan
      POSTGRES_PASSWORD: ${MAYAN_DB_PASSWORD}
      POSTGRES_DB: mayan
    networks:
      - app-shared-network

  # 重命名Redis服务
  mayan-redis:
    image: redis:7-alpine
    restart: always
    networks:
      - app-shared-network

  mayan-edms-web:
    image: mayanedms/mayanedms:s4.5
    restart: always
    depends_on:
      - mayan-postgres
      - mayan-redis
    environment:
      MAYAN_DATABASE_ENGINE: django.db.backends.postgresql
      MAYAN_DATABASE_NAME: mayan
      MAYAN_DATABASE_USER: mayan
      MAYAN_DATABASE_PASSWORD: ${MAYAN_DB_PASSWORD}
      MAYAN_DATABASE_HOST: mayan-postgres
      MAYAN_REDIS_URL: redis://mayan-redis:6379/0
    ports:
      - "8081:8000"  # 映射到主机8081端口,避开Airflow的8080和Django的8000
    volumes:
      - mayan-media:/var/lib/mayan
    networks:
      - app-shared-network

  mayan-edms-worker:
    image: mayanedms/mayanedms:s4.5
    restart: always
    command: celery -A mayan worker -l INFO
    depends_on:
      - mayan-postgres
      - mayan-redis
      - mayan-edms-web
    volumes:
      - mayan-media:/var/lib/mayan
    networks:
      - app-shared-network
    # 限制资源,避免抢占Airflow/Django的资源
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 2G

  mayan-edms-beat:
    image: mayanedms/mayanedms:s4.5
    restart: always
    command: celery -A mayan beat -l INFO
    depends_on:
      - mayan-postgres
      - mayan-redis
      - mayan-edms-web
    volumes:
      - mayan-media:/var/lib/mayan
    networks:
      - app-shared-network

volumes:
  mayan-postgres-data:
  mayan-media:

networks:
  app-shared-network:
    external: true  # 引用现有项目的自定义网络

步骤3:统一环境变量管理

在项目根目录新建.env文件,存放敏感信息:

# 现有项目的环境变量(保留原有内容)
DJANGO_DB_PASSWORD=xxx
AIRFLOW__CORE__SQL_ALCHEMY_CONN=xxx

# Mayan的环境变量
MAYAN_DB_PASSWORD=your_secure_password

3. 服务互通配置

所有服务在同一个自定义网络内,可直接通过服务名称作为域名访问:

  • Django服务调用Mayan API:http://mayan-edms-web:8000/api/v1/(使用容器内部端口8000,而非主机映射的8081)
  • Mayan访问Airflow:http://airflow-webserver:8080/api/v1/(假设Airflow服务名为airflow-webserver)

4. 启动与验证

  • 同时启动所有服务:
    docker-compose -f docker-compose.yml -f docker-compose.mayan.yml up -d
    
  • 单独启停Mayan服务:
    docker-compose -f docker-compose.mayan.yml up -d
    docker-compose -f docker-compose.mayan.yml down
    
  • 验证步骤:
    1. 执行docker-compose ps确认所有服务状态为Up
    2. 访问http://localhost:8081验证Mayan界面正常加载
    3. 在Django代码中编写测试请求,调用Mayan API确认互通正常

内容的提问来源于stack exchange,提问作者Julian Buxton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:53:28