Files
gochat/deploy/quickstart/compose.yaml
T
rogee aeddedf2a3 Reorganize repo: backend/, deploy/, docs/ layout + AGENTS.md
Restructure the monorepo into clear top-level directories:
- backend/: Go module root (cmd, internal, pkg, configs, migrations,
  docs/swagger, scripts, tests, go.mod, Makefile, .air.toml)
- deploy/: Docker (Dockerfile, docker-compose*), quickstart, fluentd
- docs/: project documentation + reports/ (moved from repo root)
- AGENTS.md: new AI coding-agent guide at repo root

Update all references to the new layout:
- Dockerfile: COPY backend/go.mod, COPY backend/ (context = repo root)
- docker-compose files: context ../.., dockerfile deploy/docker/Dockerfile,
  env_file ../../.env, volume mounts ../../backend:/app
- deploy/quickstart/compose.yaml: dockerfile deploy/docker/Dockerfile
- CI: working-directory: backend for go commands, file deploy/docker/Dockerfile,
  coverage path backend/coverage.out, health_check backend/scripts/
- backend/Makefile: docker target uses -f ../deploy/docker/Dockerfile ../
- README: architecture tree, quickstart, config paths updated

Move root stray scripts (rename_models.*, run_m11_tests.sh, verify_build.sh,
gorm_bool_main.go) to backend/scripts/legacy/. All moves via git mv to
preserve history. Build, vet, SQLite tests, and docker compose config verified.
2026-07-07 14:44:12 +08:00

141 lines
4.3 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_HOST: postgres
GOCHAT_DATABASE_PORT: 5432
GOCHAT_DATABASE_USER: ${POSTGRES_USER:-gochat}
GOCHAT_DATABASE_PASSWORD: ${POSTGRES_PASSWORD:-gochat_dev}
GOCHAT_DATABASE_DBNAME: ${POSTGRES_DB:-gochat_dev}
GOCHAT_DATABASE_SSLMODE: disable
GOCHAT_DATABASE_RUN_MIGRATIONS: "true"
GOCHAT_DATABASE_MIGRATIONS_PATH: /app/migrations
GOCHAT_REDIS_HOST: redis
GOCHAT_REDIS_PORT: 6379
GOCHAT_REDIS_PASSWORD: ${REDIS_PASSWORD:-}
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_CAPTAIN_ENABLED: ${GOCHAT_CAPTAIN_ENABLED:-false}
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: