- DatabaseConfig: Host/Port/User/Password/Name/DBName/SSLMode → 单个 DSN 字段 - RedisConfig: Host/Port/Password/DB/URL → 单个 DSN 字段 - 环境变量: GOCHAT_DATABASE_* (7个) → GOCHAT_DATABASE_DSN, GOCHAT_REDIS_* (5个) → GOCHAT_REDIS_DSN - validator.go: DSN URL 解析校验 (scheme + host) - redis.go: redis.ParseURL(cfg.DSN) 直连 - 所有 docker-compose / CI / shell 脚本 / .env 同步更新 - 删除 deploy/helm/ 整个目录 (20个文件) - CI 删除 helm-validate / deploy-staging / deploy-production 三个 job - 文档同步更新 (README, 架构设计, PRD, 滚动升级)
133 lines
4.0 KiB
YAML
133 lines
4.0 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
|
|
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
|
|
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/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 30
|
|
|
|
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"
|
|
|
|
volumes:
|
|
postgres-data:
|
|
redis-data:
|
|
meili-data:
|
|
gochat-storage:
|