刘光辉
10 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 腾讯云 CVM 专用:只起 jnpf PG(资源限死,寄住共享生产机 YOUR_DB_HOST)。
# 背景/割接见 docs/superpowers/plans/2026-07-20-tencent-cloud-pg-shared-db.md。
# 镜像 cx/postgres:18.4 由 build docker/postgres 产出(amd64,含 pg_bigm/pgvector)。
# 凭据经仓库根 .env 注入;端口 15432(5432/5433 已被 fastgpt-pg/homework-pg 占)。
# 🔴 项目名 jnpf-pg 与 service key 绝不能改:卷名 jnpf-pg_jnpf_pgdata 由项目名派生
#    (下方 jnpf_pgdata 未显式 name:),改了新容器挂空卷、客户A数据"消失"。
name: jnpf-pg
services:
  cx-postgres:
    # 2026-08-08 CVM 容器名规范化:带客户拼音(原 cx-postgres,与本机沙盒/交付基线同名易混淆)。
    # 仅容器名改,service key / 项目名 / 卷不动。
    container_name: cx-pg-customer1
    image: cx/postgres:18.4
    build:
      context: ..                     # tencent/ 上一级 = docker/postgres(含 Dockerfile)
    platform: linux/amd64
    restart: unless-stopped
    shm_size: 512m
    mem_limit: 3g
    memswap_limit: 3g                 # 无 swap,禁止溢出到 swap
    environment:
      TZ: Asia/Shanghai
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: ${JNPF_PG_PASSWORD:?缺 JNPF_PG_PASSWORD,先在仓库根 .env 设}
      POSTGRES_INITDB_ARGS: "--locale=C.UTF-8 --encoding=UTF8"
    volumes:
      - jnpf_pgdata:/var/lib/postgresql
    ports:
      - "15432:5432"                  # 对公网(安全组只放 15432,靠强密码+非超户防护)
    command:
      - postgres
      - -c
      - shared_buffers=512MB
      - -c
      - shared_preload_libraries=pg_stat_statements,auto_explain
      - -c
      - pg_stat_statements.track=all
      - -c
      # 共享库:开发(本地~10服务)+测试(192.168.21.151~10服务)两环境 Druid 池叠加,
      # 稳态曾达 197/200 逼满(L029 共库放大)。单环境 9 服务先例=200 → 双环境提到 400。
      # 400 连接内存 ~700-900MB,仍在 mem_limit 3g / CVM 可用内存内。
      - max_connections=400
      - -c
      - timezone=Asia/Shanghai
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
      interval: 15s
      timeout: 10s
      retries: 10
      start_period: 60s
volumes:
  jnpf_pgdata: