# 数据信息填报系统 · 本地开发基础设施 # # 用法: # cd deploy # copy .env.example .env (首次) # docker compose up -d # # ⚠️ 容器名统一加 xt- 前缀,端口刻意避开 55432 / 6379 # (本机已有其他项目的 pg-verify 与 redis-local 在跑,不要动它们) name: xiaotutongxue services: # ── PostgreSQL 16 ───────────────────────────────── pg: image: postgres:16-alpine container_name: xt-pg restart: unless-stopped environment: POSTGRES_DB: ${PG_DB:-filldb} POSTGRES_USER: ${PG_USER:-fill} POSTGRES_PASSWORD: ${PG_PASSWORD:-fill_dev_pwd} # 中文排序与大小写:用 C 排序 + UTF8,避免 locale 差异导致索引行为不一致 POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" TZ: Asia/Shanghai ports: - "${PG_PORT:-5432}:5432" volumes: - pg-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${PG_USER:-fill} -d ${PG_DB:-filldb}"] interval: 5s timeout: 3s retries: 12 start_period: 10s command: - postgres # 超大图处理是内存密集的,DB 侧保留默认即可,但把慢查询记下来 - -c - log_min_duration_statement=1000 - -c - timezone=Asia/Shanghai # ── Redis 7 ─────────────────────────────────────── redis: image: redis:7-alpine container_name: xt-redis restart: unless-stopped ports: - "${REDIS_PORT:-16379}:6379" volumes: - redis-data:/data command: - redis-server - --appendonly - "yes" - --requirepass - "${REDIS_PASSWORD:-redis_dev_pwd}" healthcheck: test: ["CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD:-redis_dev_pwd} ping | grep PONG"] interval: 5s timeout: 3s retries: 12 start_period: 5s # ── MinIO(对象存储,S3 兼容)───────────────────── # M0 阶段不写入,但先起好——本地/生产的存储层走同一套 S3 接口, # 换阿里云 OSS 只改配置,不改代码。 minio: image: minio/minio:latest container_name: xt-minio restart: unless-stopped environment: MINIO_ROOT_USER: ${MINIO_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD:-minioadmin} TZ: Asia/Shanghai ports: - "${MINIO_PORT:-9000}:9000" - "${MINIO_CONSOLE_PORT:-9001}:9001" volumes: - minio-data:/data command: server /data --console-address ":9001" healthcheck: test: ["CMD-SHELL", "mc ready local || exit 1"] interval: 10s timeout: 5s retries: 6 start_period: 15s volumes: pg-data: redis-data: minio-data: