# 服务端 Docker 镜像交付说明 这份说明用于把 SimCAE 自动升级/崩溃上报服务端交付给开发组或部署人员。 ## 1. 要不要给开发组发 Docker 镜像 分两种情况: - 如果开发组只负责接入客户端 SDK,通常不需要给他们镜像,只需要给一个已经部署好的测试服务地址、token、License 和 SDK 文档。 - 如果开发组需要本地完整联调,建议给他们一个服务端 Docker 部署包。部署包不要只有一个镜像,还要包含 docker-compose.image.yml、.env 示例、keys 目录说明。 ## 2. 服务端包含哪些容器 当前服务端不是单容器,而是三个服务: - api:FastAPI 服务,提供升级接口、后台页面、Manifest 签名、崩溃上报接口。 - minio:对象存储,用于保存版本文件。 - minio-init:启动时自动创建 MinIO bucket。 所以交付时推荐给 Docker Compose 部署包。 ## 3. 构建服务端镜像 在项目根目录执行,注意 Dockerfile 的构建上下文必须是项目根目录,因为镜像会复制 server 代码和 client/admin.html。 ```powershell cd C:\Users\admin\Desktop docker build ` -t simcae-update-server:0.1.0 ` -f server\Dockerfile ` . ``` 验证镜像: ```powershell docker images simcae-update-server ``` ## 4. 导出镜像给别人 如果接收方机器可以访问 Docker Hub,只导出 api 镜像即可: ```powershell docker save ` -o simcae-update-server_0.1.0.tar ` simcae-update-server:0.1.0 ``` 如果接收方机器不能联网,建议把 api、minio、minio-init 使用的三个镜像一起导出: ```powershell docker pull minio/minio:RELEASE.2025-04-22T22-12-26Z docker pull minio/mc:RELEASE.2025-04-16T18-13-26Z docker save ` -o simcae-server-all-images_0.1.0.tar ` simcae-update-server:0.1.0 ` minio/minio:RELEASE.2025-04-22T22-12-26Z ` minio/mc:RELEASE.2025-04-16T18-13-26Z ``` 建议交付目录: ```text SimCAEServerDockerPackage/ simcae-update-server_0.1.0.tar docker-compose.image.yml .env.example keys/ manifest_private_key.pem README.md ``` 注意:manifest_private_key.pem 是服务端签 Manifest 的私钥。客户端 SDK 中的 manifest_public_key.pem 必须和它匹配。 ## 4.1 推荐:在 Ubuntu 上使用离线打包脚本 如果接收方服务器不能联网,推荐直接使用 Ubuntu/bash 脚本生成完整离线包。脚本会完成:构建 api 镜像、拉取 MinIO 镜像、导出三张镜像、复制 docker-compose.yml、复制 .env.example、复制 keys、生成快速启动说明,并压缩成 tar.gz。 在当前 Ubuntu 机器上执行: ```bash cd /path/to/project/server bash ./package-offline-server.sh \ --version 0.1.0 \ --output-dir ./dist/SimCAEServerDockerPackage ``` 生成结果: ```text server/dist/SimCAEServerDockerPackage/ images/ simcae-server-all-images_0.1.0.tar keys/ manifest_private_key.pem manifest_public_key.pem docker-compose.yml .env.example README.md QUICK_START.md load-images.sh server/dist/SimCAEServerDockerPackage.tar.gz ``` 把 `SimCAEServerDockerPackage.tar.gz` 拷贝到离线服务器即可。 如果是在 Windows 机器上打包,也可以使用 `package-offline-server.ps1`,但 Ubuntu 服务端主流程建议使用 `package-offline-server.sh`。 ## 5. 离线 Ubuntu 服务器如何运行 接收方服务器需要提前安装好 Docker Engine 和 Docker Compose plugin。离线包拷过去后执行: ```bash tar -xzf SimCAEServerDockerPackage.tar.gz cd SimCAEServerDockerPackage bash ./load-images.sh nano .env ``` `.env.example` 里已经填好一组可直接试跑的默认 token 和 MinIO 账号。你通常只需要先改服务器地址: ```text MINIO_PUBLIC_ENDPOINT=http://服务器IP:9000 ``` 正式部署时,建议同时修改这些默认值,避免所有环境共用同一套公开示例密码: ```text CLIENT_API_TOKEN=客户端 API token,对应客户端 app_config.json 的 client_token ADMIN_TOKEN=后台管理员 token,网页登录时填这个值 CRASH_REPORT_TOKEN=崩溃上传 token CRASH_SYMBOL_TOKEN=符号包上传 token MINIO_ACCESS_KEY=MinIO 用户名 MINIO_SECRET_KEY=MinIO 密码 ``` 如果你在网页里点击“更改令牌”,新令牌只会在当前服务进程中立即生效。为了让服务重启后仍然使用新令牌,请同步修改 `.env` 里的 `ADMIN_TOKEN`,然后执行 `docker compose restart api`。 启动: ```bash docker compose up -d ``` 查看状态: ```bash docker compose ps ``` 查看日志: ```bash docker compose logs -f api ``` 访问: ```text 后台/API: http://服务器IP:8000/ MinIO 控制台: http://服务器IP:9001/ ``` 如果服务器开启了防火墙,至少放行: ```text 8000 后台/API 9000 客户端下载升级文件 9001 MinIO 控制台,可按需限制访问 ``` ## 6. 客户端 SDK 需要哪些服务端信息 发给客户端开发组的信息通常是: ```text api_base_url=http://服务器IP:8000 client_token=CLIENT_API_TOKEN 的值 license_key=后台创建的 License manifest_public_key.pem=与服务端 manifest_private_key.pem 匹配的公钥 crash_report_token=CRASH_REPORT_TOKEN 的值,如果接入崩溃上报 ``` ## 7. 生产部署提醒 - 不要把生产私钥和 token 发到无关人员手里。 - 正式环境需要备份 runtime、minio_data、keys。 - 对外开放端口至少包括 8000 和 9000;9001 是 MinIO 控制台,生产环境可限制访问。 - 修改服务端签名私钥后,必须重新生成客户端 manifest_public_key.pem,并重新打 SDK/客户端包。