Files
gochat/deploy/quickstart/compose.yaml
T
2026-08-22 21:20:44 +08:00

188 lines
5.8 KiB
YAML

name: gochat-quickstart
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_change_me_minimum_32_chars}
GOCHAT_LOG_LEVEL: info
GOCHAT_LOG_FORMAT: json
GOCHAT_STORAGE_PROVIDER: local
GOCHAT_STORAGE_LOCAL_PATH: /app/storage/uploads
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
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
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: