From 28f65a980d83ef9fccc01f0ff5cf985895b180c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Thu, 3 Sep 2026 15:25:28 +0800 Subject: [PATCH] 1 --- .dockerignore | 2 ++ Dockerfile | 12 ++++++++++-- README.md | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index c222291..ac373a1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,7 @@ .git .idea +# 运行时数据由宿主机 bind mount 提供,禁止打进镜像(镜像内快照会与宿主机数据脱节) +data workspace ui-src/node_modules ui-src/dist diff --git a/Dockerfile b/Dockerfile index b343e2f..2f8f4f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ # ==================== 阶段 1:构建前端 SPA ==================== FROM node:20-alpine AS ui +# 国内网络直连官方源不稳定,npm 走 npmmirror +ENV npm_config_registry=https://registry.npmmirror.com WORKDIR /ui COPY ui-src/package.json ui-src/package-lock.json ./ RUN npm ci @@ -8,6 +10,8 @@ RUN npm run build # ==================== 阶段 2:构建后端二进制(modernc sqlite 纯 Go,无 CGO) ==================== FROM golang:1.26 AS build +# 国内网络直连官方源不稳定,go module 走 goproxy.cn +ENV GOPROXY=https://goproxy.cn,direct WORKDIR /app COPY go.mod go.sum ./ RUN go mod download @@ -15,10 +19,14 @@ COPY . . RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o rag-local . # ==================== 阶段 3:精简运行镜像 ==================== +# 时区数据与 CA 证书直接从 golang 构建阶段拷贝,避免 apk 联网拉包(构建环境可能无外网) FROM alpine:3.20 WORKDIR /app -RUN apk add --no-cache tzdata && \ - adduser -D -u 1000 app && \ +COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +# gse 中文分词词典:LoadDict 按编译期源码位置(builder 的 /go/pkg/mod/...)逐文件加载整套 zh 词典,运行时必须同路径存在 +COPY --from=build /go/pkg/mod/github.com/go-ego/gse@v1.0.2/data/dict/zh /go/pkg/mod/github.com/go-ego/gse@v1.0.2/data/dict/zh +RUN adduser -D -u 1000 app && \ mkdir -p /app/data /app/workspace && \ chown -R app:app /app ENV TZ=Asia/Shanghai diff --git a/README.md b/README.md index 5b0a62e..b53c68b 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,12 @@ docker compose up -d --build ``` +> **Linux 服务器首次部署前**:`data/` 与 `workspace/` 由宿主机 bind mount 提供(相对 compose 文件目录,迁移时连目录内容一起拷贝)。若目录尚不存在或由 root 创建,容器内 `app` 用户(uid 1000)将无法写入 SQLite,须先执行: +> ```bash +> mkdir -p data workspace && chown -R 1000:1000 data workspace +> ``` +> 迁移已有数据后还须检查 `data/system.db` 中 `model_config` 表的 `endpoint_url`:表里存的若是 `127.0.0.1`,在新机器上会指向自身,应改为实际模型服务可达地址。 + - 浏览器打开 http://localhost:8080 - 启动日志中查看访问令牌(`docker compose logs rag-local` 搜索"访问令牌") - 登录后按以下流程使用: