From bb717faac3b99a3042789edd9eb544f3ddd73f28 Mon Sep 17 00:00:00 2001 From: clz Date: Thu, 2 Apr 2026 20:45:24 +0800 Subject: [PATCH] fix: resolve CHANGELOG.md path issue for Docker deployment - Update changelog.go to use binary directory as base path - Uses os.Executable() instead of relative path '..' - Automatically adapts to local and Docker environments - Modify server Dockerfile build context - Change context from ./server to project root (.) - Update COPY commands for new context - Add CHANGELOG.md to container image - Update AGENTS.md guidelines - Explicitly specify relative path format for file references This ensures the changelog API works correctly in both local development and Docker deployment environments. --- AGENTS.md | 2 +- docker-compose.yaml | 4 ++-- server/Dockerfile | 8 ++++++-- server/service/changelog.go | 7 +++++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index def5e4e..461e9ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -120,4 +120,4 @@ Upload: ZIP/XLSX → Extract → Convert UTF-8 CSV → Detect bill type → Dedu - **Dependencies:** Check `package.json`/`go.mod`/`requirements.txt` before adding new packages - **Tests:** Always run relevant test suite before committing changes - **Git commits:** Provide clear messages explaining the "why" of changes -- **File references:** Use `file_path:line_number` format when mentioning code locations +- **File references:** Use relative `file_path:line_number` format (e.g., `server/handler/changelog.go:12`) when mentioning code locations diff --git a/docker-compose.yaml b/docker-compose.yaml index 113c39e..a1782ef 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,8 +27,8 @@ services: # Go 后端服务 server: build: - context: ./server - dockerfile: Dockerfile + context: . + dockerfile: server/Dockerfile container_name: billai-server restart: unless-stopped ports: diff --git a/server/Dockerfile b/server/Dockerfile index 2bf9d92..acfb574 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,5 +1,6 @@ # Go 服务 Dockerfile # 多阶段构建:编译阶段 + 运行阶段 +# 构建上下文:项目根目录(docker-compose context: .) # ===== 编译阶段 ===== FROM golang:1.24-alpine AS builder @@ -10,11 +11,11 @@ WORKDIR /build ENV GOPROXY=https://goproxy.cn,direct # 先复制依赖文件,利用 Docker 缓存 -COPY go.mod go.sum ./ +COPY server/go.mod server/go.sum ./ RUN go mod download # 复制源代码并编译 -COPY . . +COPY server/ . RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o billai-server . # ===== 运行阶段 ===== @@ -35,6 +36,9 @@ ENV TZ=Asia/Shanghai COPY --from=builder /build/billai-server . COPY --from=builder /build/config.yaml . +# 复制项目根目录的 CHANGELOG.md +COPY CHANGELOG.md . + # 创建必要目录 RUN mkdir -p uploads outputs diff --git a/server/service/changelog.go b/server/service/changelog.go index 4394c7d..5db7bcb 100644 --- a/server/service/changelog.go +++ b/server/service/changelog.go @@ -20,8 +20,11 @@ func ParseChangelog() ([]ChangelogEntry, error) { // 获取项目根目录 rootDir := os.Getenv("PROJECT_ROOT") if rootDir == "" { - // 如果未设置,使用相对路径推测 - rootDir = ".." + // 使用二进制文件所在目录作为基准 + execPath, err := os.Executable() + if err == nil { + rootDir = filepath.Dir(execPath) + } } changelogPath := filepath.Join(rootDir, "CHANGELOG.md")