Files
gochat/deploy/quickstart/compose.yaml
T
rogee 4d684a71eb
Build and publish Docker images / Build and publish images (push) Successful in 2m10s
feat: geolocate anonymous widget visitors
2026-09-15 08:54:13 +08:00

220 lines
6.2 KiB
YAML

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: