# RoboCloud LocalProxy v13.4 Docker 安装指南

本指南适用于 `13.4.0-docker.1` 普通 TAR.GZ 安装包。安装包包含 LocalProxy、共享 Host、Mihomo、安装脚本、Dockerfile 和 Compose 示例，不需要下载或导入预制镜像。Docker 运行层在宿主机本地构建。

## 1. 选择安装包

- x86_64 / AMD64：`RoboCloudLocalProxy-Docker-linux-amd64-v13.4.0-docker.1.tar.gz`
- ARM64 / AArch64：`RoboCloudLocalProxy-Docker-linux-arm64-v13.4.0-docker.1.tar.gz`

宿主机需要 Linux、systemd、Docker Engine 和 Docker Compose v2。宿主机架构必须与安装包一致。

## 2. 解压并安装宿主机 Host

以 AMD64 为例：

```bash
tar -xzf RoboCloudLocalProxy-Docker-linux-amd64-v13.4.0-docker.1.tar.gz
cd RoboCloudLocalProxy-Docker-linux-amd64-v13.4.0-docker.1
sudo ./install-host.sh
sudo systemctl status robocloud-proxy-host --no-pager
```

Host 负责所有容器的共享 Mihomo 和本地代理端口。控制 socket 位于 `/run/robocloud-proxy-host/control.sock`，代理端口只监听 `127.0.0.1`。

## 3. 在宿主机本地构建 Docker 运行层

AMD64：

```bash
docker build --build-arg TARGETARCH=amd64 -t robocloud-local-proxy:13.4.0-docker.1 .
```

ARM64：

```bash
docker build --build-arg TARGETARCH=arm64 -t robocloud-local-proxy:13.4.0-docker.1 .
```

这里不会下载或导入 RoboCloud 预制镜像；Docker 只使用安装包内的程序生成本机运行层。

## 4. 创建第一个容器实例

每个容器必须使用不同的实例名、令牌文件、状态目录和管理端口：

```bash
mkdir -p state/user01 secrets
sudo robocloud-proxy-host token --instance inst_user01 > secrets/inst_user01.token
chmod 600 secrets/inst_user01.token
cp compose.example.yml compose.yml
```

默认示例使用：

- 实例名：`inst_user01`
- 管理页面：`127.0.0.1:18001`
- 状态目录：`./state/user01`
- 令牌：`./secrets/inst_user01.token`

启动：

```bash
docker compose up -d
docker compose ps
curl --fail http://127.0.0.1:18001/api/state
```

浏览器打开 `http://127.0.0.1:18001`，登录 RoboCloud 后即可查看和选择账户内全部有效套餐。容器不会尝试打开图形浏览器。

如果服务部署在远程服务器，通过 SSH 转发访问管理页：

```bash
ssh -L 18001:127.0.0.1:18001 user@server
```

然后在本机浏览器打开 `http://127.0.0.1:18001`。

## 5. 增加更多容器

复制 Compose 服务块，并同时修改以下四项：

1. 管理端口，例如 `18002`。
2. 实例名，例如 `inst_user02`。
3. 状态目录，例如 `./state/user02`。
4. 令牌文件，例如 `./secrets/inst_user02.token`。

创建新令牌：

```bash
sudo robocloud-proxy-host token --instance inst_user02 > secrets/inst_user02.token
chmod 600 secrets/inst_user02.token
```

禁止两个容器共用同一个实例名或令牌。

## 6. 更新到新的 13.4 安装包

保留 `state/` 与 `secrets/`，然后执行：

```bash
docker compose down
sudo ./install-host.sh
docker build --build-arg TARGETARCH=amd64 -t robocloud-local-proxy:13.4.0-docker.1 .
docker compose up -d
```

ARM64 把 `TARGETARCH` 改为 `arm64`。账户登录状态和本地选择保存在 `state/`，更新时不要删除该目录。

## 7. 故障检查

```bash
sudo systemctl status robocloud-proxy-host --no-pager
sudo journalctl -u robocloud-proxy-host -n 100 --no-pager
docker compose ps
docker compose logs --tail=100
curl --fail http://127.0.0.1:18001/api/state
```

若管理页可打开但没有本地端口，先确认 Host 正常、socket 已挂载、实例名和令牌对应，然后在页面重新启动所选线路。

## 8. 卸载

```bash
docker compose down
sudo ./uninstall-host.sh
```

卸载脚本保留 `/var/lib/robocloud-proxy-host`，`state/` 与 `secrets/` 也不会自动删除。确认不再需要后再手动处理这些数据。

