279 lines
7.0 KiB
Markdown
279 lines
7.0 KiB
Markdown
# Deploy Layout
|
||
|
||
`deploy/` 目录按角色拆分为四套部署与测试入口:
|
||
|
||
- `server/`: 本仓库 RTR Server(`src/main.rs`)容器化部署
|
||
- `client/`: 本仓库 `rtr_debug_client` 容器化部署
|
||
- `frr/`: FRR 作为黑盒 RTR Client 的配置与 compose
|
||
|
||
---
|
||
|
||
## 0) Build and Run Scripts
|
||
|
||
`deploy/server/build-run.sh` 只管理 server,`deploy/client/build-run.sh` 只管理 debug client。两个脚本默认 action 都是 `up`,默认 mode 都是 `tcp`。
|
||
|
||
常用命令:
|
||
|
||
以下命令默认从仓库根目录执行。
|
||
|
||
```bash
|
||
chmod +x deploy/server/build-run.sh deploy/client/build-run.sh
|
||
./deploy/server/build-run.sh up --mode tcp
|
||
./deploy/client/build-run.sh up --mode tcp
|
||
./deploy/client/build-run.sh up --clients multi
|
||
./deploy/client/build-run.sh down
|
||
./deploy/server/build-run.sh down
|
||
```
|
||
|
||
常用参数:
|
||
|
||
| 参数/变量 | server | client | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `--mode base\|tcp\|tls\|ssh`, `MODE` | yes | yes | 选择 compose 模式,默认 `tcp`。 |
|
||
| `--clients single\|multi`, `CLIENTS` | no | yes | 单 client 或 5 client,默认 `single`。 |
|
||
| `--no-build`, `BUILD=0` | yes | yes | 只运行已有镜像,不执行 compose build。 |
|
||
| `--server-image TAG`, `SERVER_IMAGE` | yes | no | server 镜像名;会传给 compose 的 `RPKI_RTR_SERVER_IMAGE`。 |
|
||
| `--client-image TAG`, `CLIENT_IMAGE` | no | yes | client 镜像名;会传给 compose 的 `RPKI_RTR_CLIENT_IMAGE`。 |
|
||
| `--platform VALUE`, `TARGET_PLATFORM` | yes | yes | `buildx` 目标平台,默认 `linux/arm64`。 |
|
||
| `--push`, `BUILDX_PUSH=1` | yes | yes | `buildx` 构建后推送到 registry;不设置时加载到本地 Docker。 |
|
||
| `--skip-base-pull`, `SKIP_BASE_IMAGE_PULL=1` | yes | yes | 跳过 buildx 前的基础镜像预拉取。 |
|
||
|
||
支持的 action 包括 `up`、`build`、`buildx`、`rebuild`、`down`/`stop`、`restart`、`logs`、`ps`。完整帮助见:
|
||
|
||
```bash
|
||
./deploy/server/build-run.sh --help
|
||
./deploy/client/build-run.sh --help
|
||
```
|
||
|
||
### x86 Build, ARM Deploy
|
||
|
||
x86 开发机上用 Docker Buildx 分别构建 ARM server/client 镜像。不加 `--push` 时,脚本会把单平台镜像加载到本地 Docker,随后可用 `docker save` 打包传到 ARM 机器。buildx 前会自动按目标平台预拉取 `rust:1.89-bookworm` 和 `debian:bookworm-slim`。
|
||
|
||
```bash
|
||
docker buildx create --use --name rpki-builder
|
||
docker buildx inspect --bootstrap
|
||
|
||
./deploy/server/build-run.sh buildx \
|
||
--platform linux/arm64 \
|
||
--server-image rpki-rtr:arm64
|
||
|
||
./deploy/client/build-run.sh buildx \
|
||
--platform linux/arm64 \
|
||
--client-image rpki-rtr-debug-client:arm64
|
||
|
||
mkdir -p dist/images
|
||
docker save rpki-rtr:arm64 -o dist/images/rpki-rtr-arm64.tar
|
||
docker save rpki-rtr-debug-client:arm64 -o dist/images/rpki-rtr-debug-client-arm64.tar
|
||
```
|
||
|
||
把 tar 包传到 ARM 部署机:
|
||
|
||
```bash
|
||
scp dist/images/*.tar user@arm-host:/tmp/
|
||
```
|
||
|
||
ARM 部署机上加载镜像并运行,不再本地构建:
|
||
|
||
```bash
|
||
docker load -i /tmp/rpki-rtr-arm64.tar
|
||
docker load -i /tmp/rpki-rtr-debug-client-arm64.tar
|
||
|
||
SERVER_IMAGE=rpki-rtr:arm64 \
|
||
BUILD=0 ./deploy/server/build-run.sh up --mode tcp
|
||
|
||
CLIENT_IMAGE=rpki-rtr-debug-client:arm64 \
|
||
BUILD=0 ./deploy/client/build-run.sh up --mode tcp
|
||
```
|
||
|
||
如果不使用脚本,也可以通过 compose 环境变量指定镜像:
|
||
|
||
```bash
|
||
export RPKI_RTR_SERVER_IMAGE=rpki-rtr:arm64
|
||
docker compose --env-file deploy/server/.env \
|
||
-f deploy/server/docker-compose.tcp.yml up -d --no-build
|
||
```
|
||
|
||
---
|
||
|
||
## 1) Server
|
||
|
||
路径:
|
||
- `deploy/server/Dockerfile`
|
||
- `deploy/server/docker-compose.yml`
|
||
- `deploy/server/DEPLOYMENT.md`
|
||
|
||
单独 build 镜像:
|
||
|
||
```bash
|
||
docker build -f deploy/server/Dockerfile -t rpki-rtr:latest .
|
||
```
|
||
|
||
启动:
|
||
|
||
```bash
|
||
docker compose -f deploy/server/docker-compose.yml up -d --build
|
||
```
|
||
|
||
停止:
|
||
|
||
```bash
|
||
docker compose -f deploy/server/docker-compose.yml down
|
||
```
|
||
|
||
日志:
|
||
|
||
```bash
|
||
docker compose -f deploy/server/docker-compose.yml logs -f rpki-rtr
|
||
```
|
||
|
||
报告文件:
|
||
|
||
- `report/rtr-source-*.json`:CCR/SLURM source、fingerprint、refresh 状态、数据质量、cache snapshot/delta 统计。
|
||
- `report/rtr-clients-*.json`:client 连接数和连接方式统计,启动时和连接变化时写入。
|
||
- `report/rtr-runtime-*.json`:进程 RSS、服务状态、当前生效 runtime configuration,启动时和周期性写入。
|
||
|
||
Admin config 接口默认关闭。需要运行中动态修改 `max_delta`、delta 裁剪策略、refresh/report interval、timezone 或 RTR timing 时,设置:
|
||
|
||
```env
|
||
RPKI_RTR_ADMIN_ADDR=127.0.0.1:8323
|
||
RPKI_RTR_ADMIN_TOKEN=change-me
|
||
```
|
||
|
||
调用示例:
|
||
|
||
```bash
|
||
curl -X POST http://127.0.0.1:8323/admin/rtr/config \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer change-me" \
|
||
-d '{"max_delta": 6, "prune_delta_by_snapshot_size": true}'
|
||
```
|
||
|
||
完整 API 说明见 `docs/rtr-admin-api.md`,更完整的 server 配置见 `deploy/server/DEPLOYMENT.md`。
|
||
|
||
---
|
||
|
||
## 2) Debug Client
|
||
|
||
路径:
|
||
- `deploy/client/Dockerfile`
|
||
- `deploy/client/docker-compose.yml`
|
||
- `deploy/client/docker-compose.clients.yml`
|
||
|
||
单独 build 镜像:
|
||
|
||
```bash
|
||
docker build -f deploy/client/Dockerfile -t rpki-rtr-debug-client:latest .
|
||
```
|
||
|
||
单实例启动(交互调试):
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.yml up --build
|
||
```
|
||
|
||
单实例停止:
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.yml down
|
||
```
|
||
|
||
单实例日志:
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.yml logs -f rtr-debug-client
|
||
```
|
||
|
||
多实例启动(5 个并发 client):
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.clients.yml up -d
|
||
```
|
||
|
||
多实例停止:
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.clients.yml down
|
||
```
|
||
|
||
多实例日志:
|
||
|
||
```bash
|
||
docker compose -f deploy/client/docker-compose.clients.yml logs -f
|
||
```
|
||
|
||
---
|
||
|
||
## 3) FRR Client
|
||
|
||
路径:
|
||
- `deploy/frr/docker-compose.yml`
|
||
- `deploy/frr/daemons.example`
|
||
- `deploy/frr/frr.conf.example`
|
||
- `deploy/frr/README.md`
|
||
- `deploy/frr/README.zh.md`
|
||
|
||
启动:
|
||
|
||
```bash
|
||
docker compose -f deploy/frr/docker-compose.yml up -d
|
||
```
|
||
|
||
检查连接:
|
||
|
||
```bash
|
||
docker exec -it frr-rpki-client vtysh -c "show rpki cache-connection"
|
||
docker exec -it frr-rpki-client vtysh -c "show rpki prefix-table"
|
||
```
|
||
|
||
停止:
|
||
|
||
```bash
|
||
docker compose -f deploy/frr/docker-compose.yml down
|
||
```
|
||
|
||
日志:
|
||
|
||
```bash
|
||
docker compose -f deploy/frr/docker-compose.yml logs -f frr-rpki-client
|
||
```
|
||
|
||
---
|
||
|
||
## 4) BIRD Client
|
||
|
||
路径:
|
||
- `deploy/bird/Dockerfile`
|
||
- `deploy/bird/docker-compose.yml`
|
||
- `deploy/bird/docker-compose.tls.yml`
|
||
- `deploy/bird/bird.conf.example`
|
||
- `deploy/bird/bird.conf.tls.example`
|
||
- `deploy/bird/README.md`
|
||
- `deploy/bird/README.zh.md`
|
||
|
||
启动:
|
||
```bash
|
||
docker compose -f deploy/bird/docker-compose.yml up --build
|
||
```
|
||
|
||
观察活动:
|
||
|
||
```bash
|
||
docker logs -f bird-rpki-client
|
||
```
|
||
|
||
停止:
|
||
```bash
|
||
docker compose -f deploy/bird/docker-compose.yml down
|
||
```
|
||
|
||
日志:
|
||
```bash
|
||
docker compose -f deploy/bird/docker-compose.yml logs -f bird-rpki-client
|
||
```
|
||
|
||
TLS/mTLS:
|
||
```bash
|
||
docker compose -f deploy/bird/docker-compose.yml -f deploy/bird/docker-compose.tls.yml up --build
|
||
docker logs -f bird-rpki-client
|
||
```
|