97 lines
3.9 KiB
YAML
97 lines
3.9 KiB
YAML
# 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
|