32 lines
963 B
Docker
32 lines
963 B
Docker
# ==================== 阶段 1:构建前端 SPA ====================
|
||
FROM node:20-alpine AS ui
|
||
WORKDIR /ui
|
||
COPY ui-src/package.json ui-src/package-lock.json ./
|
||
RUN npm ci
|
||
COPY ui-src/ ./
|
||
RUN npm run build
|
||
|
||
# ==================== 阶段 2:构建后端二进制(modernc sqlite 纯 Go,无 CGO) ====================
|
||
FROM golang:1.26 AS build
|
||
WORKDIR /app
|
||
COPY go.mod go.sum ./
|
||
RUN go mod download
|
||
COPY . .
|
||
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o rag-local .
|
||
|
||
# ==================== 阶段 3:精简运行镜像 ====================
|
||
FROM alpine:3.20
|
||
WORKDIR /app
|
||
RUN apk add --no-cache tzdata && \
|
||
adduser -D -u 1000 app && \
|
||
mkdir -p /app/data /app/workspace && \
|
||
chown -R app:app /app
|
||
ENV TZ=Asia/Shanghai
|
||
COPY --from=build /app/rag-local /app/rag-local
|
||
COPY --from=build /app/config.yml /app/config.yml
|
||
COPY --from=ui /ui/dist /app/ui-src/dist
|
||
USER app
|
||
EXPOSE 8080
|
||
VOLUME ["/app/data", "/app/workspace"]
|
||
ENTRYPOINT ["/app/rag-local"]
|