# telesrv 第一阶段三方依赖(开发用)。 # # 启动: docker compose up -d # 状态: docker compose ps # 关停: docker compose down (保留数据卷) # 清空: docker compose down -v (连数据卷一起删,重置 schema/数据) # # server 端连接串见 internal/config/config.go 的默认值(localhost:5432 / localhost:6399)。 # # 容器/卷命名可通过 TELESRV_DOCKER_PROJECT / TELESRV_DOCKER_PREFIX 覆盖(默认 owpengram): # start-server.sh 对已存在 telesrv_* 卷、且用户拒绝一次性改名迁移的安装,会把这两个变量 # 固定设为 telesrv,从而永久保留旧命名,不动用户现有的 telesrv_pgdata / telesrv_redisdata。 name: ${TELESRV_DOCKER_PROJECT:-owpengram} services: postgres: image: postgres:17-alpine container_name: ${TELESRV_DOCKER_PREFIX:-owpengram}-postgres # 全库已去分区(普通表),max_locks_per_transaction 默认 64 已够;512 仅留余量,对内存近乎零开销。 # pg_stat_statements:聚合各 SQL 的累计/平均耗时与调用次数,用于定位 postgres 容器 CPU 热点 # (telesrv 是宿主进程,docker stats 里的 CPU 尖峰是本容器)。需 CREATE EXTENSION 后才有视图: # docker exec -i owpengram-postgres psql -U telesrv -d telesrv -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;" command: - "postgres" - "-c" - "max_locks_per_transaction=512" - "-c" - "shared_preload_libraries=pg_stat_statements" - "-c" - "pg_stat_statements.track=all" - "-c" - "track_io_timing=on" environment: # Only take effect when Postgres bootstraps a brand-new, empty data # volume; a pre-existing volume ignores these and keeps whatever # role/database name it was originally initialized with. See # deploy/migrate-db-naming.ps1 for renaming an existing telesrv-named # role/database in-place. POSTGRES_DB: owpengram POSTGRES_USER: owpengram POSTGRES_PASSWORD: owpengram TZ: UTC ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U owpengram -d owpengram"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped redis: image: redis:7-alpine container_name: ${TELESRV_DOCKER_PREFIX:-owpengram}-redis command: ["redis-server", "--appendonly", "yes"] ports: - "6399:6379" # 宿主 6379 常被其他项目占用,telesrv 对外用 6399(容器内仍 6379) volumes: - redisdata:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped # S3 兼容对象存储,默认 blob backend(见 .env.example 的 TELESRV_BLOB_BACKEND=s3)。 # 桶由 telesrv 自己在启动时按需创建(internal/app/files/blobs3.go 的 NewS3FS), # 这里不需要额外的 mc 初始化容器。控制台(9001)仅用于本地调试查看已存对象。 minio: image: minio/minio:latest container_name: ${TELESRV_DOCKER_PREFIX:-owpengram}-minio command: ["server", "/data", "--console-address", ":9001"] environment: MINIO_ROOT_USER: owpengram MINIO_ROOT_PASSWORD: owpengram123 ports: - "9000:9000" # S3 API(对应 .env.example 的 TELESRV_S3_ENDPOINT=localhost:9000) - "9001:9001" # Web 控制台,浏览器打开 http://localhost:9001 查看存储内容 volumes: - miniodata:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped volumes: pgdata: name: ${TELESRV_DOCKER_PREFIX:-owpengram}_pgdata redisdata: name: ${TELESRV_DOCKER_PREFIX:-owpengram}_redisdata miniodata: name: ${TELESRV_DOCKER_PREFIX:-owpengram}_miniodata