/ Dockerfile.server
Dockerfile.server
1 ARG VERSION=1.0 2 3 # ---- Stage 1: Build Go Agent binaries (always cross-compile both) ---- 4 FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS agent-builder 5 6 ARG VERSION 7 8 WORKDIR /build 9 COPY easyshell-agent/ . 10 RUN go mod download 11 12 RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X main.version=${VERSION}" -o easyshell-agent-linux-amd64 ./cmd/agent && \ 13 CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X main.version=${VERSION}" -o easyshell-agent-linux-arm64 ./cmd/agent 14 15 # ---- Stage 2: Build Java Server jar ---- 16 FROM --platform=$BUILDPLATFORM gradle:8-jdk17 AS server-builder 17 18 WORKDIR /build 19 COPY easyshell-server/ . 20 RUN gradle bootJar --no-daemon -x test 21 22 # ---- Stage 3: Production runtime ---- 23 FROM eclipse-temurin:17-jre-jammy 24 25 RUN apt-get update && apt-get install -y --no-install-recommends curl tzdata && \ 26 rm -rf /var/lib/apt/lists/* && \ 27 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 28 echo "Asia/Shanghai" > /etc/timezone 29 30 WORKDIR /opt/easyshell 31 32 COPY --from=server-builder /build/build/libs/easyshell-server-0.1.0-SNAPSHOT.jar app.jar 33 34 RUN mkdir -p agent-binaries 35 COPY --from=agent-builder /build/easyshell-agent-linux-amd64 agent-binaries/ 36 COPY --from=agent-builder /build/easyshell-agent-linux-arm64 agent-binaries/ 37 COPY easyshell-agent/configs/agent.yaml agent-binaries/agent.yaml 38 39 ARG VERSION 40 ENV EASYSHELL_VERSION=${VERSION:-1.0} \ 41 MYSQL_HOST=easyshell-mysql \ 42 MYSQL_PORT=3306 \ 43 MYSQL_DATABASE=easyshell \ 44 MYSQL_USER=root \ 45 MYSQL_PASSWORD=18923ce29fdab04e \ 46 REDIS_HOST=easyshell-redis \ 47 REDIS_PORT=6379 \ 48 AGENT_BINARY_DIR=/opt/easyshell/agent-binaries \ 49 PROVISION_SERVER_URL=http://easyshell-server:18080 \ 50 JAVA_OPTS="" 51 52 EXPOSE 18080 53 54 HEALTHCHECK --interval=15s --timeout=5s --start-period=60s --retries=3 \ 55 CMD curl -sf http://localhost:18080/actuator/health || exit 1 56 57 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]