feat(single-node): 改 SQLite + 非特权 pangolin 用户 + 免 Docker(512MB 可跑)
为小内存机收尾单机栈,已在 racknerd(107.172.55.251)实跑验证通过: - 数据库:MySQL(docker)→ SQLite 文件(DB_DRIVER=sqlite);Redis 改 apt 原生 (免 Docker);依赖 redis-server/sqlite3/polkitd/sing-box 由 deploy.sh 自动装 - 运行身份:三 systemd 单元 User=root → User=pangolin;sing-box 经 AmbientCapabilities 绑 443;新增 polkit 规则让 pangolin 仅可重启 sing-box - 二进制:支持预置(机上无 go 时用交叉编译产物;SQLite 纯 Go 免 CGO) - 端口:REALITY 默认 443/tcp(对齐 bootstrap 防火墙);deploy.sh 放行 8080/tcp - 修 sing-box.service:ExecStart 按实际安装路径渲染(官方 .deb 在 /usr/bin) - Hy2 默认关闭:控制面尚未下发 Hy2 TLS 证书(handler_grpc.go 仅发 ListenPort) → 开启会 missing certificate;待补全证书后传 HY2_PORT=443 开启 - 删 docker-compose.yml;seed TRUE→1;README 同步 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
# 单节点全套部署(档 3 真实连接)
|
||||
# 单节点全套部署(真实连接,SQLite + 非特权用户)
|
||||
|
||||
一台全新 Ubuntu/Debian VPS 上跑 **整套** pangolin:MySQL + Redis + 控制面(HTTP
|
||||
API + gRPC agent 服务)+ 节点 agent + sing-box 数据面。客户端连这台 VPS 的公网
|
||||
IP,真实出网(出口 IP = VPS IP)。
|
||||
一台全新 Debian 12 VPS 上跑 **整套** pangolin:**SQLite(文件)+ Redis(apt)** + 控制面
|
||||
(HTTP API + gRPC agent 服务)+ 节点 agent + sing-box 数据面,**全部以非特权 `pangolin`
|
||||
用户运行,免 Docker**。客户端连这台 VPS 的公网 IP,真实出网(出口 IP = VPS IP)。
|
||||
|
||||
> 不碰 EC2 生产、不用本机出网。这套是独立的端到端验证环境。
|
||||
> 为小内存机(512MB)调优:SQLite 取代 MySQL、apt 原生 Redis 取代 docker 容器。
|
||||
> 配合 `deploy/bootstrap/`(系统加固/防火墙/监控)使用。
|
||||
|
||||
## 架构(一台机器内)
|
||||
|
||||
@@ -19,23 +20,37 @@ IP,真实出网(出口 IP = VPS IP)。
|
||||
│ │ connect → Hub.Push(Upsert dp_uuid) │
|
||||
│ ▼ (gRPC Subscribe 命令流, mTLS) │
|
||||
│ pangolin-agent ── 渲染 sing-box SERVER 配置 → systemctl restart │
|
||||
│ ▼ │
|
||||
│ sing-box VLESS+REALITY :11443 (+ Hysteria2 :443) → 直连出网 │
|
||||
│ MySQL :3306 (loopback) Redis :6379 (loopback) [docker] │
|
||||
│ ▼ (polkit 规则允许 pangolin 仅重启 sing-box) │
|
||||
│ sing-box VLESS+REALITY :443/tcp → 直连出网 │
|
||||
│ SQLite /var/lib/pangolin/pangolin.db Redis :6379 (apt, loopback) │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
(三服务均 User=pangolin;sing-box 经 AmbientCapabilities 绑 443)
|
||||
```
|
||||
|
||||
> ⚠️ **Hy2 默认关闭**:控制面尚未接线 Hy2 的 TLS 证书下发(`handler_grpc.go` 只发
|
||||
> ListenPort,不发 CertPath/KeyPath),开启会导致 sing-box `missing certificate`。
|
||||
> 待补全证书下发后,传 `HY2_PORT=443` 开启。当前数据面=REALITY(443/tcp)。
|
||||
|
||||
凭证天然自洽:connect 给客户端的 REALITY `uuid = dp_uuid`、Hy2 `password =
|
||||
DeriveHy2Password(dp_uuid, NODE_DERIVE_KEY)`;agent 渲染 server 配置时用 **同一**
|
||||
`NODE_DERIVE_KEY` 和 dp_uuid,两端一致。
|
||||
|
||||
## 部署(VPS 上一条命令)
|
||||
## 部署
|
||||
|
||||
前置:root、`docker`(含 compose v2)、`openssl`、`go`、`sing-box`(脚本会尝试自动装)。
|
||||
前置:root、`openssl`。`redis-server`/`sqlite3`/`polkitd`/`sing-box` 由 deploy.sh 自动装。
|
||||
二进制:机上有 `go` 则就地构建;**512MB 机器推荐别处交叉编译后预置**(无需机上装 Go):
|
||||
|
||||
```bash
|
||||
# 1. 把仓库 checkout 到 VPS(git clone 或 scp)
|
||||
# 2. 一键起全套(VPS_IP 不传则自动探测公网 IP)
|
||||
# 在开发机交叉编译(SQLite 纯 Go,免 CGO),scp 到 VPS 的 /usr/local/bin/
|
||||
cd server && for c in server agent nodectl migrate; do
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /tmp/p-$c ./cmd/$c
|
||||
done
|
||||
scp /tmp/p-server <vps>:/usr/local/bin/pangolin-server
|
||||
scp /tmp/p-agent <vps>:/usr/local/bin/pangolin-agent
|
||||
scp /tmp/p-migrate <vps>:/usr/local/bin/pangolin-migrate
|
||||
scp /tmp/p-nodectl <vps>:/usr/local/bin/nodectl
|
||||
|
||||
# scp 本目录到 VPS 的 <repo>/deploy/single-node/,再一键起(VPS_IP 不传则自动探测)
|
||||
sudo VPS_IP=<你的公网IP> bash deploy/single-node/deploy.sh
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user