/ 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"]