# 要求

在不同环境中部署 FluxiQ PIX 的硬件、软件和证书要求。

## 前提条件

- 了解目标部署环境 (Docker、Kubernetes 或裸机)
- 访问网络基础设施文档
- 了解您机构的 BACEN 参与者状态

## 硬件要求

### 开发 / 测试

| 资源 | 最低 | 推荐 |
|------|------|------|
| CPU | 4 核 | 8 核 |
| 内存 | 8 GB | 16 GB |
| 磁盘 | 50 GB SSD | 100 GB SSD |
| 网络 | 100 Mbps | 1 Gbps |

### 生产 (单节点)

| 资源 | 最低 | 推荐 |
|------|------|------|
| CPU | 8 核 | 16 核 |
| 内存 | 32 GB | 64 GB |
| 磁盘 | 500 GB NVMe | 1 TB NVMe |
| 网络 | 1 Gbps | 10 Gbps |

### 生产 (Kubernetes 集群)

| 组件 | 节点数 | 每节点 | 总计 |
|------|--------|--------|------|
| 应用 | 3 | 8 CPU / 32 GB RAM | 24 CPU / 96 GB |
| PostgreSQL | 2 (主 + 副本) | 8 CPU / 32 GB RAM | 16 CPU / 64 GB |
| NATS | 3 (集群) | 4 CPU / 8 GB RAM | 12 CPU / 24 GB |
| Redis | 1 (或 Sentinel) | 2 CPU / 8 GB RAM | 2 CPU / 8 GB |

## 软件要求

| 组件 | 版本 | 用途 |
|------|------|------|
| Elixir | 1.17.x | 后端运行时 |
| Erlang/OTP | 27.x | VM 和并发 |
| PostgreSQL | 16.x | 主数据库 |
| Redis | 7.x | 缓存、速率限制、Token 黑名单 |
| NATS Server | 2.10.x | JetStream 消息传递 |
| Docker | 24.x+ | 容器运行时 |
| Kubernetes | 1.28+ | 编排 (如适用) |
| Node.js | 20.x LTS | 仅前端构建 |
| nginx | 1.25+ | 前端反向代理 |

::: warning ELIXIR 版本
Elixir 1.19 不存在。最新稳定版本是 OTP 27 上的 1.17.x。请勿尝试使用高于 1.17 的版本。
:::

## 网络要求

### 端口

| 端口 | 协议 | 方向 | 用途 |
|------|------|------|------|
| 4001 | TCP | 内部 | Dict Service HTTP |
| 4002 | TCP | 内部 | SPI Service HTTP |
| 4003 | TCP | 内部/外部 | Settlement Service (API 网关) |
| 5432 | TCP | 内部 | PostgreSQL |
| 6379 | TCP | 内部 | Redis |
| 4222 | TCP | 内部 | NATS 客户端连接 |
| 6222 | TCP | 内部 | NATS 集群路由 |
| 16522 | TCP | 出站 | BACEN DICT API (同态) |
| 17522 | TCP | 出站 | BACEN SPI 辅助 (同态) |
| 443 | TCP | 入站 | HTTPS (前端 + API) |

### 防火墙规则

```
# 内部服务 (允许集群内)
ALLOW TCP 4001-4003 FROM internal_network
ALLOW TCP 5432 FROM application_nodes
ALLOW TCP 6379 FROM application_nodes
ALLOW TCP 4222 FROM application_nodes

# BACEN 连接 (仅出站)
ALLOW TCP 16522 TO dict-h.pi.rsfn.net.br
ALLOW TCP 17522 TO icom-sec-h.pi.rsfn.net.br

# 公共访问 (通过负载均衡器)
ALLOW TCP 443 FROM 0.0.0.0/0
```

## 证书要求

### ICP-Brasil 证书 (BACEN)

| 证书 | 类型 | 用途 | 有效期 |
|------|------|------|--------|
| CPIC | A1 或 A3 | 与 BACEN 的 mTLS 客户端认证 | 1-3 年 |
| CPIA | A1 或 A3 | XMLDSig 消息签名 (RSA-SHA256) | 1-3 年 |
| BACEN CA | 根 CA | 服务器证书验证 | 不适用 |

::: tip 证书格式
FluxiQ PIX 期望 PEM 编码的证书。如需从 PKCS#12 转换：
```bash
# 提取证书
openssl pkcs12 -in cert.p12 -clcerts -nokeys -out cpic.pem
# 提取私钥
openssl pkcs12 -in cert.p12 -nocerts -out cpic-key.pem
```
:::

### TLS 证书 (HTTPS)

生产环境需要为您的域名获取 TLS 证书。选项包括：
- Let's Encrypt (免费，K8s 上通过 cert-manager 自动化)
- 商业 CA (DigiCert、GlobalSign)
- 内部 PKI (本地部署)

## 数据库要求

| 参数 | 开发 | 生产 |
|------|------|------|
| `max_connections` | 200 | 6,000+ |
| `shared_buffers` | 256 MB | 8 GB |
| `effective_cache_size` | 1 GB | 24 GB |
| `work_mem` | 16 MB | 64 MB |
| 所需扩展 | `uuid-ossp`、`pg_trgm` | `uuid-ossp`、`pg_trgm` |

## 预期结果

审查这些要求后，您可以：

- 为目标部署环境确定基础设施规模
- 规划包括 BACEN RSFN 访问在内的网络连接
- 采购所需的 ICP-Brasil 证书
- 使用适当的参数配置 PostgreSQL 和 Redis
