services: nginx: image: nginx:alpine container_name: yoresee_doc_nginx ports: - "${NGINX_HTTP_PORT:-8080}:80" - "${NGINX_HTTPS_PORT:-8443}:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./logs/nginx:/var/log/nginx depends_on: - frontend - backend - collab - minio networks: - yoresee_doc_network restart: unless-stopped frontend: build: context: .. dockerfile: frontend/Dockerfile.prod target: runner image: yoresee_doc_frontend_runner:latest container_name: yoresee_doc_frontend environment: - NODE_ENV=production - VITE_API_BASE_URL=${VITE_API_BASE_URL:-http://localhost:8080} - VITE_GRPC_WEB_ENDPOINT=${VITE_GRPC_WEB_ENDPOINT:-/grpc} networks: - yoresee_doc_network restart: unless-stopped postgres: image: postgres:15-alpine container_name: yoresee_doc_postgres environment: POSTGRES_USER: ${POSTGRES_USER:-root} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-your_password} POSTGRES_DB: ${POSTGRES_DB:-yoresee_doc_db} volumes: - yoresee_doc_postgres_data:/var/lib/postgresql/data networks: - yoresee_doc_network restart: unless-stopped redis: image: redis:7-alpine container_name: yoresee_doc_redis environment: REDIS_PASSWORD: ${REDIS_PASSWORD:-your_redis_password} volumes: - yoresee_doc_redis_data:/data - ./redis/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf networks: - yoresee_doc_network restart: unless-stopped consul: image: hashicorp/consul:1.16 container_name: yoresee_doc_consul command: "agent -dev -client=0.0.0.0 -ui" environment: CONSUL_LOCAL_CONFIG: >- {"acl":{"enabled":true,"default_policy":"deny","down_policy":"extend-cache","enable_token_persistence":true,"tokens":{"initial_management":"${CONSUL_ROOT_TOKEN:-yoresee_doc_root_token}"}}} ports: - "${CONSUL_HOST_PORT:-8500}:${CONSUL_PORT:-8500}" volumes: - yoresee_doc_consul_data:/consul/data networks: - yoresee_doc_network restart: unless-stopped rabbitmq: image: rabbitmq:3-management container_name: yoresee_doc_rabbitmq environment: RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-guest} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-guest} volumes: - yoresee_doc_rabbitmq_data:/var/lib/rabbitmq - ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro - ./logs/rabbitmq:/var/log/rabbitmq networks: - yoresee_doc_network restart: unless-stopped minio: image: minio/minio:latest container_name: yoresee_doc_minio command: server /data --console-address ":${MINIO_CONSOLE_PORT:-9001}" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} MINIO_BROWSER_REDIRECT_URL: ${MINIO_BROWSER_REDIRECT_URL:-http://localhost:8080/minio} volumes: - yoresee_doc_minio_data:/data networks: - yoresee_doc_network restart: unless-stopped elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.15.3 container_name: yoresee_doc_elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - xpack.security.enrollment.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m volumes: - yoresee_doc_elasticsearch_data:/usr/share/elasticsearch/data networks: - yoresee_doc_network restart: unless-stopped backend: build: context: .. dockerfile: backend/Dockerfile.prod target: runner image: yoresee_doc_backend_runner:latest container_name: yoresee_doc_backend volumes: - ../backend/config.toml:/app/config.toml environment: - BACKEND_INTERNAL_RPC_KEY=${BACKEND_INTERNAL_RPC_KEY:-yoresee_doc_internal_key} ports: - "${BACKEND_GRPC_HOST_PORT:-9090}:${BACKEND_GRPC_PORT:-9090}" depends_on: - postgres - redis - consul - rabbitmq - minio - elasticsearch networks: - yoresee_doc_network restart: unless-stopped collab-core: build: context: .. dockerfile: collab/Dockerfile.prod image: yoresee_doc_collab_core:latest container_name: yoresee_doc_collab_core environment: - REDIS_HOST=${REDIS_HOST:-redis} - REDIS_PORT=${REDIS_PORT:-6379} - REDIS_PASSWORD=${REDIS_PASSWORD:-your_redis_password} - REDIS_DB=${REDIS_DB:-0} - BACKEND_ADDR=${BACKEND_HOST:-backend}:${BACKEND_GRPC_PORT:-9090} - DIRTY_DOC_MQ=${DIRTY_DOC_MQ:-rabbitmq} - DIRTY_DOC_TOPIC=${DIRTY_DOC_TOPIC:-collab.dirty_docs} - RABBITMQ_URL=amqp://${RABBITMQ_DEFAULT_USER:-guest}:${RABBITMQ_DEFAULT_PASS:-guest}@${RABBITMQ_HOST:-rabbitmq}:${RABBITMQ_AMQP_PORT:-5672}/ - INTERNAL_RPC_KEY=${BACKEND_INTERNAL_RPC_KEY:-yoresee_doc_internal_key} - DIRTY_DOC_NOTIFY_THRESHOLD=${DIRTY_DOC_NOTIFY_THRESHOLD:-200} depends_on: - redis - backend - rabbitmq networks: - yoresee_doc_network restart: unless-stopped collab: build: context: .. dockerfile: collab-go/Dockerfile.prod image: yoresee_doc_collab_gateway:latest container_name: yoresee_doc_collab environment: - ADDR=:${COLLAB_GATEWAY_PORT:-1234} - JWT_SECRET=${JWT_SECRET:-yoresee_doc_jwt_secret_key} - COLLAB_CORE_URL=ws://${COLLAB_CORE_HOST:-collab-core}:${COLLAB_CORE_PORT:-1234} - BACKEND_GRPC_ADDR=${BACKEND_HOST:-backend}:${BACKEND_GRPC_PORT:-9090} - INTERNAL_RPC_KEY=${BACKEND_INTERNAL_RPC_KEY:-yoresee_doc_internal_key} depends_on: - collab-core networks: - yoresee_doc_network restart: unless-stopped snapshot-worker: build: context: .. dockerfile: backend/Dockerfile.snapshot.prod image: yoresee_doc_snapshot_worker:latest container_name: yoresee_doc_snapshot_worker volumes: - ../backend/config.toml:/app/config.toml environment: - COLLAB_CORE_HTTP=http://${COLLAB_CORE_HOST:-collab-core}:${COLLAB_CORE_PORT:-1234} depends_on: - rabbitmq - redis - elasticsearch networks: - yoresee_doc_network restart: unless-stopped notification-worker: build: context: .. dockerfile: backend/Dockerfile.notification.prod image: yoresee_doc_notification_worker:latest container_name: yoresee_doc_notification_worker volumes: - ../backend/config.toml:/app/config.toml environment: - NOTIFICATION_MQ=${NOTIFICATION_MQ:-rabbitmq} depends_on: - rabbitmq - redis - postgres networks: - yoresee_doc_network restart: unless-stopped search-sync-worker: build: context: .. dockerfile: backend/Dockerfile.search-sync.prod image: yoresee_doc_search_sync_worker:latest container_name: yoresee_doc_search_sync_worker volumes: - ../backend/config.toml:/app/config.toml environment: - SEARCH_SYNC_MQ=${SEARCH_SYNC_MQ:-rabbitmq} depends_on: - rabbitmq - redis - postgres - elasticsearch networks: - yoresee_doc_network restart: unless-stopped volumes: yoresee_doc_postgres_data: yoresee_doc_redis_data: yoresee_doc_consul_data: yoresee_doc_rabbitmq_data: yoresee_doc_minio_data: yoresee_doc_elasticsearch_data: networks: yoresee_doc_network: driver: bridge