Files
aiops/Dockerfile.embed
T
Logan.Li 9f5ce249f1 feat(release): 统一版本与 embed 部署,推送 lghost/aiops 镜像
- resolve_version 统一二进制/Docker/K8s 版本解析
- docker-compose 简化为 mysql+redis+aiops 单应用容器
- 新增 release/docker push/kubernetes push 构建并推送 Docker Hub
- K8s deployment 镜像改为 lghost/aiops:<tag> 语义版本
2026-06-26 16:37:15 +08:00

131 lines
4.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# AIOps Embed Dockerfile — 前端嵌入后端二进制,单容器部署
# Stage 1: 构建前端 (Node 20)
# Stage 2: 构建后端 (Go 1.24, go:embed 前端)
# Stage 3: Agent 交叉编译
# Stage 4: 运行时 (Alpine, 单二进制服务前后端)
# 署名 Logan.Li
# ============================================================
ARG VERSION=dev
ARG BUILD_TIME=unknown
ARG GIT_COMMIT=unknown
# ==================== Stage 1: Frontend Builder ====================
FROM node:20-alpine AS frontend-builder
WORKDIR /app
# 使用淘宝镜像加速
RUN npm config set registry https://registry.npmmirror.com
# 安装依赖(利用 Docker 缓存层)
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
# 复制源代码并构建
COPY frontend/ ./
RUN npm run build
# ==================== Stage 2: Backend Builder ====================
FROM golang:1.24-alpine AS backend-builder
ARG VERSION
ARG BUILD_TIME
ARG GIT_COMMIT
WORKDIR /app
# 使用国内 Alpine 镜像源加速
RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apk/repositories
RUN apk add --no-cache git ca-certificates tzdata gcc musl-dev
ENV TZ=Asia/Shanghai
ENV GOPROXY=https://goproxy.cn,direct
ENV GONOSUMCHECK=*
# 复制后端 go.mod(利用 Docker 层缓存)
COPY backend/go.mod backend/go.sum ./
RUN go mod download
# 复制后端源码
COPY backend/ ./
# ★ 核心:将前端构建产物复制到 embed 目录
RUN rm -rf static && mkdir -p static
COPY --from=frontend-builder /app/dist/ static/
# 构建后端二进制(前端已嵌入,注入版本号)
# local 模式需 CGO(SQLite + redka/mattn-sqlite3)// Logan.Li
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build \
-ldflags="-w -s -X main.Version=${VERSION} -X main.BuildTime=${BUILD_TIME} -X main.GitCommit=${GIT_COMMIT}" \
-o aiops .
# ==================== Stage 3: Agent Builder ====================
FROM golang:1.24-alpine AS agent-builder
ARG VERSION
ARG BUILD_TIME
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 -X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}" -o bin/aiops-agent-linux-amd64 . && \
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}" -o bin/aiops-agent-linux-arm64 . && \
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}" -o bin/aiops-agent-darwin-arm64 .
# ==================== Stage 4: Runtime ====================
FROM alpine:latest
# 使用国内 Alpine 镜像源加速
RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apk/repositories
# 安装运行时依赖(核心最小集,重型工具改为懒加载)// Logan.Li
# bash=kubectl交互终端, curl=健康检查, git=流水线代码拉取, docker-cli=镜像构建推送
# kubectl=预装(~50MB),maven/nodejs/helm → 工具配置Tab懒加载
RUN apk --no-cache add ca-certificates tzdata bash curl git docker-cli docker-cli-buildx
# kubectl 预装(本地打包进镜像,避免 Docker build 时网络下载)// Logan.Li
COPY backend/kubectl /usr/local/bin/kubectl
RUN chmod +x /usr/local/bin/kubectl
# Maven 阿里云镜像加速(maven 懒加载后生效)
RUN mkdir -p /root/.m2 && \
echo '<?xml version="1.0" encoding="UTF-8"?><settings><mirrors><mirror><id>aliyun</id><mirrorOf>central</mirrorOf><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url></mirror></mirrors></settings>' > /root/.m2/settings.xml
# npm 淘宝镜像加速(node 懒加载后生效)
RUN npm config set registry https://registry.npmmirror.com 2>/dev/null || true
ENV TZ=Asia/Shanghai
WORKDIR /app
# 复制后端二进制(前端已嵌入)
COPY --from=backend-builder /app/aiops .
# 创建运行时目录
RUN mkdir -p /app/agent/bin /app/agent/deploy
# 复制 agent 二进制
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/
# 复制 agent 安装脚本
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"]