Pigsty v4.5.0 Docker Compose 部署指南

Pigsty v4.5.0 Docker Compose 部署指南:基于官方 pgsty/pigsty:v4.5.0 单容器镜像,从镜像选型、端口配置、生成随机密码、执行 deploy.yml 到 PostgreSQL、Patroni、Grafana、VictoriaMetrics 全栈验证的 0→1 完整实测,含 usermod 冲突与 duckdb 扩展冲突两处排障实录。

PigstyPigstyPostgreSQL数据库DockerGrafana2026/10/25

Pigsty v4.5.0 Docker Compose 部署指南

目标:在一台 Linux 服务器上用 Docker Compose 拉起 Pigsty v4.5.0 单节点演示栈,完成 PostgreSQL + Patroni 高可用 + Grafana/VictoriaMetrics 监控 + pgBackRest 备份的全栈部署,并验证数据库连接与监控面板可用。本篇已在 Debian 13 实例内实测通过(2026-10-25)。

一、环境信息

  • 操作系统:Debian 13 (trixie),x86_64
  • Pigsty 版本:v4.5.0
  • PostgreSQL 版本:18.6
  • pig CLI 版本:1.8.0
  • 实例 docker 镜像:pgsty/pigsty:v4.5.0(单实例内含 systemd,跑完整栈)
  • 对外端口:HTTP 80 / HTTPS 443 / PostgreSQL 5432 / SSH 22
  • 数据目录:/data(持久化挂载到宿主机)
  • 内存要求:至少 2GB(完整监控栈有一定开销)
  • 磁盘要求:至少 20GB 可用

二、docker 镜像选型说明

Pigsty 官方提供开箱即用的单实例 docker 镜像 pgsty/pigsty:<version>,实例内自带 systemd,一次启动即可运行 PostgreSQL、Patroni、HAProxy、Grafana、VictoriaMetrics、VictoriaLogs、Alertmanager、pg_exporter 等全部组件。

docker 镜像说明适用场景
pgsty/pigsty:v4.5.0官方全栈 docker 镜像,含全部组件本地体验、开发测试、功能验证
自行构建基于 docker/Dockerfile 定制需要裁剪组件或换基础系统时

⚠️ 单实例形态不提供跨节点高可用,仅用于开发与体验;生产环境请使用裸机/虚机 Ansible 部署 3 节点以上集群。

三、前置条件

服务器需满足:

  1. Docker 20.10+ 与 Docker Compose v2 已安装。
  2. 端口空闲:宿主机 80、443、5432、22(或自定义映射端口)未被占用。
  3. 资源:至少 1 核 CPU、2GB 内存、20GB 磁盘。
docker --version
docker compose version
free -h
df -h /

四、部署步骤

4.1 获取编排文件

Pigsty 官方仓库的 docker/ 目录提供了 docker-compose.yml、Makefile 与 .env。克隆仓库并进入 docker 目录:

git clone https://github.com/pgsty/pigsty.git
cd pigsty/docker

说明:如果服务器无法直连 GitHub,可走代理 https://192.168.1.62:7897 克隆,或直接从 Release 下载 pigsty-v4.5.0.tar.gz 解压。

4.2 配置端口与版本

.env 文件控制 docker 镜像版本与端口映射,可按需修改:

cat .env

回显:

PIGSTY_VERSION=v4.5.0
PIGSTY_SSH_PORT=2222
PIGSTY_HTTP_PORT=8080
PIGSTY_HTTPS_PORT=8443
PIGSTY_PG_PORT=5432

若宿主机 8080 被占用,修改 PIGSTY_HTTP_PORT 即可(如改为 8140)。

4.3 启动实例

make up

回显(节选):

 Container pigsty  Creating
 Container pigsty  Created
 Container pigsty  Starting
 Container pigsty  Started

实例启动后,内部 systemd 会拉起全部服务。等待约 10 秒,确认 systemd 就绪:

docker exec pigsty systemctl is-system-running

回显:

running

4.4 生成配置(含随机密码)

make config

该命令等价于在实例内执行 ./configure -c docker -g --ip 127.0.0.1,生成 pigsty.yml 配置并随机生成所有密码。回显(节选):

