Docker环境下配置OpenProject接入外部反向代理网络求助
OpenProject接入jwilder/nginx-proxy外部网络的解决建议
问题定位
你的OpenProject配置存在两个核心问题:
- 网络定义格式错误,
external: true未正确缩进为net网络的属性 - 保留了内部
proxy服务,与外部的nginx-proxy冲突,且未将反向代理所需的环境变量配置到实际提供服务的web容器上
修改后的完整配置
version: "3.7" networks: net: external: true # 修正缩进,正确关联外部代理网络 backend: volumes: pgdata: opdata: x-op-restart-policy: &restart_policy restart: unless-stopped x-op-image: &image image: openproject/community:${TAG:-12} x-op-app: &app <<: *image <<: *restart_policy environment: RAILS_CACHE_STORE: "memcache" OPENPROJECT_CACHE__MEMCACHE__SERVER: "cache:11211" OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}" DATABASE_URL: "${DATABASE_URL:-postgres://postgres:p4ssw0rd@db/openproject?pool=20&encoding=unicode&reconnect=true}" RAILS_MIN_THREADS: 4 RAILS_MAX_THREADS: 16 IMAP_ENABLED: "${IMAP_ENABLED:-false}" volumes: - "${OPDATA:-opdata}:/var/openproject/assets" services: db: image: postgres:13 <<: *restart_policy stop_grace_period: "3s" volumes: - "${PGDATA:-pgdata}:/var/lib/postgresql/data" environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-p4ssw0rd} POSTGRES_DB: openproject networks: - backend cache: image: memcached <<: *restart_policy networks: - backend web: <<: *app command: "./docker/prod/web" networks: - net # 接入外部代理网络 - backend depends_on: - db - cache - seeder labels: - autoheal=true healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}/health_checks/default"] interval: 10s timeout: 3s retries: 3 start_period: 30s environment: <<: *app VIRTUAL_HOST: ${SITE_DOMAIN},www.${SITE_DOMAIN} LETSENCRYPT_HOST: ${SITE_DOMAIN},www.${SITE_DOMAIN} VIRTUAL_PORT: 8080 # 指定web容器内部端口,让nginx-proxy正确转发 autoheal: image: willfarrell/autoheal:1.2.0 volumes: - "/var/run/docker.sock:/var/run/docker.sock" environment: AUTOHEAL_CONTAINER_LABEL: autoheal worker: <<: *app command: "./docker/prod/worker" networks: - backend depends_on: - db - cache - seeder cron: <<: *app command: "./docker/prod/cron" networks: - backend depends_on: - db - cache - seeder seeder: <<: *app command: "./docker/prod/seeder" restart: on-failure networks: - backend
关键修改说明
- 修正网络定义:将
external: true正确缩进,让Docker识别net是已存在的外部网络 - 移除内部proxy服务:删除原配置中的
proxy服务,避免与外部nginx-proxy端口冲突 - 配置反向代理环境变量:在
web服务中添加VIRTUAL_HOST、LETSENCRYPT_HOST和VIRTUAL_PORT,让nginx-proxy自动生成vhost配置并申请SSL证书 - 调整网络关联:确保
web服务同时接入net(外部代理网络)和backend(内部服务网络),既可以被反向代理访问,又能连接数据库和缓存
启动与验证步骤
- 设置域名环境变量:
export SITE_DOMAIN=openproject.yourdomain.com - 启动OpenProject容器:
docker-compose up -d - 验证服务状态:
- 查看web容器日志:
docker-compose logs -f web,确认服务正常启动 - 检查nginx-proxy日志:
docker logs -f nginx-proxy,确认生成对应域名的vhost配置 - 访问你的域名,确认OpenProject正常加载且SSL证书生效
- 查看web容器日志:
内容的提问来源于stack exchange,提问作者Isaac Cohen
相关产品推荐
相关产品推荐

