安装服务端
服务端是整套系统的中心:存任务、对话、附件、代码库配置、权限、凭据和审计,并把执行类操作路由到各台电脑。它跑在一台长期开机的 Linux 或 macOS 上,用 Docker 运行。
一行安装
Linux(Ubuntu 24.04)或 macOS(Apple Silicon + OrbStack):
curl -fsSL \ https://code.ezboti.com/install.sh \ | sh脚本会:
- 检查 Docker / Compose;Linux 没装时自动安装;
- 从腾讯云镜像仓库拉取服务端、PostgreSQL 17、Meilisearch、Gitea 等镜像;
- 首次生成数据库口令、主密钥、Gitea 口令和登录码,写入数据目录的
.env(0600);重跑只复用,不重新生成; - 启动容器,打印访问地址(终端显示 Access URL)和 8 位登录码。
Linux 默认包含自托管 Git(Gitea)与自动构建,镜像合计约 845MB。只要核心:
curl -fsSL \ https://code.ezboti.com/install.sh \ | sh -s -- --no-gitea不要自动构建时加 --no-runner。macOS 默认不含 Gitea;--with-gitea 在 macOS 上会报错。
参数
--deployment <代号>:部署代号,默认default;数据目录、容器项目和卷名前缀都用它。--public-url <url>:对外访问地址,默认自动探测。--port <port>:服务端端口,默认9630。--version <buildId>:固定服务端版本并写入.env;之后重跑沿用。--latest:解除固定,更新到latest。--no-gitea:本次只要服务端、数据库和搜索服务,不起 Gitea。--no-runner:起 Gitea,但不起自动构建。--with-gitea:Linux 默认已含,不用传;macOS 上会报错。-h、--help:查看当前脚本支持的参数。
--no-gitea / --no-runner 只对本次运行生效;升级时重跑同一条命令、带上原参数。
脚本默认用当前用户运行;只有装 Docker 时用 sudo。当前用户不在 docker 组时,脚本用 sudo docker 跑 compose;不自动 usermod,也不要求重新登录。macOS 一律不用 sudo。
装完做什么
- 浏览器打开命令输出的访问地址,用 8 位登录码创建第一个管理员。
- 网页「添加电脑」会给一行守护进程(daemon)命令(配置码 24 小时有效);在那台电脑执行,等它上线。
- 用浏览器打开
<访问地址>/about下载安卓客户端,填同一个地址登录。
服务端只负责管理,真正执行任务的是各台电脑;Mac mini 本身也要装一次守护进程。code.ezboti.com/install.sh 装服务端,<服务端地址>/install.sh 装守护进程,同名不同物。
自托管 Git(Gitea)
Linux 默认安装 Gitea 和自动构建服务。默认部署下:
- 地址:
http://<host>:13300 - 管理员:
admin - 初始口令:
~/deploy/beecodeai-default/.env里的GITEA_ADMIN_PASSWORD
Linux 不需要 --with-gitea;macOS 默认不含 Gitea。只要服务端、不要 Git / 自动构建时,用 --no-gitea;要 Gitea、不要自动构建时用 --no-runner。
从含 Gitea 的部署切到 --no-gitea 前,先到服务端界面清除 Git 配置。服务端的配置优先级是数据库 > 环境变量;界面上保存过 Git 配置时,只置空 env 不会生效,服务端仍会指向已删除的 Gitea。
前提
- Linux(Ubuntu 24.04)或 macOS(Apple Silicon)+ OrbStack;
- 服务端数据目录所在分区剩余空间不少于 2 GiB(镜像合计约 845MB,建议留 4 GiB 以上);
- 端口 9630 空闲;默认含 Gitea 时 13300(Web)和 13322(SSH)也要空闲;
- 客户端能访问服务端。守护进程需要能连出去访问服务端;不需要服务端回连守护进程。
备份
升级前至少备份数据库、附件和 .env:
docker exec -u postgres beecodeai-postgres-default pg_dumpall -U beecodeai > beecodeai-db.sqldocker cp beecodeai-server-default:/var/lib/beecodeai-server/attachments ./attachmentscp ~/deploy/beecodeai-default/.env ./beecodeai.env.env 里有主密钥;丢了它,数据库里的密文无法解密。自定义 --deployment 时,把命令里的 default 换成你的代号。
升级与回滚
普通重跑按 .env 里的 BEECODEAI_SERVER_TAG 来:固定过版本就一直用那个版本;要更新到 latest 加 --latest,要切到或回滚到某个 buildId 加 --version <buildId>。
# 更新到 latestcurl -fsSL \ https://code.ezboti.com/install.sh \ | sh -s -- --latest
# 固定 / 回滚到某个 buildIdcurl -fsSL \ https://code.ezboti.com/install.sh \ | sh -s -- --version <buildId>重跑会重新生成 compose 模板、复用已有的 .env 与数据卷。升级前先备份;数据库 migration 是单向的。
验收
BASE=http://<地址>:9630curl -sS -X POST -H 'content-type: application/json' \ -d '{}' "$BASE/api/server/health"curl -sS -o /dev/null \ -w '%{http_code} %{content_type}\n' \ "$BASE/dl/<buildId>/metadata.json"两条都应返回 200。然后浏览器打开访问地址,用登录码创建管理员。
常见卡点
- Docker 装不上:只支持 Ubuntu 自动装 Docker;其它发行版先自行安装 Docker Engine + Compose v2,或改用离线包。
- macOS 检测不到 Docker:先安装并启动 OrbStack,再重跑命令。
- macOS SSH 下拉镜像报 keychain 错误:OrbStack 在 SSH 会话里取不到登录钥匙串,不是脚本问题;在 Mac 图形终端重跑同一条命令。
- 地址打不开:先打开命令打印的访问地址;如果还打印了 Tailscale 地址或局域网地址,换另一个试;确认 9630 已放行、客户端能访问这台电脑。
- Gitea 打不开 / 克隆失败:确认 13300(Web)和 13322(SSH)已放行;管理员口令在
.env的GITEA_ADMIN_PASSWORD。 - 端口占用:首次安装加
--port 9631;或释放 9630。 - 镜像拉取慢:默认走腾讯云 TCR;确认能访问
ccr.ccs.tencentyun.com。 - 首装失败:重跑同一条命令;数据目录脏了按报错提示清理。