
如何用 Docker Compose 自建部署 Multica 并确认服务就绪【免费下载链接】multicaMake humans and AI agents work as one team — open-source and self-hostable.项目地址: https://gitcode.com/GitHub_Trending/mu/multicaMultica 是一个可自托管的服务让你把 AI agent 和团队成员放进同一个工作区协作。自建分两部分一部分是Multica 服务Web、API 和 PostgreSQL跑在一台装有 Docker 的机器上另一部分是各开发者机器上的daemon跑 Multica CLI 和 AI 编码工具。本文覆盖前半部分用 Docker Compose 把服务拉起并确认数据库迁移完成、服务真正就绪而不是仅仅容器在跑。部署前确认环境运行服务的机器需要满足以下条件来自快速开始文档Docker Engine 或 Docker Desktop且docker composev2 语法可用Git、Make、curl、OpenSSL机器上的3000和8080端口空闲。Multica 使用 Compose v2docker compose调用不支持旧版docker-composev1。先确认前两项docker info docker compose version一条命令启动服务克隆仓库并运行make selfhostgit clone --depth 1 https://github.com/multica-ai/multica.git cd multica make selfhost首次运行时make selfhost会依次做这些事定义见 Makefile 的selfhost目标从.env.example创建.env生成随机的JWT_SECRET、PostgreSQL 密码和MULTICA_VCS_SECRET_KEY从 GHCR 拉取 PostgreSQL、backend、frontend 三个镜像镜像为pgvector/pgvector:pg17、ghcr.io/multica-ai/multica-backend与ghcr.io/multica-ai/multica-webtag 由.env的MULTICA_IMAGE_TAG控制默认latest创建持久卷pgdata存数据库backend_uploads存上传文件并启动三个容器轮询/health最多约 60 秒就绪后打印前端/后端地址等待逻辑在 scripts/selfhost-wait.sh。再次运行make selfhost会复用已有的.env和卷不会重新生成密钥。两点限制需要注意make selfhost只拉已发布的镜像不从当前 checkout 构建代码。如果 GHCR 上对应 tag 还没发布命令会失败并提示改用make selfhost-build该目标用本地multica-backend:dev/multica-web:devtag 构建不会覆盖拉下来的:latest镜像。如果.env里把MULTICA_IMAGE_TAG固定到了某个精确版本后续pull只会重复拉同一 tag升级不会发生——升级前先用grep MULTICA_IMAGE_TAG .env确认。手动执行 Docker Compose 步骤可选如果想逐条手动操作而不是走make selfhost流程是见 SELF_HOSTING.md 的 Manual Docker Compose Setupgit clone https://github.com/multica-ai/multica.git cd multica cp .env.example .env编辑.env必须设置JWT_SECRET——docker compose 没设置它时会拒绝启动生产环境的 backend 也会拒绝使用开发默认值或已知占位符。生成方式JWT_SECRET$(openssl rand -hex 32)然后拉镜像并启动docker compose -f docker-compose.selfhost.yml pull docker compose -f docker-compose.selfhost.yml up -d确认服务就绪容器在运行不等于服务可用。按以下顺序验证1. 查容器状态docker compose -f docker-compose.selfhost.yml pspostgres应显示healthybackend和frontend应在运行中。2. 查后端就绪端点/readyzcurl -fsS http://localhost:8080/readyz预期响应{status:ok,checks:{db:ok,migrations:ok}}这里要区分两个端点/health是存活探针只要进程活着就返回{status:ok}即使迁移失败也一样/readyz会检查数据库连接和已应用的迁移集合是真正能抓住升级坏掉的检查。非 HTTP 200 或任一检查不是ok都说明新版本没有完成迁移先看后端日志再对外提供服务。数据库迁移在 backend 每次启动时自动执行docker/entrypoint.sh 中运行./migrate up没有需要手动执行的迁移命令。想观察迁移过程docker compose -f docker-compose.selfhost.yml logs -f backend3. 打开前端浏览器访问 http://localhost:3000能进入登录页说明前端正常。注意 docker-compose.selfhost.yml 把3000/8080只绑定到127.0.0.1不要改成0.0.0.0直接暴露到公网需要远程访问时用反向代理加 HTTPS快速开始文档中给出了 Caddy 的双域名与单域名示例配置。首次登录验证Docker 自托管栈默认APP_ENVproduction默认没有固定验证码也没有配置邮件服务。请求验证码后从后端日志读取它docker compose -f docker-compose.selfhost.yml logs backend \ | grep Verification code日志里会有类似这样的一行文档示例[DEV] Verification code for youexample.com: 123456填入验证码即可创建第一个工作区。配置好 Resend.env中设置RESEND_API_KEY或 SMTP 后验证码会直接发到邮箱见 Auth setup。警告APP_ENVproduction会禁用固定验证码公开实例上不要设置MULTICA_DEV_VERIFICATION_CODE。服务就绪后的常用命令与限制从multica仓库目录执行# 查看状态 docker compose -f docker-compose.selfhost.yml ps # 跟踪后端日志 docker compose -f docker-compose.selfhost.yml logs -f backend # 应用 .env 的修改重新读取 .env 并重建容器 docker compose -f docker-compose.selfhost.yml up -d # 停止服务保留卷 docker compose -f docker-compose.selfhost.yml down两条容易踩坑的限制docker compose restart只重启已有容器不会重新读取.env。改了配置必须用up -d重建容器才生效。docker compose down保留pgdata和backend_uploads两个卷加-v会连数据库一起删掉除非确实要清空实例不要执行docker compose down -v。验证不通过时先查什么快速开始文档给出的对照表现象先检查/readyz不返回ok运行docker compose -f docker-compose.selfhost.yml logs backend postgres收不到验证码请求验证码后在后端日志里搜索Verification codedaemon 列表里没有Agents确认 AI 编码工具在PATH上且已登录然后运行multica daemon restartissue 一直排队运行multica daemon status确认 daemon 在运行且连到了工作区更多场景见仓库中的 Troubleshooting 文档。下一步服务就绪后在跑 AI 编码工具的电脑上安装 Multica CLI 并执行multica setup self-hostdaemon 会在本地启动用multica daemon status确认输出中Daemon: running、Agents列出已装的编码工具、Workspaces大于0。完整的 CLI 与 daemon 步骤见 SELF_HOSTING.md 的 Step 3/Step 4。输出文章 /输出文章等等——我发现刚才的输出里误加了外层标签说明重新按规范只输出一次完整文章输出文章如何用 Docker Compose 自建部署 Multica 并确认服务就绪Multica 是一个可自托管的服务让你把 AI agent 和团队成员放进同一个工作区协作。自建分两部分一部分是Multica 服务Web、API 和 PostgreSQL跑在一台装有 Docker 的机器上另一部分是各开发者机器上的daemon跑 Multica CLI 和 AI 编码工具。本文覆盖前半部分用 Docker Compose 把服务拉起并确认数据库迁移完成、服务真正就绪而不是仅仅容器在跑。部署前确认环境运行服务的机器需要满足以下条件来自快速开始文档Docker Engine 或 Docker Desktop且docker composev2 语法可用Git、Make、curl、OpenSSL机器上的3000和8080端口空闲。Multica 使用 Compose v2docker compose调用不支持旧版docker-composev1。先确认前两项docker info docker compose version一条命令启动服务克隆仓库并运行make selfhostgit clone --depth 1 https://github.com/multica-ai/multica.git cd multica make selfhost首次运行时make selfhost会依次做这些事定义见 Makefile 的selfhost目标从.env.example创建.env生成随机的JWT_SECRET、PostgreSQL 密码和MULTICA_VCS_SECRET_KEY从 GHCR 拉取 PostgreSQL、backend、frontend 三个镜像镜像为pgvector/pgvector:pg17、ghcr.io/multica-ai/multica-backend与ghcr.io/multica-ai/multica-webtag 由.env的MULTICA_IMAGE_TAG控制默认latest创建持久卷pgdata存数据库backend_uploads存上传文件并启动三个容器轮询/health最多约 60 秒就绪后打印前端/后端地址等待逻辑在 scripts/selfhost-wait.sh。再次运行make selfhost会复用已有的.env和卷不会重新生成密钥。两点限制需要注意make selfhost只拉已发布的镜像不从当前 checkout 构建代码。如果 GHCR 上对应 tag 还没发布命令会失败并提示改用make selfhost-build该目标用本地multica-backend:dev/multica-web:devtag 构建不会覆盖拉下来的:latest镜像。如果.env里把MULTICA_IMAGE_TAG固定到了某个精确版本后续pull只会重复拉同一 tag升级不会发生——升级前先用grep MULTICA_IMAGE_TAG .env确认。手动执行 Docker Compose 步骤可选如果想逐条手动操作而不是走make selfhost流程是见 SELF_HOSTING.md 的 Manual Docker Compose Setupgit clone https://github.com/multica-ai/multica.git cd multica cp .env.example .env编辑.env必须设置JWT_SECRET——docker compose 没设置它时会拒绝启动生产环境的 backend 也会拒绝使用开发默认值或已知占位符。生成方式JWT_SECRET$(openssl rand -hex 32)然后拉镜像并启动docker compose -f docker-compose.selfhost.yml pull docker compose -f docker-compose.selfhost.yml up -d确认服务就绪容器在运行不等于服务可用。按以下顺序验证1. 查容器状态docker compose -f docker-compose.selfhost.yml pspostgres应显示healthybackend和frontend应在运行中。2. 查后端就绪端点/readyzcurl -fsS http://localhost:8080/readyz预期响应{status:ok,checks:{db:ok,migrations:ok}}这里要区分两个端点/health是存活探针只要进程活着就返回{status:ok}即使迁移失败也一样/readyz会检查数据库连接和已应用的迁移集合是真正能抓住升级坏掉的检查。非 HTTP 200 或任一检查不是ok都说明新版本没有完成迁移先看后端日志再对外提供服务。数据库迁移在 backend 每次启动时自动执行docker/entrypoint.sh 中运行./migrate up没有需要手动执行的迁移命令。想观察迁移过程docker compose -f docker-compose.selfhost.yml logs -f backend3. 打开前端浏览器访问 http://localhost:3000能进入登录页说明前端正常。注意 docker-compose.selfhost.yml 把3000/8080只绑定到127.0.0.1不要改成0.0.0.0直接暴露到公网需要远程访问时用反向代理加 HTTPS快速开始文档中给出了 Caddy 的双域名与单域名示例配置。首次登录验证Docker 自托管栈默认APP_ENVproduction默认没有固定验证码也没有配置邮件服务。请求验证码后从后端日志读取它docker compose -f docker-compose.selfhost.yml logs backend \ | grep Verification code日志里会有类似这样的一行文档示例[DEV] Verification code for youexample.com: 123456填入验证码即可创建第一个工作区。配置好 Resend.env中设置RESEND_API_KEY或 SMTP 后验证码会直接发到邮箱见 Auth setup。警告APP_ENVproduction会禁用固定验证码公开实例上不要设置MULTICA_DEV_VERIFICATION_CODE。服务就绪后的常用命令与限制从multica仓库目录执行# 查看状态 docker compose -f docker-compose.selfhost.yml ps # 跟踪后端日志 docker compose -f docker-compose.selfhost.yml logs -f backend # 应用 .env 的修改重新读取 .env 并重建容器 docker compose -f docker-compose.selfhost.yml up -d # 停止服务保留卷 docker compose -f docker-compose.selfhost.yml down两条容易踩坑的限制docker compose restart只重启已有容器不会重新读取.env。改了配置必须用up -d重建容器才生效。docker compose down保留pgdata和backend_uploads两个卷加-v会连数据库一起删掉除非确实要清空实例不要执行docker compose down -v。验证不通过时先查什么快速开始文档给出的对照表现象先检查/readyz不返回ok运行docker compose -f docker-compose.selfhost.yml logs backend postgres收不到验证码请求验证码后在后端日志里搜索Verification codedaemon 列表里没有Agents确认 AI 编码工具在PATH上且已登录然后运行multica daemon restartissue 一直排队运行multica daemon status确认 daemon 在运行且连到了工作区更多场景见仓库中的 Troubleshooting 文档。下一步服务就绪后在跑 AI 编码工具的电脑上安装 Multica CLI 并执行multica setup self-hostdaemon 会在本地启动用multica daemon status确认输出中Daemon: running、Agents列出已装的编码工具、Workspaces大于0。完整的 CLI 与 daemon 步骤见 SELF_HOSTING.md 的 Step 3/Step 4。【免费下载链接】multicaMake humans and AI agents work as one team — open-source and self-hostable.项目地址: https://gitcode.com/GitHub_Trending/mu/multica创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考