57 lines
2.4 KiB
Docker
57 lines
2.4 KiB
Docker
# ─── Stage 1: Build ────────────────────────────────────────────────────────────
|
|
# Собираем agent-worker binary из исходников gateway/
|
|
FROM golang:1.23-alpine AS builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Кэшируем зависимости отдельным слоем
|
|
COPY gateway/go.mod gateway/go.sum ./
|
|
RUN go mod download
|
|
|
|
# Копируем исходники
|
|
COPY gateway/ ./
|
|
|
|
# Собираем статически линкованный бинарь
|
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
|
go build -trimpath -ldflags="-s -w" \
|
|
-o agent-worker \
|
|
./cmd/agent-worker
|
|
|
|
# ─── Stage 2: Runtime ──────────────────────────────────────────────────────────
|
|
FROM alpine:3.21
|
|
|
|
# Runtime tools needed by the agent's tool executor:
|
|
# bash — shell_exec uses bash -c (falls back to sh)
|
|
# curl — http_request + docker socket API fallback in docker_exec
|
|
# wget — healthcheck
|
|
# jq — JSON processing in shell scripts
|
|
# python3 — docker_exec socket fallback (docker ps via API)
|
|
RUN apk add --no-cache \
|
|
ca-certificates \
|
|
tzdata \
|
|
bash \
|
|
curl \
|
|
wget \
|
|
jq \
|
|
python3
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /build/agent-worker /app/agent-worker
|
|
|
|
# Порт HTTP API агента (переопределяется через AGENT_PORT env)
|
|
EXPOSE 8001
|
|
|
|
# ── Healthcheck ──────────────────────────────────────────────────────────────
|
|
# Docker/Swarm будет проверять /health каждые 15 секунд
|
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -qO- http://localhost:${AGENT_PORT:-8001}/health || exit 1
|
|
|
|
# Required env vars (подставляются при деплое Swarm service):
|
|
# AGENT_ID — числовой ID агента из таблицы agents
|
|
# DATABASE_URL — mysql://user:pass@host:3306/goclaw
|
|
# LLM_BASE_URL — https://ollama.com/v1 или http://ollama:11434/v1
|
|
# LLM_API_KEY — ключ LLM провайдера
|
|
# AGENT_PORT — порт HTTP (default: 8001)
|
|
|
|
ENTRYPOINT ["/app/agent-worker"] |