diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b16d776 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +node_modules/ +dist/ +*.db +*.db-shm +*.db-wal +.env +.env.* +.git/ +.github/ +assets/ +docs/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..46fac54 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM node:20-alpine AS builder +RUN corepack enable +WORKDIR /app +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile +COPY . . +RUN pnpm run build + +FROM node:20-alpine AS runner +RUN corepack enable +WORKDIR /app +COPY --from=builder /app/package.json /app/pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prod +COPY --from=builder /app/dist ./dist + +ENV PORT=3001 +EXPOSE 3001 +CMD ["node", "dist/server/cli.js"] diff --git a/README.md b/README.md index dc53a65..4a0e92b 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,22 @@ npx agentree --port 8080 --opencode-url http://localhost:6543 **DB location:** `~/.agentree/agentree.db` Override with `DB_PATH=./agentree.db npx agentree`. +### Docker + +**Already have opencode running:** + +```bash +docker compose up agentree +``` + +**Need opencode too (full stack):** + +```bash +docker compose --profile with-opencode up +``` + +Open http://localhost:3001 in your browser. + --- ## How it works diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c71d17e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,47 @@ +services: + agentree: + build: . + ports: + - "${AGENTREE_PORT:-3001}:3001" + environment: + OPENCODE_API_URL: ${OPENCODE_API_URL:-http://opencode:6543} + OPENCODE_SERVER_USERNAME: ${OPENCODE_SERVER_USERNAME:-opencode} + OPENCODE_SERVER_PASSWORD: ${OPENCODE_SERVER_PASSWORD:-} + DB_PATH: /data/agentree.db + volumes: + - agentree_data:/data + restart: unless-stopped + + opencode: + profiles: [with-opencode] + image: ${OPENCODE_IMAGE:-ghcr.io/anomalyco/opencode:latest} + environment: + HOME: /root + OPENCODE_CONFIG_DIR: /root/.config/opencode + OPENCODE_SERVER_PASSWORD: ${OPENCODE_SERVER_PASSWORD:-} + OPENCODE_SERVER_USERNAME: ${OPENCODE_SERVER_USERNAME:-opencode} + OPENCODE_DISABLE_AUTOUPDATE: ${OPENCODE_DISABLE_AUTOUPDATE:-1} + OPENCODE_DISABLE_LSP_DOWNLOAD: ${OPENCODE_DISABLE_LSP_DOWNLOAD:-0} + OPENCODE_EXPERIMENTAL: ${OPENCODE_EXPERIMENTAL:-0} + TZ: ${TZ:-UTC} + volumes: + - ${OPENCODE_WORKSPACE_DIR:-.}:/workspace + - ${OPENCODE_CONFIG_HOST_DIR:-opencode_config}:/root/.config/opencode + - ${OPENCODE_DATA_HOST_DIR:-opencode_data}:/root/.local/share/opencode + ports: + - "${OPENCODE_PORT:-6543}:6543" + working_dir: /workspace + restart: unless-stopped + init: true + command: ["serve", "--hostname", "0.0.0.0", "--port", "6543"] + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:6543/global/health >/dev/null 2>&1"] + interval: 20s + timeout: 5s + retries: 5 + start_period: 20s + +volumes: + agentree_data: + opencode_config: + opencode_data: