6.6 KiB
6.6 KiB
Goosed Docker 本地验证指南
目标: 在本地完全验证 goosed Docker 镜像构建、运行、性能,然后再部署到 103。
方案: 完全本地化(git.tkmind.cn + 本地 Docker + 手工交付)。
时间预期: 1–2 周本地验证。
🚀 快速开始(5 分钟)
一键本地构建 + 验证
cd /Users/john/Project/Memind
# 本地构建镜像 + 启动容器 + 健康检查
bash scripts/verify-goosed-docker.sh local
脚本执行流程:
- 构建
tkmind/goosed:localDocker 镜像 - 启动容器到 18006 端口
- 等待
/status端点就绪(最多 30 秒) - 显示容器日志和可用的测试命令
- 容器保持运行供手工测试
详细步骤
第一次构建(15 分钟)
1. 检查环境
# Docker 版本(需 20.10+)
docker --version
# Docker Compose(需 2.0+)
docker-compose --version
# 检查磁盘空间(Rust 编译需 ~2GB)
docker system df
2. 本地构建镜像
cd /Users/john/Project/Memind
# 方式 A:直接从 Dockerfile 构建(首次较慢)
docker build -f tkmind_go/Dockerfile.goosed -t tkmind/goosed:local tkmind_go/
# 方式 B:使用 Docker Buildx 缓存加速(推荐)
docker buildx build \
-f tkmind_go/Dockerfile.goosed \
-t tkmind/goosed:local \
--load \
tkmind_go/
预期:8–12 分钟(首次较慢,后续有缓存)
输出示例:
=> exporting to docker image format 0.3s
=> => exporting layers 0.2s
=> => exporting manifest sha256:abc123... 0.0s
=> => exporting config sha256:def456... 0.0s
Successfully tagged tkmind/goosed:local
3. 验证镜像
# 查看镜像大小
docker images | grep goosed
# tkmind/goosed local sha256:abc123 50MB
# 检查镜像层
docker history tkmind/goosed:local
第二步:启动 & 测试
方式 A:脚本(推荐)
bash scripts/verify-goosed-docker.sh local
# 输出应该显示:
# ✅ 镜像构建完成
# ✅ 容器已启动
# ✅ 容器已就绪
方式 B:手工 docker run
docker run -d --name goosed-test \
-p 18006:18006 \
-e GOOSE_HOST=0.0.0.0 \
-e GOOSE_PORT=18006 \
-e GOOSE_SERVER__SECRET_KEY=test-secret \
-v goosed-test-data:/home/goose/.local/share/goose \
tkmind/goosed:local
方式 C:Docker Compose(两个实例)
# 启动两个 goosed 实例(18006 + 18007)
docker-compose -f docker-compose.local.yml up -d
# 查看状态
docker-compose -f docker-compose.local.yml ps
# 查看日志
docker-compose -f docker-compose.local.yml logs -f goosed-1
测试与验证
1. 健康检查
# 检查 /status 端点
curl http://127.0.0.1:18006/status
# 预期响应(JSON):
# {"status": "ok", "version": "..."}
2. 容器日志
# 查看完整日志(最后 50 行)
docker logs goosed-test | tail -50
# 持续流式日志
docker logs -f goosed-test
# 搜索错误
docker logs goosed-test 2>&1 | grep -i error
3. 容器内部检查
# 进入容器 shell
docker exec -it goosed-test /bin/bash
# 在容器内检查
cd /home/goose/.local/share/goose
ls -la
file goose.db # Session 数据库
# 检查网络
netstat -tlnp | grep 18006
# 退出容器
exit
4. 资源使用
# 监控资源使用(CPU、内存)
docker stats goosed-test
# 预期:
# CPU ~5–20%(空闲时)
# MEM 100–300MB(依赖 session 规模)
5. 性能测试(可选)
# 如果有测试工具,可以测试并发连接
# 示例:使用 Apache Bench(需安装 ab)
ab -n 100 -c 10 http://127.0.0.1:18006/status
# 或使用 wrk(需安装)
wrk -t4 -c100 -d10s http://127.0.0.1:18006/status
与 103 对接前的检查清单
在考虑部署到 103 前,在本地完成以下检查:
- ✅ 镜像构建成功,无编译错误
- ✅ 容器启动无异常,
/status端点响应正常 - ✅ Session 数据库(SQLite)正常创建和存储
- ✅ 容器日志无 panic / segfault / 权限错误
- ✅ 两个实例可同时运行(18006 + 18007),无端口冲突
- ✅ Docker 卷挂载正常,数据持久化工作
- ✅ 容器重启后数据不丢失
- ✅ 与本地 Portal (server.mjs) 集成测试通过(可选,需代理配置)
完成上述检查后,记录以下信息供 103 部署参考:
## 镜像交付信息
- **镜像名称:** ghcr.io/your-org/memind/goosed:latest
- **镜像大小:** ~50MB
- **运行用户:** goose (UID 1000)
- **开放端口:** 18006
- **数据目录:** /home/goose/.local/share/goose
- **所需环境变量:** GOOSE_SERVER__SECRET_KEY(必填)
- **健康检查:** GET http://127.0.0.1:18006/status
常见问题
Q1:构建失败 - "cargo not found"
A: Dockerfile 内部会安装 Rust,不需要本地 cargo。如果失败,检查:
# 清空 Docker 构建缓存
docker buildx prune -a
# 重新构建
docker build --no-cache -f tkmind_go/Dockerfile.goosed -t tkmind/goosed:local tkmind_go/
Q2:容器启动后立即退出
A: 查看日志获得错误信息:
docker logs <container-id>
# 常见原因:
# 1. GOOSE_SERVER__SECRET_KEY 缺失
# 2. 数据卷权限不足(goose 用户无写权限)
# 3. SQLite 数据库损坏
Q3:容器内 /status 返回 404
A: goosed 服务可能未就绪或崩溃:
# 检查进程
docker exec goosed-test ps aux | grep goosed
# 检查监听端口
docker exec goosed-test netstat -tlnp
# 查看完整日志
docker logs goosed-test
Q4:Session 数据在哪里?
A: SQLite 数据库位置:
# 卷挂载位置(宿主机)
docker volume inspect goosed-test-data
# 查看 "Mountpoint" 字段
# 容器内路径
docker exec goosed-test ls -la /home/goose/.local/share/goose/
清理
# 停止单个容器
docker stop goosed-test
docker rm goosed-test
docker volume rm goosed-test-data
# 或使用 Compose
docker-compose -f docker-compose.local.yml down -v
# 清理所有本地镜像/容器(谨慎!)
docker system prune -a
下一步(不在本阶段执行)
一旦本地验证通过,部署到 103 时需要:
- 203 上安装 Docker / Podman
- 配置镜像仓库凭证(ghcr.io pull token)
- 编写 systemd 服务或 compose 文件(103 端)
- Session 存储迁移计划(SQLite → PostgreSQL,参考
goose-session-postgres-migration.md) - 回滚方案(若有问题快速降级)
当前阶段:仅本地验证。