跳转到内容

部署应用

把 Bub 应用放进容器,将数据挂载到宿主机,并选择网关启动的渠道。从 GitHub Releases 获取 Bub 0.6.0 的源码归档并解压,在解压后的目录中运行以下命令。

仓库提供三份关键文件:Dockerfile、docker-compose.yml 与 entrypoint.sh。

  • 已安装 Docker(或兼容运行时)与 docker compose。
  • .env 中至少包含 BUB_MODEL 以及 BUB_API_KEY 或某个提供商专用 key:参见 配置。
  • Telegram 部署还需要 .env 中包含 BUB_TELEGRAM_TOKEN 与一份白名单:参见 Telegram。
cp env.example .env

Telegram 网关的最小 .env:

BUB_MODEL=openrouter:openrouter/free
BUB_API_KEY=sk-or-...
BUB_TELEGRAM_TOKEN=123456:abcdef...
BUB_TELEGRAM_ALLOW_USERS=123456789

docker compose 会自动加载 .env,见 docker-compose.yml 中的 env_file: 行。

volumes:
  - ${BUB_WORKSPACE_PATH:-.}:/workspace
  - ${BUB_HOME_HOST:-${HOME}/.bub}:/data
  - ${BUB_AGENT_HOME:-${HOME}/.agents}:/root/.agents
挂载 用途
/workspace Bub 视为工作仓库的目录。默认是你执行 docker compose 时的目录。
/data Bub 数据目录的宿主机绑定(命令历史、Tape、插件项目)。
/root/.agents 共享 skill 目录(沿用 agents.md 约定)。

Compose 文件会在容器内设置 BUB_HOME=/data。如果要把宿主机侧源路径放到 ~/.bub 以外的位置,请设置 BUB_HOME_HOST。此部署的运行时设置应放在 .env 中;BUB_HOME 不会移动 Bub 默认的 config.yml 路径。

docker-compose.yml 使用预构建镜像 ghcr.io/bubbuild/bub,每次发布 release 时都会推送到 GHCR:

docker compose pull
docker compose up -d
docker compose logs -f app

镜像 tag 与发布版本一致(如 0.6.0a2);正式版还会额外打 <major>.<minor> tag,latest 指向最新的正式版。如需锁定版本,在 .env 中设置 BUB_IMAGE,例如 BUB_IMAGE=ghcr.io/bubbuild/bub:0.6.0a2。

如果要从本地源码构建,加上 --build。本地构建的镜像会以 BUB_IMAGE 为 tag,在下一次 docker compose pull 之前替代拉取的镜像:

docker compose up -d --build

本地构建需要几分钟 —— 镜像会安装系统工具(git、node、jq 等)并执行 uv sync --no-dev --no-editable --extra app。

也可以直接用 docker run 运行镜像。挂载同样的卷,并显式传入 .env:

docker run -d --name bub --restart unless-stopped \
  --env-file .env \
  -e BUB_HOME=/data \
  -v "$PWD":/workspace \
  -v ~/.bub:/data \
  -v ~/.agents:/root/.agents \
  ghcr.io/bubbuild/bub:latest
docker logs -f bub

升级时先 docker pull 新 tag,再 docker rm -f bub 并重新执行上面的命令。

每次容器启动:

  1. 如果 /workspace/bub-reqs.txt 存在,把其中列出的包装入镜像 venv。
  2. 无参运行 bub install,这会同步 /data/bub-project/ 下的托管插件项目。pyproject.toml 中新增的插件在这里被拉起。
  3. 如果 /workspace/startup.sh 存在则 exec 它,否则 exec bub gateway。

也就是说工作区可以通过提供自己的 startup.sh 覆盖入口,用于在长期工作区上运行 bub chat,或自定义网关参数:

# /workspace/startup.sh
exec /app/.venv/bin/bub gateway --enable-channel telegram
docker compose ps
docker compose logs -f app | rg "telegram.start polling"

正常启动后会出现 telegram.start polling。如果没有渠道日志,可在不打印 token 的情况下检查变量是否传入:docker compose exec app sh -c 'test -n "$BUB_TELEGRAM_TOKEN"' 在变量已设置时返回状态码 0。

升级前先备份宿主机数据目录。然后拉取新镜像并重新创建容器,保留 .env 和原有宿主机挂载路径。/data 的绑定挂载会保留插件项目,对应宿主机的 BUB_HOME_HOST,默认是 ~/.bub:

docker compose pull
docker compose up -d
docker compose logs -f app

如果使用本地构建,用 git pull && docker compose build --pull 代替 docker compose pull。

容器内插件由 bub install 与 bub update 管理:

docker compose exec app bub install                       # 同步项目
docker compose exec app bub install owner/repo@v1.2.0     # 新增或锁定插件
docker compose exec app bub update                        # 全量升级
docker compose exec app bub update specific-plugin        # 升级指定插件

二者都作用于 BUB_PROJECT 指定的托管项目(默认 bub.home / "bub-project",在此 compose 部署中为 /data/bub-project),不会触碰系统 Python 环境。

  • 配置:环境变量优先级与提供商设置。
  • Telegram:bot token 与白名单行为。
  • CLI 参考:bub gateway、bub install、bub update 的参数。