diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9125a0a7..f7a0f27a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -194,7 +194,7 @@ jobs: with: context: . target: STANDARD - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 push: true tags: casbin/casdoor:${{steps.get-current-tag.outputs.tag }},casbin/casdoor:latest @@ -204,7 +204,7 @@ jobs: with: context: . target: ALLINONE - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 push: true tags: casbin/casdoor-all-in-one:${{steps.get-current-tag.outputs.tag }},casbin/casdoor-all-in-one:latest diff --git a/Dockerfile b/Dockerfile index 05683e9a..04f0bda3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -FROM node:18.19.0 AS FRONT +FROM --platform=$BUILDPLATFORM node:18.19.0 AS FRONT WORKDIR /web COPY ./web . RUN yarn install --frozen-lockfile --network-timeout 1000000 && yarn run build -FROM golang:1.20.12 AS BACK +FROM --platform=$BUILDPLATFORM golang:1.20.12 AS BACK WORKDIR /go/src/casdoor COPY . . RUN ./build.sh @@ -13,6 +13,9 @@ RUN go test -v -run TestGetVersionInfo ./util/system_test.go ./util/system.go > FROM alpine:latest AS STANDARD LABEL MAINTAINER="https://casdoor.org/" ARG USER=casdoor +ARG TARGETOS +ARG TARGETARCH +ENV BUILDX_ARCH="${TARGETOS:-linux}_${TARGETARCH:-amd64}" RUN sed -i 's/https/http/' /etc/apk/repositories RUN apk add --update sudo @@ -28,7 +31,7 @@ RUN adduser -D $USER -u 1000 \ USER 1000 WORKDIR / -COPY --from=BACK --chown=$USER:$USER /go/src/casdoor/server ./server +COPY --from=BACK --chown=$USER:$USER /go/src/casdoor/server_${BUILDX_ARCH} ./server COPY --from=BACK --chown=$USER:$USER /go/src/casdoor/swagger ./swagger COPY --from=BACK --chown=$USER:$USER /go/src/casdoor/conf/app.conf ./conf/app.conf COPY --from=BACK --chown=$USER:$USER /go/src/casdoor/version_info.txt ./go/src/casdoor/version_info.txt @@ -47,12 +50,15 @@ RUN apt update \ FROM db AS ALLINONE LABEL MAINTAINER="https://casdoor.org/" +ARG TARGETOS +ARG TARGETARCH +ENV BUILDX_ARCH="${TARGETOS:-linux}_${TARGETARCH:-amd64}" RUN apt update RUN apt install -y ca-certificates && update-ca-certificates WORKDIR / -COPY --from=BACK /go/src/casdoor/server ./server +COPY --from=BACK /go/src/casdoor/server_${BUILDX_ARCH} ./server COPY --from=BACK /go/src/casdoor/swagger ./swagger COPY --from=BACK /go/src/casdoor/docker-entrypoint.sh /docker-entrypoint.sh COPY --from=BACK /go/src/casdoor/conf/app.conf ./conf/app.conf diff --git a/build.sh b/build.sh index 31ff51c0..177e6b28 100755 --- a/build.sh +++ b/build.sh @@ -8,4 +8,6 @@ else echo "Google is blocked, Go proxy is enabled: GOPROXY=https://goproxy.cn,direct" export GOPROXY="https://goproxy.cn,direct" fi -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o server . + +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o server_linux_amd64 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-w -s" -o server_linux_arm64 .