name: gochat-quickstart x-gochat-geoip: &gochat-geoip type: bind source: ${GOCHAT_GEOIP_DB_FILE:-/dev/null} target: /run/gochat/geoip/GeoLite2-City.mmdb read_only: true bind: create_host_path: false services: postgres: image: pgvector/pgvector:pg16 restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-gochat_dev} POSTGRES_USER: ${POSTGRES_USER:-gochat} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-gochat_dev} ports: - "127.0.0.1:${POSTGRES_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 20 redis: image: redis:7-alpine restart: unless-stopped command: >- sh -c 'if [ -n "$${REDIS_PASSWORD}" ]; then exec redis-server --appendonly yes --requirepass "$${REDIS_PASSWORD}"; else exec redis-server --appendonly yes; fi' environment: REDIS_PASSWORD: ${REDIS_PASSWORD:-} ports: - "127.0.0.1:${REDIS_PORT:-6379}:6379" volumes: - redis-data:/data healthcheck: test: - CMD-SHELL - >- if [ -n "$${REDIS_PASSWORD}" ]; then redis-cli -a "$${REDIS_PASSWORD}" ping; else redis-cli ping; fi interval: 5s timeout: 5s retries: 20 meilisearch: image: getmeili/meilisearch:v1.13 restart: unless-stopped environment: MEILI_ENV: development MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-gochat_dev} MEILI_NO_ANALYTICS: "true" ports: - "127.0.0.1:${MEILI_PORT:-7700}:7700" volumes: - meili-data:/meili_data healthcheck: test: - CMD - wget - --no-verbose - --spider - http://127.0.0.1:7700/health interval: 5s timeout: 5s retries: 30 mailhog: image: mailhog/mailhog:v1.0.1 restart: unless-stopped ports: - "127.0.0.1:${MAILHOG_SMTP_PORT:-1025}:1025" - "127.0.0.1:${MAILHOG_WEB_PORT:-8025}:8025" gochat: build: context: ../.. dockerfile: deploy/docker/Dockerfile restart: unless-stopped stop_grace_period: ${GOCHAT_STOP_GRACE_PERIOD:-35s} depends_on: postgres: condition: service_healthy redis: condition: service_healthy meilisearch: condition: service_healthy environment: &gochat-env GOCHAT_ENV: ${GOCHAT_ENV:-development} GOCHAT_SERVER_HOST: 0.0.0.0 GOCHAT_SERVER_PORT: 3000 GOCHAT_SERVER_MODE: ${GOCHAT_SERVER_MODE:-debug} GOCHAT_DATABASE_DSN: "postgres://${POSTGRES_USER:-gochat}:\ ${POSTGRES_PASSWORD:-gochat_dev}@postgres:5432/\ ${POSTGRES_DB:-gochat_dev}?sslmode=disable" GOCHAT_DATABASE_RUN_MIGRATIONS: "true" GOCHAT_DATABASE_MIGRATIONS_PATH: /app/migrations GOCHAT_REDIS_DSN: ${REDIS_DSN:-redis://redis:6379} GOCHAT_REDIS_POOL_SIZE: 50 GOCHAT_SEARCH_ENGINE: meilisearch GOCHAT_SEARCH_HOST: http://meilisearch:7700 GOCHAT_SEARCH_API_KEY: ${GOCHAT_SEARCH_API_KEY:-gochat_dev} GOCHAT_JWT_SECRET: ${GOCHAT_JWT_SECRET:-gochat_quickstart_secret_32_chars} GOCHAT_LOG_LEVEL: info GOCHAT_LOG_FORMAT: json GOCHAT_STORAGE_PROVIDER: local GOCHAT_STORAGE_LOCAL_PATH: /app/storage/uploads GOCHAT_GEOIP_DB_PATH: ${GOCHAT_GEOIP_DB_PATH:-} GOCHAT_COPILOT_PROVIDER_CONFIG: ${GOCHAT_COPILOT_PROVIDER_CONFIG:-} GOCHAT_COPILOT_CHAT_API_KEY: ${GOCHAT_COPILOT_CHAT_API_KEY:-} GOCHAT_COPILOT_EMBEDDING_API_KEY: ${GOCHAT_COPILOT_EMBEDDING_API_KEY:-} SMTP_HOST: mailhog SMTP_PORT: 1025 ports: - "127.0.0.1:${GOCHAT_PORT:-3000}:3000" volumes: - gochat-storage:/app/storage - *gochat-geoip healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:3000/ready"] interval: 10s timeout: 5s retries: 30 worker: build: context: ../.. dockerfile: deploy/docker/Dockerfile restart: unless-stopped stop_grace_period: ${GOCHAT_STOP_GRACE_PERIOD:-35s} depends_on: gochat: condition: service_healthy postgres: condition: service_healthy redis: condition: service_healthy meilisearch: condition: service_healthy environment: <<: *gochat-env GOCHAT_DATABASE_RUN_MIGRATIONS: "false" volumes: - gochat-storage:/app/storage - *gochat-geoip command: ["worker"] healthcheck: disable: true seed: build: context: ../.. dockerfile: deploy/docker/Dockerfile profiles: ["seed"] depends_on: gochat: condition: service_healthy environment: <<: *gochat-env GOCHAT_SEED_ADMIN_EMAIL: ${GOCHAT_SEED_ADMIN_EMAIL:-admin@gochat.local} GOCHAT_SEED_ADMIN_PASSWORD: ${GOCHAT_SEED_ADMIN_PASSWORD:-changeme} GOCHAT_SEED_ADMIN_NAME: ${GOCHAT_SEED_ADMIN_NAME:-Super Admin} GOCHAT_SEED_ACCOUNT_NAME: ${GOCHAT_SEED_ACCOUNT_NAME:-Quickstart Account} GOCHAT_SEED_INBOX_NAME: >- ${GOCHAT_SEED_INBOX_NAME:-Quickstart Website Inbox} volumes: - gochat-storage:/app/storage command: ["seed"] restart: "no" shangwutong: profiles: ["shangwutong"] build: context: ../.. dockerfile: channels/shangwutong/Dockerfile restart: unless-stopped stop_grace_period: ${SWT_SHUTDOWN_TIMEOUT:-30s} environment: SWT_CONNECTOR_LISTEN: :9100 SWT_CONNECTOR_DB_PATH: /data/connector.db GOCHAT_BASE_URL: http://gochat:3000 GOCHAT_CONNECTOR_SERVICE_TOKEN: ${GOCHAT_CONNECTOR_SERVICE_TOKEN:-} SWT_MAX_INFLIGHT_HEARTBEATS: ${SWT_MAX_INFLIGHT_HEARTBEATS:-64} SWT_INBOUND_WORKERS: ${SWT_INBOUND_WORKERS:-8} SWT_OUTBOUND_WORKERS: ${SWT_OUTBOUND_WORKERS:-8} SWT_SHUTDOWN_TIMEOUT: ${SWT_SHUTDOWN_TIMEOUT:-30s} volumes: - shangwutong-data:/data - shangwutong-backups:/backup healthcheck: test: - CMD - wget - -q - -T - "3" - -O - /dev/null - http://127.0.0.1:9100/readyz interval: 10s timeout: 5s retries: 30 volumes: postgres-data: redis-data: meili-data: gochat-storage: shangwutong-data: shangwutong-backups: