# ─── 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 ────────────────────────────────────────────────────────── # Минимальный образ: только бинарь + CA certs (для HTTPS к LLM API) FROM alpine:3.21 RUN apk add --no-cache ca-certificates tzdata 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"]