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

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

关键修改说明

  1. 修正网络定义:将external: true正确缩进,让Docker识别net是已存在的外部网络
  2. 移除内部proxy服务:删除原配置中的proxy服务,避免与外部nginx-proxy端口冲突
  3. 配置反向代理环境变量:在web服务中添加VIRTUAL_HOST、LETSENCRYPT_HOST和VIRTUAL_PORT,让nginx-proxy自动生成vhost配置并申请SSL证书
  4. 调整网络关联:确保web服务同时接入net(外部代理网络)和backend(内部服务网络),既可以被反向代理访问,又能连接数据库和缓存

启动与验证步骤

  1. 设置域名环境变量:
    export SITE_DOMAIN=openproject.yourdomain.com
    
  2. 启动OpenProject容器:
    docker-compose up -d
    
  3. 验证服务状态:
    • 查看web容器日志:docker-compose logs -f web,确认服务正常启动
    • 检查nginx-proxy日志:docker logs -f nginx-proxy,确认生成对应域名的vhost配置
    • 访问你的域名,确认OpenProject正常加载且SSL证书生效

内容的提问来源于stack exchange,提问作者Isaac Cohen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:45:56