From 8c3ca890bf762692482bb197807bca5caa8a40cb Mon Sep 17 00:00:00 2001 From: Yuzhong Zhang <141388234+BetterAndBetterII@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:18:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Dockerfile=20=E5=92=8C=20G?= =?UTF-8?q?itHub=20Actions=20=E5=B7=A5=E4=BD=9C=E6=B5=81=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E5=B9=B3=E5=8F=B0=E6=9E=84=E5=BB=BA=E3=80=82?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20QEMU=20=E8=AE=BE=E7=BD=AE=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=8D=E5=90=8C=E6=9E=B6=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Dockerfile=20=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=B9=B3=E5=8F=B0=E5=8F=82=E6=95=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=89=8D=E5=90=8E=E7=AB=AF=E5=BA=94=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-build-dev.yml | 4 ++++ .github/workflows/docker-build.yml | 4 ++++ excalidraw-complete.Dockerfile | 10 ++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-build-dev.yml b/.github/workflows/docker-build-dev.yml index f616bc9..ce9dc49 100644 --- a/.github/workflows/docker-build-dev.yml +++ b/.github/workflows/docker-build-dev.yml @@ -42,6 +42,9 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=raw,value=latest,enable={{is_default_branch}} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -51,6 +54,7 @@ jobs: context: . file: ./excalidraw-complete.Dockerfile push: true + platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:buildcache,mode=max \ No newline at end of file diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index cc65a54..99a5650 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -44,6 +44,9 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=raw,value=latest,enable={{is_default_branch}} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -53,6 +56,7 @@ jobs: context: . file: ./excalidraw-complete.Dockerfile push: true + platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:buildcache,mode=max \ No newline at end of file diff --git a/excalidraw-complete.Dockerfile b/excalidraw-complete.Dockerfile index 00b2d91..5872f34 100644 --- a/excalidraw-complete.Dockerfile +++ b/excalidraw-complete.Dockerfile @@ -1,5 +1,5 @@ # 前端构建阶段 -FROM node:18 AS frontend-builder +FROM --platform=$BUILDPLATFORM node:18 AS frontend-builder WORKDIR /app # 复制 excalidraw 子模块 COPY excalidraw/ ./excalidraw/ @@ -7,9 +7,11 @@ COPY excalidraw/ ./excalidraw/ RUN cd excalidraw && npm install -g pnpm && pnpm install && cd excalidraw-app && DISABLE_VITE_CHECKER=true pnpm build:app:docker # 后端构建阶段 -FROM golang:alpine AS backend-builder +FROM --platform=$BUILDPLATFORM golang:alpine AS backend-builder RUN apk update && apk add --no-cache git WORKDIR /app +ARG TARGETOS +ARG TARGETARCH # 复制 Go 模块文件 COPY go.mod go.sum ./ RUN go mod download @@ -18,10 +20,10 @@ COPY . . # 复制前端构建文件到正确位置,以便 Go embed 可以找到 COPY --from=frontend-builder /app/excalidraw/excalidraw-app/build ./frontend/ # 构建 Go 应用 -RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . +RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="-s -w" -o main . # 最终运行镜像 -FROM alpine:latest +FROM --platform=$TARGETPLATFORM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ # 复制后端二进制文件(已包含嵌入的前端文件)