pi-courier 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/docker/Dockerfile +53 -15
- package/deploy/docker/README.md +47 -27
- package/deploy/docker/data/.gitignore +4 -0
- package/deploy/docker/defaults/agent/auth.json +1 -0
- package/deploy/docker/defaults/agent/models.json +1101 -0
- package/deploy/docker/defaults/agent/settings.json +1 -0
- package/deploy/docker/entrypoint.sh +21 -0
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +12 -3
- package/dist/standalone.js.map +1 -1
- package/package.json +1 -1
package/deploy/docker/Dockerfile
CHANGED
|
@@ -1,34 +1,72 @@
|
|
|
1
1
|
# pi-courier — Matrix → pi 桥接服务
|
|
2
2
|
#
|
|
3
|
-
# 构建: docker build
|
|
4
|
-
# 运行: docker compose up -d
|
|
3
|
+
# 构建: docker compose build(只构建,不运行)
|
|
4
|
+
# 运行: docker compose up -d(见 docker-compose.yml 与 README.md)
|
|
5
5
|
#
|
|
6
6
|
# 说明:
|
|
7
|
-
# - 基于 node:24(避开 Node 20 与 pi 的 undici
|
|
8
|
-
#
|
|
7
|
+
# - 基于 node:24-slim(避开 Node 20 与 pi 的 undici 不兼容问题;glibc 标准
|
|
8
|
+
# 环境保证 agent 的 bash 工具与宿主行为一致)
|
|
9
|
+
# - 多阶段构建:builder 层装依赖后丢弃(npm 缓存/构建垃圾不进最终镜像),
|
|
10
|
+
# runtime 只带 node_modules + 运行时工具 → 体积约省 200-300MB
|
|
11
|
+
# - defaults/ 预置 LLM 三件套模板(entrypoint 首次启动自动拷贝到 /root/.pi/agent)
|
|
9
12
|
# - 构建期间 npm 会从 GitHub Releases 下载 E2EE 原生库(约 21MB),
|
|
10
|
-
#
|
|
13
|
+
# 网络受限时用 --build-arg HTTPS_PROXY/HTTP_PROXY 传代理
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
# ============================== builder ======================================
|
|
16
|
+
FROM node:24-slim AS builder
|
|
13
17
|
|
|
14
|
-
# 构建期代理(可选,仅当 VPS 需要代理访问外网时)
|
|
15
18
|
ARG HTTPS_PROXY=
|
|
16
19
|
ARG HTTP_PROXY=
|
|
17
20
|
ENV https_proxy=${HTTPS_PROXY} \
|
|
18
21
|
http_proxy=${HTTP_PROXY}
|
|
19
22
|
|
|
20
|
-
#
|
|
23
|
+
# 仅需要 ca-certificates(npm install 走 https;git 由 runtime 层负责)
|
|
24
|
+
RUN apt-get update \
|
|
25
|
+
&& apt-get install -y --no-install-recommends ca-certificates \
|
|
26
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
27
|
+
|
|
28
|
+
# 安装 pi 与 pi-courier(pi 先装,pi-courier 的 peer 依赖即满足);
|
|
29
|
+
# 安装后清 npm 缓存(此层最终不会进入 runtime 镜像)
|
|
21
30
|
RUN npm install -g @earendil-works/pi-coding-agent pi-courier \
|
|
22
|
-
&&
|
|
31
|
+
&& npm cache clean --force
|
|
32
|
+
|
|
33
|
+
# ============================== runtime ======================================
|
|
34
|
+
FROM node:24-slim
|
|
35
|
+
|
|
36
|
+
ARG HTTPS_PROXY=
|
|
37
|
+
ARG HTTP_PROXY=
|
|
38
|
+
ENV https_proxy=${HTTPS_PROXY} \
|
|
39
|
+
http_proxy=${HTTP_PROXY}
|
|
40
|
+
|
|
41
|
+
# 系统依赖:
|
|
42
|
+
# - git:pi 的 bash 工具 / `pi install` 需要(slim 基础镜像没有)
|
|
43
|
+
# - ca-certificates:HTTPS 证书
|
|
44
|
+
# - curl:排查网络问题用(可选)
|
|
45
|
+
RUN apt-get update \
|
|
46
|
+
&& apt-get install -y --no-install-recommends git ca-certificates curl \
|
|
47
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
48
|
+
|
|
49
|
+
# 从 builder 只带 node_modules,然后在 runtime 重建 bin 符号链接
|
|
50
|
+
# (docker COPY 会把符号链接解引用成普通文件,导致相对 import 解析错误,
|
|
51
|
+
# 所以不能直接 COPY /usr/local/bin/pi)
|
|
52
|
+
COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
|
|
53
|
+
RUN ln -s /usr/local/lib/node_modules/@earendil-works/pi-coding-agent/dist/cli.js /usr/local/bin/pi \
|
|
54
|
+
&& ln -s /usr/local/lib/node_modules/pi-courier/dist/cli.js /usr/local/bin/pi-courier
|
|
55
|
+
|
|
56
|
+
# 验证安装(失败则构建失败)
|
|
57
|
+
RUN pi --version \
|
|
23
58
|
&& pi-courier help >/dev/null 2>&1 \
|
|
24
|
-
&& echo "node $(node --version), pi
|
|
59
|
+
&& echo "OK: node $(node --version), pi + pi-courier installed"
|
|
25
60
|
|
|
26
|
-
#
|
|
27
|
-
|
|
61
|
+
# 默认配置模板 + 首次启动初始化脚本
|
|
62
|
+
COPY defaults/ /opt/pi-courier/defaults/
|
|
63
|
+
COPY entrypoint.sh /entrypoint.sh
|
|
64
|
+
RUN chmod +x /entrypoint.sh
|
|
28
65
|
|
|
29
|
-
#
|
|
66
|
+
# 进程存活检查:pid 1 即 entrypoint exec 的 pi-courier run 主进程(kill -0 无需额外工具)
|
|
30
67
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
|
31
|
-
CMD
|
|
68
|
+
CMD kill -0 1 || exit 1
|
|
32
69
|
|
|
33
|
-
#
|
|
70
|
+
# entrypoint:首次启动把模板拷进 /root/.pi/agent;随后前台运行主进程
|
|
71
|
+
ENTRYPOINT ["/entrypoint.sh"]
|
|
34
72
|
CMD ["pi-courier", "run"]
|
package/deploy/docker/README.md
CHANGED
|
@@ -5,11 +5,17 @@
|
|
|
5
5
|
## 目录结构
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
|
|
9
|
-
├── Dockerfile
|
|
10
|
-
├── docker-compose.yml
|
|
11
|
-
├──
|
|
12
|
-
|
|
8
|
+
deploy/docker/
|
|
9
|
+
├── Dockerfile # 镜像构建(装 pi + pi-courier + 默认配置模板)
|
|
10
|
+
├── docker-compose.yml # 编排(数据卷 ./data ↔ 容器 /root/.pi)
|
|
11
|
+
├── entrypoint.sh # 首次启动:自动把默认配置模板拷入数据目录
|
|
12
|
+
├── defaults/ # 模板源(构建进镜像 /opt/pi-courier/defaults/)
|
|
13
|
+
│ └── agent/
|
|
14
|
+
│ ├── models.json # 完整模型数据(24 模型,开箱即用)
|
|
15
|
+
│ ├── auth.json # API key 占位(唯一需要你填的文件)
|
|
16
|
+
│ └── settings.json # 默认 provider + 模型
|
|
17
|
+
└── data/ # 运行时数据(自动创建;含 key/token,已 gitignore)
|
|
18
|
+
└── agent/ # 首次启动自动从模板填充
|
|
13
19
|
```
|
|
14
20
|
|
|
15
21
|
## 部署步骤
|
|
@@ -24,71 +30,85 @@ sudo apt-get install -y docker-compose-plugin
|
|
|
24
30
|
```
|
|
25
31
|
|
|
26
32
|
```bash
|
|
27
|
-
# 获取项目文件
|
|
33
|
+
# 获取项目文件
|
|
28
34
|
git clone https://github.com/Hi-Barry/pi-courier.git && cd pi-courier/deploy/docker
|
|
29
|
-
# 或手动上传 Dockerfile + docker-compose.yml
|
|
30
35
|
```
|
|
31
36
|
|
|
32
|
-
### 2.
|
|
37
|
+
### 2. 构建(只构建,不运行)
|
|
33
38
|
|
|
34
39
|
```bash
|
|
35
40
|
# 如果 VPS 需要代理访问外网(GitHub 下载 21MB E2EE 库),先导出:
|
|
36
41
|
# export HTTPS_PROXY=http://<host>:<port>
|
|
37
42
|
# export HTTP_PROXY=http://<host>:<port>
|
|
38
43
|
|
|
39
|
-
docker compose
|
|
40
|
-
docker ps # 确认 pi-courier 容器 running
|
|
41
|
-
docker logs pi-courier # 查看启动日志
|
|
44
|
+
docker compose build
|
|
42
45
|
```
|
|
43
46
|
|
|
44
|
-
### 3.
|
|
47
|
+
### 3. 配置(只需填 API key)
|
|
48
|
+
|
|
49
|
+
首次启动会自动把模板拷入 `./data/agent/`。先启动一次容器完成初始化,再填 key:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
docker compose up -d # 启动(entrypoint 自动初始化 ./data/agent/)
|
|
53
|
+
docker exec pi-courier ls /root/.pi/agent # 确认模板已拷入
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
然后编辑宿主 `./data/agent/auth.json`,把占位的 `sk-你的key` 换成真实 API key:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# data/agent/auth.json
|
|
60
|
+
{ "opencode-go": { "type": "api_key", "key": "sk-真实key" } }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> 默认 provider 是 `opencode-go` / `deepseek-v4-flash`(settings.json)。用其他 provider 的话,改 settings.json 并确认 models.json 里有对应模型。
|
|
64
|
+
|
|
65
|
+
### 4. Matrix 配置(向导)
|
|
45
66
|
|
|
46
67
|
```bash
|
|
47
|
-
# 容器运行后,进入交互向导(和本机一样,逐步输入)
|
|
48
68
|
docker exec -it pi-courier pi-courier setup
|
|
49
69
|
```
|
|
50
70
|
|
|
51
|
-
|
|
71
|
+
按提示输入:homeserver → token(密码登录或粘贴)→ 信任用户 → E2EE → workdir。写入容器内 `/root/.pi/pi-courier.json`(宿主 `./data/pi-courier.json`)。
|
|
52
72
|
|
|
53
|
-
|
|
73
|
+
```bash
|
|
74
|
+
docker compose restart # 让 Matrix 配置生效
|
|
75
|
+
docker logs pi-courier # 应看到 ✅ Matrix connected + ✅ pi RPC connected (model: deepseek-v4-flash)
|
|
76
|
+
```
|
|
54
77
|
|
|
55
|
-
###
|
|
78
|
+
### 5. 使用
|
|
56
79
|
|
|
57
80
|
- 给 bot 发消息 → 查看验证码: `docker logs pi-courier` → 回复验证码配对
|
|
58
81
|
- 查看日志: `docker logs -f pi-courier`(或 `docker exec pi-courier pi-courier logs --level debug`)
|
|
59
82
|
- 重启: `docker compose restart`
|
|
60
83
|
- 停止: `docker compose down`(数据保留在 ./data)
|
|
61
84
|
|
|
62
|
-
###
|
|
85
|
+
### 6. 升级
|
|
63
86
|
|
|
64
87
|
```bash
|
|
65
88
|
# 方式 A:容器内自更新(npm 全局方式)
|
|
66
89
|
docker exec pi-courier pi-courier update
|
|
67
90
|
|
|
68
91
|
# 方式 B:重建镜像
|
|
69
|
-
git pull && docker compose build
|
|
92
|
+
git pull && docker compose build && docker compose up -d
|
|
70
93
|
```
|
|
71
94
|
|
|
72
|
-
###
|
|
95
|
+
### 7. 映射宿主机项目目录(可选)
|
|
73
96
|
|
|
74
97
|
让 pi 在容器里直接操作宿主机上的代码:
|
|
75
98
|
|
|
76
99
|
1. compose 里取消注释 `- ./projects:/root/Projects`
|
|
77
|
-
2. 配置 `workdir`
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
docker exec -it pi-courier pi-courier setup # workdir 填 /root/Projects/<你的项目>
|
|
81
|
-
# 或直接改 ./data/pi-courier.json 的 workdir 后 docker compose restart
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
宿主机代码放 `./projects/<你的项目>`,pi 的工作目录就是 `/root/Projects/<你的项目>`。
|
|
100
|
+
2. 配置 `workdir` 指向容器内路径(`docker exec -it pi-courier pi-courier setup` 的 workdir 填 `/root/Projects/<你的项目>`)
|
|
101
|
+
3. 宿主机代码放 `./projects/<你的项目>`
|
|
85
102
|
|
|
86
103
|
## 常见问题
|
|
87
104
|
|
|
88
105
|
| 问题 | 解决 |
|
|
89
106
|
|---|---|
|
|
90
107
|
| 构建很慢 / 卡在下载 | 构建期网络问题,设 `export HTTPS_PROXY` 再 build |
|
|
108
|
+
| 启动显示 `model: unknown` | `./data/agent/auth.json` 没填 key,或 settings.json 的模型不在 models.json |
|
|
109
|
+
| 发消息没有回复 | 按顺序查:`docker logs` 看 Matrix 连接、pi RPC 连接、模型是否 unknown |
|
|
91
110
|
| `M_BAD_JSON: device_id does not match` | 重登录过,删 `./data/msg-bridge-matrix-crypto` 重启 |
|
|
92
111
|
| 加密房间解不开新消息 | bot 无交叉签名,改用非加密房间 |
|
|
93
112
|
| 会话重启丢失 | 0.1.1+ 自动 `--continue`,确认 `./data` 卷没被删 |
|
|
94
113
|
| 想用新配置 | 改 `./data/pi-courier.json` → `docker compose restart` |
|
|
114
|
+
| workdir 文件丢失(容器重建后) | 未映射 projects 卷;取消注释 `- ./projects:/root/Projects` |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "opencode-go": { "type": "api_key", "key": "sk-你的key" } }
|