0.1 选择实验环境
L1 的目标不是模拟生产,而是给 ch01~ch18 一个身份稳定、可以反复创建对象、能够 观察 PostgreSQL 与 Pigsty 的实验落点。选型优先保证隔离与可恢复,再追求便利。
0.1.1 本地虚拟机、开发服务器与已有 Pigsty 环境
三种可接受入口
| 入口 | 适合 | 优点 | 必须处理 |
|---|---|---|---|
| 本地 Linux VM | 个人学习、可反复重建 | 隔离清楚、snapshot 方便 | 内存/磁盘、宿主休眠、端口转发 |
| 独立开发服务器 | 团队共享、长时间运行 | 资源稳定、远程可达 | owner、并发实验、配额、清理 |
| 已有 Pigsty dev/test | 已有标准环境 | 快速进入正文 | 版本、权限、数据/流量、作用域 |
macOS/Windows 宿主推荐在 Linux VM 中部署。Pigsty 管理 Linux 服务、package、filesystem 和 network;把它直接改写成容器教程会改变本书实验边界。WSL 可用于体验,但涉及 systemd、网络、存储与多节点演练时要重新验证。
环境接受表
environment_id: pg36-l1-...
owner: ...
purpose: book-labs
production_data: false
production_traffic: false
shared_users: [...]
rebuild_source: vm-image-or-inventory
snapshot_or_backup: ...
expires_at: ...
network_boundary: ...已有 Pigsty 环境只有在以下问题都得到肯定回答后才可复用:
我能指认 exact node/cluster/database/role 吗?
它没有生产数据、生产流量和真实 secret 吗?
我有权创建和清理本书对象吗?
实验负载不会伤害其他用户吗?
失败后能恢复或重建吗?
版本差异已记录吗?任一答案不明确,就新建 L1。能登录一台机器不等于获得数据库故障注入、服务重启或 数据清理授权。
命名与 snapshot
为 VM、hostname、SSH alias 和 evidence 使用 pg36-l1 前缀,避免与生产式名字混淆。
在全新 OS、Pigsty 安装完成、重要 extension 安装后分别保留 snapshot;记录 snapshot
identity 和创建时间。snapshot 不是 backup 的替代,但适合恢复教学环境。
0.1.2 L1 沙箱的最低资源、网络与磁盘要求
Pigsty 官方单节点 quick start 可以从 1 vCPU / 2 GiB 起步;这只表示能完成基础部署。
本书 L1 同时运行 PostgreSQL、监控栈并执行查询/扩展实验,采用更保守档位:
| 档位 | CPU | 内存 | 可用磁盘 | 用途 |
|---|---|---|---|---|
| 安装下限 | 1 vCPU | 2 GiB | 20 GiB | 只验证 quick start,可能发生内存/等待压力 |
| 本书最低 | 2 vCPU | 4 GiB | 40 GiB | ch01~ch14 的小规模 fixture |
| 推荐 | 4 vCPU | 8 GiB | 80 GiB | 搜索、时空、分析 PoC 与舒适监控 |
这些是教学资源档,不是生产 sizing。不同架构、磁盘、extension 和宿主 overcommit 会 改变表现;第 26 章 才讨论有证据的容量结论。
安装前采样
uname -a
cat /etc/os-release
getconf _NPROCESSORS_ONLN
awk '/MemTotal/ {print}' /proc/meminfo
df -hT /
ip -brief address
ip route
timedatectl status不要只看虚拟磁盘标称容量;确认 filesystem 可用空间和 inode。扩展 package、监控 retention、WAL、backup、fixture 与 evidence 都会增长。L1 的磁盘满也可能让 PostgreSQL 无法安全写入。
网络合同
stable hostname and address inside the lab
SSH from the operator workstation
package/repository reachability or exact offline package
working DNS and time synchronization
no overlap with production/private routes
no public database exposureNAT 模式通常足够;只有需要从宿主访问 Web UI/数据库时才配置明确端口转发或 host-only
网络。记录从哪个 source CIDR 允许访问,避免使用 0.0.0.0/0。
0.1.3 云主机的防火墙、入口与费用边界
最小暴露
云 security group 默认 deny inbound,只从操作者固定 IP、VPN 或 bastion 允许 SSH。 Web UI 优先通过 VPN/SSH tunnel;确需 443 时限制来源并配置 TLS。PostgreSQL/服务端口 只对明确应用网络开放。
不要向公网开放:
5432 / 6432 / 5433 / 5434 / 5436 / 5438
Patroni API and DCS
Grafana/Victoria/Alertmanager/admin endpoints
node/exporter/backup metrics端口表随配置变化,以本地 inventory/rendered config 为准。只关闭 OS firewall 而依赖 云 security group,或反过来,都会制造单层防护。
凭据与主机
- 使用普通管理用户 +
sudo,不以root/postgres作为日常 SSH 用户; - SSH 使用 key,限制 source,关闭不需要的密码登录;
./configure -g生成随机密码,保护pigsty.yml;- 保护 Pigsty CA private key,不复制进聊天、工单或 Git;
- 教学数据保持合成,不上传客户 dump;
- 设置资源 tag、owner、expiration 和预算告警。
费用清单
compute uptime
system/data/backup disk and snapshots
public IPv4
egress and cross-zone traffic
object storage/API requests
retained image and unattached volume停止 VM 可能仍收磁盘、snapshot 与 IP 费用;删除 VM 可能同时删除唯一 evidence。实验 结束先导出所需的去敏小型 evidence,再按云平台的 exact resource ID 清点。不要在 本书中提供一条通用递归删除命令。
进入安装前的 stop line
以下情况先解决,不继续:
目标可能承载生产数据/流量
OS/architecture 不在当前支持矩阵
磁盘或内存低于接受档
时间/DNS/package source 异常
公网入口无法限制
没有恢复或重建路径
无法保护 inventory 与 CA key