diff --git a/.github/workflows/docker-ghcr.yml b/.github/workflows/docker-ghcr.yml
new file mode 100644
index 0000000..f2719cb
--- /dev/null
+++ b/.github/workflows/docker-ghcr.yml
@@ -0,0 +1,57 @@
+name: Docker Publish (GHCR)
+
+on:
+ push:
+ branches: [main]
+ tags:
+ - 'v*'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ packages: write
+
+concurrency:
+ group: docker-ghcr-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Login to GHCR
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Extract Docker metadata
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ghcr.io/${{ github.repository }}
+ tags: |
+ type=raw,value=latest,enable={{is_default_branch}}
+ type=ref,event=tag
+
+ - name: Build and push
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ file: ./Dockerfile
+ push: true
+ platforms: linux/amd64,linux/arm64
+ labels: ${{ steps.meta.outputs.labels }}
+ tags: ${{ steps.meta.outputs.tags }}
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
diff --git a/README.md b/README.md
index eabbc44..c127bcb 100644
--- a/README.md
+++ b/README.md
@@ -406,7 +406,7 @@ npm run format
用于将生成的静态站点发布到 服务器 or CI/CD;本地构建见 [快速开始](#快速开始)。
-### 快速部署到GitHub Pages
+### 快速部署到GitHub Pages(推荐)
点击展开
@@ -453,14 +453,14 @@ npm run format
-### Docker 部署(推荐)
+### Docker 部署(可选)
点击展开
MeNav 构建后是纯静态站点(`dist/`),仓库已内置 Docker 部署文件,可直接构建并运行。
-#### 方式一:Docker Compose(推荐)
+#### 方式一:Docker Compose(常用)
1. 准备配置(首次使用):
- 按 [设置配置文件](#设置配置文件) 完成 `config/user/` 配置
@@ -497,6 +497,25 @@ docker build -t menav \
docker run -d --name menav -p 8080:80 --restart unless-stopped menav
```
+#### 使用 GHCR 预构建镜像(免本地构建)
+
+仓库已提供 `Docker Publish (GHCR)` 工作流(`.github/workflows/docker-ghcr.yml`):
+
+- 推送到 `main` 时自动发布 `latest`
+- 推送 `v*` 标签时自动发布版本标签(如 `v1.3.0`)
+- 对外标签策略:仅 `latest` 与版本标签
+
+首次启用前请在仓库设置确认:
+
+1. `Settings -> Actions -> General -> Workflow permissions` 设为 `Read and write permissions`
+2. 在 `Packages` 中将镜像可见性设为 `Public`(否则匿名用户无法拉取)
+
+发布后,用户可直接拉取并运行(将 `/` 替换为你的仓库路径):
+
+```bash
+docker run -d --name menav -p 8080:80 --restart unless-stopped ghcr.io//:latest
+```
+
### 部署到服务器