# 选择实验环境

LLMS 索引： [llms.txt](/llms.txt)

---

L1 的目标不是模拟生产，而是给 ch01～ch18 一个身份稳定、可以反复创建对象、能够
观察 PostgreSQL 与 Pigsty 的实验落点。选型优先保证**隔离与可恢复**，再追求便利。

## 0.1.1 本地虚拟机、开发服务器与已有 Pigsty 环境 {#item-0-1-1}

### 三种可接受入口

| 入口 | 适合 | 优点 | 必须处理 |
|---|---|---|---|
| 本地 Linux VM | 个人学习、可反复重建 | 隔离清楚、snapshot 方便 | 内存/磁盘、宿主休眠、端口转发 |
| 独立开发服务器 | 团队共享、长时间运行 | 资源稳定、远程可达 | owner、并发实验、配额、清理 |
| 已有 Pigsty dev/test | 已有标准环境 | 快速进入正文 | 版本、权限、数据/流量、作用域 |

macOS/Windows 宿主推荐在 Linux VM 中部署。Pigsty 管理 Linux 服务、package、filesystem
和 network；把它直接改写成容器教程会改变本书实验边界。WSL 可用于体验，但涉及
systemd、网络、存储与多节点演练时要重新验证。

### 环境接受表

```yaml
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 环境只有在以下问题都得到肯定回答后才可复用：

```text
我能指认 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 沙箱的最低资源、网络与磁盘要求 {#item-0-1-2}

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 章](/capacity-benchmarking/) 才讨论有证据的容量结论。

### 安装前采样

```bash
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 无法安全写入。

### 网络合同

```text
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 exposure
```

NAT 模式通常足够；只有需要从宿主访问 Web UI/数据库时才配置明确端口转发或 host-only
网络。记录从哪个 source CIDR 允许访问，避免使用 `0.0.0.0/0`。

## 0.1.3 云主机的防火墙、入口与费用边界 {#item-0-1-3}

### 最小暴露

云 security group 默认 deny inbound，只从操作者固定 IP、VPN 或 bastion 允许 SSH。
Web UI 优先通过 VPN/SSH tunnel；确需 443 时限制来源并配置 TLS。PostgreSQL/服务端口
只对明确应用网络开放。

不要向公网开放：

```text
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 和预算告警。

### 费用清单

```text
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

以下情况先解决，不继续：

```text
目标可能承载生产数据/流量
OS/architecture 不在当前支持矩阵
磁盘或内存低于接受档
时间/DNS/package source 异常
公网入口无法限制
没有恢复或重建路径
无法保护 inventory 与 CA key
```

---

[返回本章目录](../) · [下一节：安装单节点 Pigsty 沙箱](../02/) ·
[查看全书目录](/toc/) · [查看索引中心](/indexes/)
