# AtomCode Daemon docker-compose 部署方案
#
# 适用于 NAS / 服务器常驻运行:配合手机端 GitCode App(/app)随时修改代码与调试,
# 或通过 daemon 的 HTTP API(/chat SSE、/projects、/sessions 等)远程调用。
#
# 快速开始:
# 1. 准备配置与数据目录(daemon 以 root 运行,配置目录为 /root/.atomcode):
# mkdir -p docker/data docker/projects
# cp docker/config-example.toml docker/config.toml # 填入 provider / api_key
# 2. 构建并启动:
# docker compose -f docker/docker-compose.yml up -d
# 3. 验证:
# curl http://localhost:13456/health
#
# 说明:
# - 首次使用需先执行 ./scripts/release.sh 生成 Linux 二进制到 dist/,再执行 build;
# - 若使用已推送的预构建镜像,可把下方 build 段替换为 image 段(见注释);
# - NAS 上多架构(如 arm64)可使用 build-multiarch.sh 构建并推送镜像后改用 image 方式。
#
# ⚠️ 安全警告:
# daemon 暴露了聊天、文件编辑、工具执行等敏感端点,且本镜像默认无鉴权。
# 端口默认仅绑定 127.0.0.1(本机访问);如需从局域网/公网访问,请通过
# BIND_ADDR 显式放开,并务必在前方部署反向代理 + TLS + token 鉴权。
# 例如: BIND_ADDR=0.0.0.0 docker compose -f docker/docker-compose.yml up -d
services:
atomcode-daemon:
container_name: atomcode-daemon
# 方式一:本地构建(推荐,需先 ./scripts/release.sh 生成 dist/ 下的 Linux 二进制)
build:
context: ..
dockerfile: docker/Dockerfile-Daemon
# 方式二:使用预构建镜像(构建并推送到镜像仓库后启用,替换上面的 build 段)
# image: swr.cn-north-4.myhuaweicloud.com/gitcode-be/atomcode-daemon:latest
# 容器内默认绑定 127.0.0.1,必须显式指定 --host 0.0.0.0 才能在容器外访问;
# 宿主侧的对外暴露则由 ports 的 BIND_ADDR 控制(默认仅本机,见上方安全警告)
command: ["--host", "0.0.0.0", "--port", "13456"]
ports:
# 默认仅本机可访问;局域网/NAS 场景用 BIND_ADDR 放开,例如:
# BIND_ADDR=0.0.0.0 docker compose -f docker/docker-compose.yml up -d
- "${BIND_ADDR:-127.0.0.1}:13456:13456"
volumes:
# 持久化全部运行数据(会话、日志、认证、插件等)
- ./data:/root/.atomcode
# 配置单独只读挂载,避免容器意外改写;宿主文件必须预先存在
- ./config.toml:/root/.atomcode/config.toml:ro
# 待编辑的项目代码
- ./projects:/workspace
environment:
# 模型 API Key 按需传入,或在 config.toml 的 provider 中配置
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- TZ=${TZ:-Asia/Shanghai}
# 仅在可信网络内启用 bash / 写文件等敏感 daemon 工具
# - ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS=1
# NAS 常驻:崩溃/重启后自动拉起
restart: unless-stopped
security_opt:
- no-new-privileges:true
# NAS 可按设备能力启用资源限制
# deploy:
# resources:
# limits:
# memory: 2G
# 健康检查(镜像基于 debian slim,无 curl/wget,使用 bash /dev/tcp 探活)
healthcheck:
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/127.0.0.1/13456 && printf 'GET /health HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && head -n1 <&3 | grep -q 200"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s