FROM golang:trixie AS fetch-src ARG GIT_BRANCH=main RUN git clone https://github.com/bjdgyc/anylink.git -b $GIT_BRANCH /src FROM node:16-alpine AS web-builder WORKDIR /web COPY --from=fetch-src /src/web/package.json /src/web/yarn.lock /web/ RUN yarn install COPY --from=fetch-src /src/web/ /web/ RUN yarn run build FROM fetch-src AS server-builder ENV CGO_ENABLED=1 WORKDIR /src/server COPY --from=web-builder /web/ui /src/server/ui RUN --mount=type=cache,id=go-build,target=/root/.cache/go-build \ export APP_VER=$(cat /src/version) && \ export COMMIT_ID=$(git rev-parse HEAD) && \ export BUILD_DATE=$(date -Iseconds) && \ go mod tidy && \ go build -v -o anylink -trimpath -ldflags "-s -w -X main.appVer=$APP_VER -X main.commitId=$COMMIT_ID -X main.buildDate=$BUILD_DATE -extldflags \"-static\"" FROM debian:trixie-slim AS runner ENV TZ=Asia/Shanghai \ ANYLINK_IN_CONTAINER="on" \ IPTABLES_LEGACY="off" RUN apt-get update && \ apt-get install -y iproute2 bridge-utils iptables dnsmasq tini tzdata && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=fetch-src /src/deploy /app/deploy COPY --from=fetch-src /src/index_template /app/index_template COPY --from=fetch-src /src/server/conf /app/conf COPY --from=fetch-src /src/server/bridge-init.sh /src/README.md /src/LICENSE /src/version_info /app/ COPY --from=server-builder /src/server/anylink /app/ RUN mkdir -p /app/log ENTRYPOINT ["/usr/bin/tini", "--", "/app/anylink"]