From 93e958c62ee8e4c77b4504260142f7db7b271b98 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 08:17:44 +0000 Subject: [PATCH 1/4] chore: add GitHub Actions workflow for GHCR image build and push Agent-Logs-Url: https://github.com/GoJam11/LLMRelayService/sessions/cb430950-3164-459d-ad3f-ae671e3ad21a Co-authored-by: GoJam11 <2662893+GoJam11@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 58 ++++++++++++++++++++++++++++ changelog/2026-04-30.md | 9 +++++ 2 files changed, 67 insertions(+) create mode 100644 .github/workflows/docker-publish.yml create mode 100644 changelog/2026-04-30.md diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..bdb9547 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,58 @@ +name: Build and Push Docker Image to GHCR + +on: + push: + branches: + - main + tags: + - "v*.*.*" + pull_request: + branches: + - main + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,prefix=sha-,format=short + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/changelog/2026-04-30.md b/changelog/2026-04-30.md new file mode 100644 index 0000000..be5e32b --- /dev/null +++ b/changelog/2026-04-30.md @@ -0,0 +1,9 @@ +# 2026-04-30 + +### 新增 + +- 添加 GitHub Actions 工作流 `.github/workflows/docker-publish.yml`,使用 GHCR(`ghcr.io`)自动构建并推送 Docker 镜像: + - 触发条件:推送到 `main` 分支、推送语义版本 tag(`v*.*.*`)、以及针对 `main` 的 Pull Request(仅构建不推送) + - 使用 `docker/metadata-action` 自动生成 tag(branch、semver、short SHA) + - 启用 GitHub Actions 缓存加速构建(`cache-from/cache-to: type=gha`) + - 使用内置 `GITHUB_TOKEN` 进行 GHCR 认证,无需额外配置 Secret From fee82901e51517b0e789e18a5e2c6616a8dfd46e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:05:11 +0000 Subject: [PATCH 2/4] docs: update README Docker section with GHCR image info and badge Agent-Logs-Url: https://github.com/GoJam11/LLMRelayService/sessions/44498689-80f0-4a37-a3f2-46bbae5710b0 Co-authored-by: GoJam11 <2662893+GoJam11@users.noreply.github.com> --- README.md | 38 +++++++++++++++++++++++++++++++++----- changelog/2026-04-30.md | 4 ++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7291912..ca09f23 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Bun](https://img.shields.io/badge/runtime-Bun-black)](https://bun.sh) [![TypeScript](https://img.shields.io/badge/language-TypeScript-blue)](https://www.typescriptlang.org) +[![Docker Image](https://img.shields.io/badge/ghcr.io-gojam11%2Fllmrelayservice-blue?logo=docker)](https://github.com/GoJam11/LLMRelayService/pkgs/container/llmrelayservice) LRS 是一个基于 **Bun + Hono** 的轻量 LLM 中继服务。它将多个 AI 服务商统一在单一入口下,配合内置的 Web 控制台,让你精确观测每一笔请求的延迟、Token 用量与缓存命中情况。 @@ -122,16 +123,43 @@ Railway / Render 等平台部署时构建命令同上。 ### Docker 部署 +每次推送到 `main` 分支或发布版本 tag 时,CI 会自动将镜像推送到 GHCR: + +``` +ghcr.io/gojam11/llmrelayservice:main # 最新 main 分支 +ghcr.io/gojam11/llmrelayservice:1.2.3 # 指定版本 +ghcr.io/gojam11/llmrelayservice:1.2 # 最新 1.2.x +``` + +#### 使用预构建镜像(推荐) + +将 `docker-compose.yml` 中的 `build: .` 替换为 GHCR 镜像地址: + +```yaml +# docker-compose.yml +services: + app: + image: ghcr.io/gojam11/llmrelayservice:main # 替换这一行 + # build: . # 注释掉本地构建 +``` + +然后启动: + ```bash -# 1. 复制并配置环境变量 cp .env.example .env # 至少设置 GATEWAY_API_KEY(PASSWORD 可选) - -# 2. 启动服务(包含内置 PostgreSQL) GATEWAY_API_KEY=your-key docker compose up -d +``` + +#### 从源码本地构建 + +```bash +# 复制并配置环境变量 +cp .env.example .env +# 至少设置 GATEWAY_API_KEY(PASSWORD 可选) -# 或者使用 .env 文件 -docker compose up -d +# 启动服务(包含内置 PostgreSQL,自动本地构建镜像) +GATEWAY_API_KEY=your-key docker compose up -d ``` 访问 `http://localhost:3000` 打开控制台。 diff --git a/changelog/2026-04-30.md b/changelog/2026-04-30.md index be5e32b..45018ab 100644 --- a/changelog/2026-04-30.md +++ b/changelog/2026-04-30.md @@ -7,3 +7,7 @@ - 使用 `docker/metadata-action` 自动生成 tag(branch、semver、short SHA) - 启用 GitHub Actions 缓存加速构建(`cache-from/cache-to: type=gha`) - 使用内置 `GITHUB_TOKEN` 进行 GHCR 认证,无需额外配置 Secret +- 更新 `README.md` 部署指南同步 GHCR 镜像信息: + - 顶部徽章区新增 GHCR 镜像徽章 + - Docker 部署章节新增"使用预构建镜像(推荐)"说明,包含镜像地址(`main`、semver、`major.minor` tag)及替换 `docker-compose.yml` 的步骤 + - 保留原有本地 `build: .` 方式作为从源码构建的备选 From e8de9cf8545c1a7b9fc9ff9d3658e3597661fb0b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:10:13 +0000 Subject: [PATCH 3/4] docs: simplify Docker section in README, default compose to GHCR image Agent-Logs-Url: https://github.com/GoJam11/LLMRelayService/sessions/6e596f8a-3599-42e7-a6e9-de115a59b0a7 Co-authored-by: GoJam11 <2662893+GoJam11@users.noreply.github.com> --- README.md | 35 ++--------------------------------- changelog/2026-04-30.md | 6 +++--- docker-compose.yml | 2 +- 3 files changed, 6 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index ca09f23..045af29 100644 --- a/README.md +++ b/README.md @@ -123,42 +123,11 @@ Railway / Render 等平台部署时构建命令同上。 ### Docker 部署 -每次推送到 `main` 分支或发布版本 tag 时,CI 会自动将镜像推送到 GHCR: - -``` -ghcr.io/gojam11/llmrelayservice:main # 最新 main 分支 -ghcr.io/gojam11/llmrelayservice:1.2.3 # 指定版本 -ghcr.io/gojam11/llmrelayservice:1.2 # 最新 1.2.x -``` - -#### 使用预构建镜像(推荐) - -将 `docker-compose.yml` 中的 `build: .` 替换为 GHCR 镜像地址: - -```yaml -# docker-compose.yml -services: - app: - image: ghcr.io/gojam11/llmrelayservice:main # 替换这一行 - # build: . # 注释掉本地构建 -``` - -然后启动: - -```bash -cp .env.example .env -# 至少设置 GATEWAY_API_KEY(PASSWORD 可选) -GATEWAY_API_KEY=your-key docker compose up -d -``` - -#### 从源码本地构建 - ```bash -# 复制并配置环境变量 +# 1. 复制并配置环境变量(至少设置 GATEWAY_API_KEY,PASSWORD 可选) cp .env.example .env -# 至少设置 GATEWAY_API_KEY(PASSWORD 可选) -# 启动服务(包含内置 PostgreSQL,自动本地构建镜像) +# 2. 启动服务(包含内置 PostgreSQL) GATEWAY_API_KEY=your-key docker compose up -d ``` diff --git a/changelog/2026-04-30.md b/changelog/2026-04-30.md index 45018ab..2c38fe0 100644 --- a/changelog/2026-04-30.md +++ b/changelog/2026-04-30.md @@ -7,7 +7,7 @@ - 使用 `docker/metadata-action` 自动生成 tag(branch、semver、short SHA) - 启用 GitHub Actions 缓存加速构建(`cache-from/cache-to: type=gha`) - 使用内置 `GITHUB_TOKEN` 进行 GHCR 认证,无需额外配置 Secret -- 更新 `README.md` 部署指南同步 GHCR 镜像信息: +- 更新 `README.md` 及 `docker-compose.yml` 完善 Docker 部署指南: + - `docker-compose.yml` 改为默认使用 GHCR 预构建镜像(`ghcr.io/gojam11/llmrelayservice:main`) + - README Docker 部分精简为纯用户视角的启动步骤,去除 CI 内部细节与本地构建说明 - 顶部徽章区新增 GHCR 镜像徽章 - - Docker 部署章节新增"使用预构建镜像(推荐)"说明,包含镜像地址(`main`、semver、`major.minor` tag)及替换 `docker-compose.yml` 的步骤 - - 保留原有本地 `build: .` 方式作为从源码构建的备选 diff --git a/docker-compose.yml b/docker-compose.yml index 5cbfc01..dcf64c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: app: - build: . + image: ghcr.io/gojam11/llmrelayservice:main ports: - "3000:3000" environment: From 547b45ccd62afbc3945f8ec23a66300c6a446c12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:23:18 +0000 Subject: [PATCH 4/4] ci: opt-in FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 for Node.js 24 compatibility Agent-Logs-Url: https://github.com/GoJam11/LLMRelayService/sessions/f1184f25-94a9-48b9-86d7-88d41a2086ba Co-authored-by: GoJam11 <2662893+GoJam11@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 1 + changelog/2026-04-30.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index bdb9547..833213e 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -13,6 +13,7 @@ on: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: build-and-push: diff --git a/changelog/2026-04-30.md b/changelog/2026-04-30.md index 2c38fe0..787cefc 100644 --- a/changelog/2026-04-30.md +++ b/changelog/2026-04-30.md @@ -11,3 +11,4 @@ - `docker-compose.yml` 改为默认使用 GHCR 预构建镜像(`ghcr.io/gojam11/llmrelayservice:main`) - README Docker 部分精简为纯用户视角的启动步骤,去除 CI 内部细节与本地构建说明 - 顶部徽章区新增 GHCR 镜像徽章 +- `.github/workflows/docker-publish.yml` 新增 `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true`,主动 opt-in Node.js 24 运行时(强制切换时间:2026-06-02)