owpengram-server/deploy/docker-compose.yml
2026-08-07 13:50:38 +03:00

97 lines
No EOL
4.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
- "127.0.0.1:5432:5432" # <-- ЗАХИЩЕНО (доступ тільки з 127.0.0.1)
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:
- "127.0.0.1:6399:6379" # <-- ЗАХИЩЕНО (доступ тільки з 127.0.0.1)
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: ${TELESRV_S3_ACCESS_KEY_ID:-owpengram}
MINIO_ROOT_PASSWORD: ${TELESRV_S3_SECRET_ACCESS_KEY:-owpengram123}
ports:
- "127.0.0.1:9000:9000" # <-- якщо S3 використовує тільки локальний бекенд
- "127.0.0.1:9001:9001" # <-- Web UI Minio (можна залишити без 127.0.0.1, якщо потрібен адмін-веб ззовні)
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