# ============================================================ # AIOps 单容器 Dockerfile(embed 模式) # 前端嵌入后端二进制,一个容器搞定前后端 # 用法: docker build -f backend/Dockerfile.embed -t aiops-embed . # 署名 Logan.Li # ============================================================ ARG VERSION=dev ARG BUILD_TIME=unknown # ==================== Stage 1: Frontend Builder ==================== FROM node:20-alpine AS frontend-builder WORKDIR /app ENV NODE_OPTIONS=--max-old-space-size=4096 # 使用国内 npm 镜像 RUN npm config set registry https://registry.npmmirror.com COPY frontend/package.json frontend/package-lock.json ./ RUN npm ci --prefer-offline 2>/dev/null || npm install COPY frontend/ ./ RUN npm run build # ==================== Stage 2: Backend Builder ==================== FROM golang:1.24-alpine AS backend-builder WORKDIR /app RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.aliyun.com|g' /etc/apk/repositories RUN apk add --no-cache git ca-certificates tzdata ENV GOPROXY=https://goproxy.cn,direct ENV GOSUMDB=off COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ # 复制前端构建产物到 static 目录(供 go:embed 嵌入) COPY --from=frontend-builder /app/dist ./cmd/static/ # 构建(前端已嵌入) RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-w -s -X main.Version=${VERSION} -X main.BuildTime=${BUILD_TIME}" \ -o aiops ./cmd/ # ==================== Stage 3: Agent Builder ==================== FROM golang:1.24-alpine AS agent-builder WORKDIR /agent ENV GOPROXY=https://goproxy.cn,direct ENV GOSUMDB=off COPY agent/go.mod agent/go.sum ./ RUN go mod download COPY agent/ ./ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o bin/aiops-agent-linux-amd64 . && \ CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o bin/aiops-agent-linux-arm64 . && \ CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o bin/aiops-agent-darwin-arm64 . # ==================== Stage 4: Runtime ==================== FROM alpine:latest RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.aliyun.com|g' /etc/apk/repositories RUN apk --no-cache add ca-certificates tzdata curl ENV TZ=Asia/Shanghai WORKDIR /app # 单个二进制(前端已嵌入) COPY --from=backend-builder /app/aiops . # Agent 二进制 + 安装脚本 RUN mkdir -p /app/agent/bin /app/agent/deploy COPY --from=agent-builder /agent/bin/aiops-agent-linux-amd64 /app/agent/bin/ COPY --from=agent-builder /agent/bin/aiops-agent-linux-arm64 /app/agent/bin/ COPY --from=agent-builder /agent/bin/aiops-agent-darwin-arm64 /app/agent/bin/ COPY agent/deploy/install.sh /app/agent/deploy/ COPY agent/deploy/aiops-agent.service /app/agent/deploy/ EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD curl -f http://localhost:8080/health || exit 1 CMD ["./aiops"]