2025-07-18 00:34:27 +08:00
|
|
|
# 前端构建阶段
|
2025-07-19 09:45:51 +08:00
|
|
|
FROM node:20-slim AS frontend-builder
|
|
|
|
|
|
2025-07-18 00:34:27 +08:00
|
|
|
# 安装pnpm
|
2025-07-10 01:27:35 +08:00
|
|
|
WORKDIR /app/web
|
|
|
|
|
COPY web/ ./
|
2025-07-23 21:48:00 +08:00
|
|
|
RUN npm install --frozen-lockfile
|
2025-07-25 18:22:35 +08:00
|
|
|
ARG NUXT_PUBLIC_API_SERVER=http://backend:8080/api
|
|
|
|
|
ARG NUXT_PUBLIC_API_CLIENT=/api
|
2025-07-23 21:48:00 +08:00
|
|
|
RUN npm run build
|
2025-07-18 00:34:27 +08:00
|
|
|
|
|
|
|
|
# 前端运行阶段
|
2025-07-23 19:27:31 +08:00
|
|
|
FROM node:20-alpine AS frontend
|
2025-07-18 00:34:27 +08:00
|
|
|
|
2025-07-23 19:27:31 +08:00
|
|
|
# RUN npm install -g pnpm
|
|
|
|
|
ENV NODE_ENV=production
|
2025-07-18 00:34:27 +08:00
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
COPY --from=frontend-builder /app/web/.output ./.output
|
|
|
|
|
COPY --from=frontend-builder /app/web/package*.json ./
|
|
|
|
|
EXPOSE 3000
|
|
|
|
|
CMD ["node", ".output/server/index.mjs"]
|
|
|
|
|
|
|
|
|
|
# 后端构建阶段
|
2025-07-19 10:33:02 +08:00
|
|
|
FROM golang:1.24.5-alpine AS backend-builder
|
2025-07-10 01:27:35 +08:00
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
COPY go.mod go.sum ./
|
|
|
|
|
RUN go mod download
|
|
|
|
|
|
2025-08-20 17:16:34 +08:00
|
|
|
# 复制所有源代码
|
2025-07-10 01:27:35 +08:00
|
|
|
COPY . .
|
2025-08-20 17:16:34 +08:00
|
|
|
|
|
|
|
|
# 定义构建参数
|
|
|
|
|
ARG VERSION
|
|
|
|
|
ARG GIT_COMMIT
|
|
|
|
|
ARG GIT_BRANCH
|
|
|
|
|
ARG BUILD_TIME
|
|
|
|
|
|
|
|
|
|
# 获取版本信息并编译
|
|
|
|
|
RUN VERSION=${VERSION:-$(cat VERSION)} && \
|
|
|
|
|
GIT_COMMIT=${GIT_COMMIT:-$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")} && \
|
|
|
|
|
GIT_BRANCH=${GIT_BRANCH:-$(git branch --show-current 2>/dev/null || echo "unknown")} && \
|
|
|
|
|
BUILD_TIME=${BUILD_TIME:-$(date '+%Y-%m-%d %H:%M:%S')} && \
|
|
|
|
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo \
|
|
|
|
|
-ldflags "-X 'github.com/ctwj/urldb/utils.Version=${VERSION}' \
|
|
|
|
|
-X 'github.com/ctwj/urldb/utils.BuildTime=${BUILD_TIME}' \
|
|
|
|
|
-X 'github.com/ctwj/urldb/utils.GitCommit=${GIT_COMMIT}' \
|
|
|
|
|
-X 'github.com/ctwj/urldb/utils.GitBranch=${GIT_BRANCH}'" \
|
|
|
|
|
-o main .
|
2025-07-10 01:27:35 +08:00
|
|
|
|
2025-07-18 00:34:27 +08:00
|
|
|
# 后端运行阶段
|
|
|
|
|
FROM alpine:latest AS backend
|
2025-07-10 01:27:35 +08:00
|
|
|
|
2025-07-29 14:00:01 +08:00
|
|
|
# 安装时区数据
|
|
|
|
|
RUN apk add --no-cache tzdata
|
|
|
|
|
|
2025-07-10 01:27:35 +08:00
|
|
|
WORKDIR /root/
|
|
|
|
|
|
|
|
|
|
# 复制后端二进制文件
|
|
|
|
|
COPY --from=backend-builder /app/main .
|
|
|
|
|
|
|
|
|
|
# 创建uploads目录
|
|
|
|
|
RUN mkdir -p uploads
|
|
|
|
|
|
2025-07-27 08:55:42 +08:00
|
|
|
# 设置环境变量
|
|
|
|
|
ENV GIN_MODE=release
|
2025-07-29 14:00:01 +08:00
|
|
|
ENV TZ=Asia/Shanghai
|
2025-07-27 08:55:42 +08:00
|
|
|
|
2025-07-10 01:27:35 +08:00
|
|
|
# 暴露端口
|
|
|
|
|
EXPOSE 8080
|
|
|
|
|
|
|
|
|
|
# 运行应用
|
|
|
|
|
CMD ["./main"]
|