| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # Use build arguments for Go version and architecture
- ARG GO_VERSION=1.22
- ARG BUILDARCH=amd64
- # Stage 1: Builder Stage
- # FROM golang:${GO_VERSION}-alpine AS builder
- FROM crazymax/xgo:${GO_VERSION} AS builder
- # Set up working directory
- WORKDIR /app
- # Step 1: Copy the source code
- COPY . .
- # Step 2: Download dependencies
- RUN go mod tidy && go mod download
- # Step 3: Install swag and Run the build script
- RUN go install github.com/swaggo/swag/cmd/swag@latest && \
- swag init -g cmd/apimain.go --output docs/api --instanceName api --exclude http/controller/admin && \
- swag init -g cmd/apimain.go --output docs/admin --instanceName admin --exclude http/controller/api
- # Build the Go application with CGO enabled and specified ldflags
- RUN CGO_ENABLED=1 GOOS=linux go build -a \
- -ldflags "-s -w --extldflags '-static -fpic'" \
- -installsuffix cgo -o release/apimain cmd/apimain.go
- # Stage 2: Frontend Build Stage (builder2)
- FROM node:18-alpine AS builder2
- # Set working directory
- WORKDIR /frontend
- RUN apk update && apk add git --no-cache
- # Clone the frontend repository
- RUN git clone https://github.com/lejianwen/rustdesk-api-web .
- # Install npm dependencies and build the frontend
- RUN npm install && npm run build
- # Stage 2: Final Image
- FROM alpine:latest
- # Set up working directory
- WORKDIR /app
- # Install necessary runtime dependencies
- RUN apk add --no-cache tzdata file
- # Copy the built application and resources from the builder stage
- COPY --from=builder /app/release /app/
- COPY --from=builder /app/conf /app/conf/
- COPY --from=builder /app/resources /app/resources/
- COPY --from=builder /app/docs /app/docs/
- # Copy frontend build from builder2 stage
- COPY --from=builder2 /frontend/dist/ /app/resources/admin/
- # Ensure the binary is correctly built and linked
- RUN file /app/apimain && \
- mkdir -p /app/data && \
- mkdir -p /app/runtime
- # Set up a volume for persistent data
- VOLUME /app/data
- # Expose the necessary port
- EXPOSE 21114
- # Define the command to run the application
- CMD ["./apimain"]
|