configure pigsty v4.5.0 begin
[ OK ] region = default
[ OK ] kernel  = Linux
[ OK ] machine = x86_64
[ OK ] package = deb,apt
[ OK ] vendor  = debian (Debian GNU/Linux)
[ OK ] version = 13 (13)
[ OK ] sudo = root ok
[ OK ] ssh = root@127.0.0.1 ok
[ OK ] primary_ip = 127.0.0.1 (from argument)
[ OK ] mode = docker (manually set)
[ OK ] generating random passwords...
    grafana_admin_password  : YGjgMRQRZKdrt79QaDoHbLqe
    pg_admin_password       : aEOXT5W3Td2JTrFAAXgycElT
    pg_monitor_password     : A5E3PHes0Rxc84q4WdWQdY6B
    pg_replication_password : pN2C56sfHgBW59t2YihqBLnF
    patroni_password        : 4r5x2vXBmGWxboHpm0GV8OKO
    haproxy_admin_password  : NZ8Biq7KSLmPzZyRjvx1MqTf
    minio_secret_key        : xnbgUaGkxC3MOOD9299VeEIQ
    etcd_root_password      : XiURY3GazvzRn8XXrXqja10D
[ OK ] random passwords generated, check and save them
[ OK ] ansible = ready
[ OK ] pigsty configured
proceed with ./deploy.yml

💡 请妥善保存这些随机密码。可用 make pass 随时查看。

4.5 执行部署

make deploy

该命令在实例内执行 ./deploy.yml(Ansible playbook),完成节点初始化、基础设施(Etcd、Grafana、VictoriaMetrics 等)、PostgreSQL、Patroni、HAProxy、pgBouncer、pg_exporter、备份等全部组件的安装与配置。

回显尾部(成功标志):

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=267  changed=118  unreachable=0    failed=0    skipped=113  rescued=0    ignored=0

failed=0 表示部署成功。

4.6 一键启动(up + config + deploy)

如果是全新环境,也可以直接用一条命令完成全部步骤:

make launch

等价于依次执行 make up → make config → make deploy。

五、验证部署

5.1 验证 PostgreSQL

PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -p 5432 -U dbuser_dba -d postgres -c "SELECT version();"

回显:

                                                      version
