Files
xiaobaifupan/next/docs/portainer-preflight.md
T

97 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Portainer 网页端预检
本流程适用于不使用 SSH、通过 Portainer 管理 `192.168.200.11` Docker 的环境。
它只在 `8876` 启动重建版,不停止、不修改现有 `8765` 容器,也不授权正式切换。
## 1. 准备独立数据目录
通过 NAS 文件管理器创建只供预检使用的目录,例如:
```text
/volume1/docker/xiaobai-next-preflight
```
实际路径以 NAS 的 Docker 共享目录为准。不得指向旧容器当前使用的数据目录。
先停止旧系统写入或创建 SQLite 一致性备份,再把备份复制到该目录并固定命名为:
```text
legacy-review.db
```
同时把管理员私有 Skill 放入该目录的 `private-mentor-skills/`。不要把 `.env`、数据库、
访问令牌或私有 Skill 提交到 Gitea。`APP_ENCRYPTION_KEY`必须使用旧系统现有值,不得重新生成。
## 2. 创建 Git Stack
在 Portainer 中依次进入 `Stacks``Add stack``Git Repository`,填写:
| 项目 | 值 |
|---|---|
| Name | `xiaobai-next-preflight` |
| Repository URL | `http://192.168.200.36:3200/leefer/xiaobaifupan.git` |
| Repository reference | `refs/heads/main` |
| Compose path | `next/compose.preflight.yaml` |
私有 Gitea 仓库使用 Portainer 的仓库认证字段填写用户名和访问令牌,不把凭据拼进 URL。
关闭自动更新;预检阶段只部署已经记录 Git 提交号的版本。
在 Stack 环境变量中填写:
| 变量 | 值 |
|---|---|
| `APP_ENCRYPTION_KEY` | 与旧数据库配套的原始 Fernet 密钥 |
| `APP_STORAGE_PATH` | 第 1 步创建的 NAS 绝对路径 |
| `APP_IMAGE` | `xiaobai-review-next:preflight-<Git短哈希>` |
| `APP_PUBLISH_PORT` | `8876` |
| `APP_LOG_LEVEL` | `INFO` |
| `APP_TIMEZONE` | `Asia/Shanghai` |
`APP_STORAGE_PATH`是强制项,预检编排不会默认为正式数据目录。Portainer 展开 Compose 时若
缺少密钥或目录会直接拒绝部署,不会启动一个使用临时密钥或错误数据卷的容器。
## 3. 部署与迁移判定
点击 `Deploy the stack`。该编排先运行一次性 `migration` 服务,只有迁移退出码为 0
`web` 服务才会启动。迁移器只读打开 `legacy-review.db`,写入独立的 `xiaobai.db`
重复部署使用同一目录时保持幂等。
Portainer 中应看到:
- `migration`容器状态为正常退出,退出码 0
- `web`容器持续运行并最终显示 healthy;
- 数据目录出现 `xiaobai.db``migration-report.json`
-`8765`容器仍在运行,配置和数据卷没有变化。
迁移失败时不要手工修改目标库。保留 `migration`日志,删除预检目录中的失败目标副本后,
从最新一致旧库副本重新部署。
## 4. 网页验收
访问:
```text
http://192.168.200.11:8876/
http://192.168.200.11:8876/api/health
```
使用真实管理员账号抽验登录、管理员与会员双标识、行情日期、自选、复盘、模型配置、
问师记录、问天历史、选股历史和策略跟踪。再从 Portainer 重启 `web` 容器,确认数据仍在。
在 Portainer 的容器详情中确认:
- 镜像标签与记录的 Git 提交一致;
- 容器用户不是 root
- Root filesystem 为只读;
- Capabilities 已全部移除;
- `/app/data`指向独立预检目录;
- 端口只有宿主 `8876`映射到容器 `8765`
完成日间、夜间、1080P、4K 和 390px 抽验后,将结果登记到
[`final/cutover-checklist.md`](final/cutover-checklist.md)。正式端口和流量仍保持不变。
## 5. 撤销预检
Portainer 删除 `xiaobai-next-preflight` Stack 即可停止预检容器。不要勾选删除旧正式容器、
旧数据卷或共享目录。独立预检目录保留到正式切换完成;它既可作为问题取证,也能避免重新迁移。