- Restore agent-worker from commit 153399f: autonomous HTTP server per agent
(main.go 597 lines, main_test.go 438 lines, Dockerfile.agent-worker)
- Add container fields to agents table (serviceName, servicePort, containerImage, containerStatus)
- Update executor.go: real delegateToAgent() with HTTP POST to agent containers
- Update db.go: GetAgentByID, UpdateContainerStatus, GetAgentHistory, SaveHistory
- Update orchestrator.go: inject DB into executor for container address resolution
- Add tRPC endpoints: agents.deployContainer, agents.stopContainer, agents.containerStatus
- Add Docker Swarm deploy/stop logic in server/agents.ts
- Add Start/Stop container buttons to Agents.tsx with status badges
- Fix chat auto-scroll: replace ScrollArea with overflow-y-auto for direct scrollTop control
- Fix parallel chats: make isThinking per-conversation (thinkingConvId) instead of global
so switching between chats works while one is processing
45 lines
2.1 KiB
Docker
45 lines
2.1 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 ──────────────────────────────────────────────────────────
|
|
# Минимальный образ: только бинарь + 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"] |