version: "3.3" services: # 应用网关 service-gateway: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: core/gateway PORT: 3000 depends_on: - mongo - redis labels: - "traefik.enable=true" - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)" - "traefik.http.services.api-gw.loadbalancer.server.port=3000" networks: - internal # 用户服务 service-user: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: core/user/*.service.js depends_on: - mongo - redis networks: - internal # 群组服务 service-group: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: core/group/*.service.js depends_on: - mongo - redis networks: - internal # 聊天服务 service-chat: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: core/chat/*.service.js depends_on: - mongo - redis networks: - internal # 文件服务 / 插件注册中心 / 配置服务 service-file: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: core/file,core/plugin/registry,core/config depends_on: - mongo - redis - minio networks: - internal service-openapi: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICES: openapi/app,openapi/oidc/oidc OPENAPI_PORT: 3003 OPENAPI_UNDER_PROXY: "true" depends_on: - mongo - redis - minio labels: - "traefik.enable=true" - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)" - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003" networks: - internal # 插件服务(所有插件) service-all-plugins: build: context: . image: tailchat restart: unless-stopped env_file: docker-compose.env environment: SERVICEDIR: plugins depends_on: - mongo - redis - minio networks: - internal # 数据库 mongo: image: mongo:4 restart: on-failure volumes: - data:/data/db networks: - internal # 数据缓存与中转通讯 redis: image: redis:alpine restart: on-failure networks: - internal # 存储服务 minio: image: minio/minio restart: on-failure networks: - internal environment: MINIO_ROOT_USER: tailchat MINIO_ROOT_PASSWORD: com.msgbyte.tailchat volumes: - storage:/data command: minio server /data --console-address ":9001" # 路由转发 traefik: image: traefik:v2.1 restart: unless-stopped command: - "--api.insecure=true" # Don't do that in production! - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entryPoints.web.address=:80" - "--entryPoints.web.forwardedHeaders.insecure" # Not good ports: - 11000:80 - 127.0.0.1:11001:8080 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - internal - default networks: internal: name: tailchat-internal volumes: data: storage: