From d033bc4cc821f4192d8ae45a4ff0551ed04684f6 Mon Sep 17 00:00:00 2001 From: chinadoiphin Date: Tue, 16 Dec 2025 20:19:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Docker=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: 基于 Alpine,包含 Chromium 和中文字体 - docker-compose.yml: 配置 shm_size 和安全设置 - .dockerignore: 优化构建上下文 - README.md: 添加 Docker 部署说明 --- .dockerignore | 24 +++++++++++++++++++++ Dockerfile | 53 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 13 ++++++++++++ docker-compose.yml | 19 +++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6808676 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,24 @@ +# Git +.git +.gitignore + +# IDE +.idea +.vscode +*.swp +*.swo + +# Build artifacts +cursor2api +*.exe + +# Docs +*.md +!README.md + +# Scripts (not needed in container) +scripts/ + +# Temporary files +tmp/ +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f66ddca --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +# 构建阶段 +FROM golang:1.21-alpine AS builder + +WORKDIR /app + +# 安装构建依赖 +RUN apk add --no-cache git + +# 复制依赖文件 +COPY go.mod go.sum ./ +RUN go mod download + +# 复制源代码 +COPY . . + +# 构建 +RUN CGO_ENABLED=0 GOOS=linux go build -o cursor2api ./cmd/server + +# 运行阶段 +FROM alpine:3.19 + +WORKDIR /app + +# 安装 Chromium 和必要的依赖 +RUN apk add --no-cache \ + chromium \ + nss \ + freetype \ + harfbuzz \ + ca-certificates \ + ttf-freefont \ + font-noto-cjk \ + && rm -rf /var/cache/apk/* + +# 设置 Chromium 环境变量 +ENV BROWSER_PATH=/usr/bin/chromium-browser +ENV CHROME_BIN=/usr/bin/chromium-browser + +# 复制二进制文件 +COPY --from=builder /app/cursor2api . +COPY --from=builder /app/config.yaml . +COPY --from=builder /app/static ./static + +# 创建非 root 用户 +RUN addgroup -S appgroup && adduser -S appuser -G appgroup +RUN chown -R appuser:appgroup /app + +# 注意:Chromium 需要以特殊方式运行,暂时使用 root +# USER appuser + +EXPOSE 3010 + +CMD ["./cursor2api"] diff --git a/README.md b/README.md index ce71f9d..0bfe66c 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,19 @@ cursor2api/ ## 快速开始 +### Docker 部署 (推荐) + +```bash +# 使用 docker-compose +docker-compose up -d + +# 或者手动构建运行 +docker build -t cursor2api . +docker run -d -p 3010:3010 --shm-size=2g cursor2api +``` + +### 本地运行 + ```bash # 安装依赖 go mod tidy diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d34b2c1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.8' + +services: + cursor2api: + build: . + container_name: cursor2api + ports: + - "3010:3010" + environment: + - PORT=3010 + - BROWSER_PATH=/usr/bin/chromium-browser + volumes: + - ./config.yaml:/app/config.yaml:ro + restart: unless-stopped + # Chromium 需要的安全设置 + security_opt: + - seccomp:unconfined + # 共享内存,避免 Chromium 崩溃 + shm_size: '2gb'