如何合并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 - 验证步骤:
- 执行
docker-compose ps确认所有服务状态为Up - 访问
http://localhost:8081验证Mayan界面正常加载 - 在Django代码中编写测试请求,调用Mayan API确认互通正常
- 执行
内容的提问来源于stack exchange,提问作者Julian Buxton
相关产品推荐
相关产品推荐