--------------------------------------------------------------------------------------------------------------------
 PostgreSQL 18.6 (Debian 18.6-1.pgdg13+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
(1 row)

5.2 验证数据库列表

PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -p 5432 -U dbuser_dba -d postgres -c "\l"

回显(节选):

   Name    |  Owner   | Encoding | Collate |  Ctype  | Locale  |    Access privileges
-----------+----------+----------+---------+---------+---------+-------------------------
 meta      | postgres | UTF8     | C.UTF-8 | C.UTF-8 | C.UTF-8 | =Tc/postgres           +
           |          |          |         |         |         | postgres=CTc/postgres  +
           |          |          |         |         |         | dbrole_admin=C/postgres
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 | C.UTF-8 |
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | C.UTF-8 | =c/postgres            +
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | C.UTF-8 | =Tc/postgres           +
(4 rows)

5.3 验证 Patroni 集群状态

pig patroni list

回显:

+ Cluster: pgsql (7700577068637988872) --+----+-------------+-----+------------+-----+-------------------+
| Member  | Host      | Role   | State   | TL | Receive LSN | Lag | Replay LSN | Lag | Tags              |
+---------+-----------+--------+---------+----+-------------+-----+------------+-----+-------------------+
| pgsql-1 | 127.0.0.1 | Leader | running |  1 |             |     |            |     | clonefrom: true   |
|         |           |        |         |    |             |     |            |     | conf: oltp.yml    |
|         |           |        |         |    |             |     |            |     | spec: 6C.24G.443G |
|         |           |        |         |    |             |     |            |     | version: '18'     |
+---------+-----------+--------+---------+----+-------------+-----+------------+-----+-------------------+

5.4 验证监控服务

systemctl is-active grafana-server pg_exporter haproxy vmetrics vlogs alertmanager

回显:

active
active
active
active
active
active

5.5 验证 Web 门户

浏览器访问 http://<宿主机IP>:8080,应返回 Pigsty Web 门户首页(HTTP 200)。Grafana 面板地址为 http://<宿主机IP>:8080/ui,用户名 admin,密码为 grafana_admin_password。

六、数据持久化说明

实例内 /data 目录通过 bind mount 挂载到宿主机 ./data,包含:

  • /pg/data:PostgreSQL 数据目录
  • /var/lib/backrest:pgBackRest 备份
  • /var/lib/victoria-metrics:监控指标数据
  • /var/log:各类服务日志

销毁实例后重建,数据不会丢失(只要不删除 ./data 目录)。

七、环境变量表

.env 文件中的变量:

变量默认值说明
PIGSTY_VERSIONv4.5.0docker 镜像版本,与 Pigsty 版本一致
PIGSTY_SSH_PORT2222宿主机 SSH 端口映射到实例 22
PIGSTY_HTTP_PORT8080宿主机 HTTP 端口映射到实例 80
PIGSTY_HTTPS_PORT8443宿主机 HTTPS 端口映射到实例 443
PIGSTY_PG_PORT5432宿主机 PG 端口映射到实例 5432

八、配置参数说明

Pigsty 的全部配置集中在实例内 /root/pigsty/pigsty.yml(Ansible inventory)。常用配置项:

配置项默认值说明
versionv4.5.0Pigsty 版本标识
admin_ip127.0.0.1管理节点 IP
pg_version18PostgreSQL 主版本号(14-18 可选)
pg_confoltp.ymlPG 调优模板(oltp/olap/tiny/crit)
pg_extensions[pg18-main, ...]预装扩展组列表
pg_users见配置声明式创建的数据库用户
pg_databases见配置声明式创建的数据库
node_tuneoltp节点调优模式
grafana_admin_password随机生成Grafana 管理员密码
pg_admin_password随机生成PG 管理员密码

完整配置参数说明见 《Pigsty v4.5.0 配置参数详解》。

九、配置文件挂载

如需持久化自定义配置,可在 docker-compose.yml 中额外挂载 pigsty.yml:

volumes:
  - ./data:/data
  - ./pigsty.yml:/root/pigsty/pigsty.yml

修改宿主机上的 pigsty.yml 后,在实例内重新执行 ./deploy.yml 即可收敛配置。

十、等价 docker run

不用 Compose 时,也可直接 docker run:

docker run -d --privileged \
  --name pigsty \
  --hostname pigsty \
  -v "$(pwd)/data:/data" \
  -p 2222:22 \
  -p 8080:80 \
  -p 8443:443 \
  -p 5432:5432 \
  pgsty/pigsty:v4.5.0

启动后进入实例执行配置与部署:

docker exec -it pigsty /bin/bash -l
cd /root/pigsty
./configure -c docker -g --ip 127.0.0.1
./deploy.yml

十一、常用运维命令

操作命令
启动实例make up
停止实例make stop
重启实例make restart
停止并删除实例make down
进入实例make exec
查看密码make pass
查看实例日志make log
重新拉取 docker 镜像make pull
重新部署(配置变更后)make deploy

十二、常见问题

12.1 部署失败:usermod: user postgres is currently used by process

现象:./deploy.yml 在 pgsql 角色执行 usermod 修改 postgres 用户属性时报错,提示 postgres 用户正被某个进程占用。

原因:上一次部署已启动 pg_exporter(以 postgres 用户运行),导致 usermod 无法修改该用户。

解决:停止 pg_exporter 与所有 postgres 用户进程,再重跑部署:

systemctl stop pg_exporter
pkill -u postgres
cd /root/pigsty && ./deploy.yml

12.2 部署失败:postgresql-18-duckdb-fdw : Conflicts: postgresql-18-pg-duckdb

现象:install postgres extensions 任务失败,APT 报 postgresql-18-duckdb-fdw 与 postgresql-18-pg-duckdb 包冲突。

原因:Pigsty v4.5.0 的 pg18-olap 扩展组同时包含这两个互相冲突的 DuckDB 扩展包,是已知打包问题。

解决:从 pigsty.yml 的 pg_extensions 列表中移除 pg18-olap 组,重新部署:

sed -i 's/,pg18-olap//g' /root/pigsty/pigsty.yml
cd /root/pigsty && ./deploy.yml

说明:移除后只是不装 OLAP 类扩展(Citus、DuckDB、Hydra 等),核心 PG 与监控栈不受影响。如需 Citus 等扩展,可部署后单独 pig install postgresql-18-citus 安装。

12.3 make pass 看不到密码

原因:pigsty.yml 尚未生成(未执行 make config),或密码字段被注释。

解决:先执行 make config 生成配置,再 make pass。

12.4 Grafana 面板无数据

排查:

  1. 确认 pg_exporter 服务正常:systemctl is-active pg_exporter
  2. 确认 VictoriaMetrics 正在采集:curl -s http://127.0.0.1:8428/api/v1/query?query=up | head
  3. 确认 Grafana 数据源已加载:登录 Grafana → Connections → Data sources,应有 pgsql-127.0.0.1

十三、卸载与清理

make down          # 停止并删除实例
rm -rf ./data      # 删除数据目录(可选,会丢失所有数据)

如需彻底清理 docker 镜像:

docker rmi pgsty/pigsty:v4.5.0

十四、参考链接