From a577e9eefd0e0219d23f772fe8a012a189d827d9 Mon Sep 17 00:00:00 2001 From: wonder Date: Sat, 23 May 2026 12:50:44 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E9=85=8D=E7=BD=AE=20docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 5 +++++ backend/Dockerfile | 18 ++++++++++++++++++ docker-compose.yml | 21 +++++++++++++++++++++ frontend/Dockerfile | 17 +++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 .dockerignore create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6054892 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +frontend/node_modules +frontend/dist +backend/bin +.git diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..63a0ad5 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,18 @@ +# ---- Build Stage ---- +FROM golang:1.26-alpine AS builder + +WORKDIR /src +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN CGO_ENABLED=0 GOOS=linux go build -o /bin/gen2d ./cmd/main.go + +# ---- Runtime Stage ---- +FROM alpine:3.20 + +RUN apk add --no-cache ca-certificates +COPY --from=builder /bin/gen2d /usr/local/bin/gen2d + +EXPOSE 8080 +CMD ["gen2d"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2e14c32 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +services: + backend: + build: + context: ./backend + dockerfile: Dockerfile + environment: + - GEN2D_MODE=release + - GEN2D_PORT=8080 + expose: + - "8080" + restart: unless-stopped + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + ports: + - "10000:80" + depends_on: + - backend + restart: unless-stopped diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..405dfe0 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,17 @@ +# ---- Build Stage ---- +FROM node:20-alpine AS builder + +WORKDIR /app +COPY package.json package-lock.json* ./ +RUN npm ci + +COPY . . +RUN npm run build + +# ---- Runtime Stage ---- +FROM nginx:alpine + +COPY --from=builder /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80