1173 字
6 分钟
PicGo + GitHub + Cloudflare 搭建图床
2025-12-05
2025-12-09

使用 PicGo + GitHub + Cloudflare 搭建稳定图床#

搭建图床方案:

  • PicGo v2.4.0
  • GitHub 图床仓库(Public)
  • Cloudflare CDN(通过 Cloudflare Pages Functions 实现加速)
搭建图床的作用

从零搭建这套系统,让博客 Markdown 能直接插入 CDN 外链图片,提高写作效率与站点加载速度。


一、使用到的技术栈#

组件版本用途
PicGov2.4.0本地上传图片到 GitHub
GitHub2025 平台 / Token Classic API存储图片文件
Cloudflare Pages免费版提供静态代理并加速 GitHub 图片

二、图床整体架构说明#

本图床采用 GitHub 作为存储源,PicGo 作为上传工具,并通过 Cloudflare 为图片提供 CDN 加速。

流程示意:

本地图片 → PicGo 上传 → GitHub 仓库 → Cloudflare CDN → 博客外链

最终 Markdown 图片链接示例:

![示例图片](https://你的域名/gh/<用户名>/<仓库名>/<分支名>/<图片路径>/<文件名>)

三、准备 GitHub 仓库(图床后台)#

登录 GitHub

新建一个公开仓库(必须 Public 才能被 CDN 加速)

设置:
名称:myImage
描述:用于博客图床的静态资源仓库
记录下:
<用户名>
<仓库名>
<分支名>
✔ 示例
用户名:xiaowenmimimi
仓库名:myImage
分支名:main


四、生成 GitHub Fine-grained Token#

1. 打开 Token 创建入口#

  • GitHub → 右上角头像 → Settings
  • 左侧菜单 → Developer settings
  • 选择:Personal access tokens → Fine-grained tokens
  • 点击右侧按钮:Generate new token

2. 配置 Token 基本信息#

  • Token name:PicGoUploadToken
  • Expiration:建议设置较长时间(安全起见可设置 90 天或 1 年)。
  • Resource owner:选择你的 GitHub 账号
  • Repository access:选择 Only select repositories,并勾选你的图床仓库(例如 myImage

3. 配置权限(最关键)#

关键

找到 Permissions 区域,在 Repository permissions 中 只启用两个权限

权限项选择
ContentsRead and write
MetadataRead-only(默认即可)

PicGo 上传图片只需要写入仓库内容,不需要其他敏感权限。

4. 生成 Token#

滚动到页面底部 → 点击 Generate token

GitHub 会生成一段以 github_pat_ 开头的 Token(生成后复制,只显示一次),例如:

github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


五、安装 PicGo 并配置 GitHub 图床#

PicGo 下载(官方 GitHub Releases) 使用版本:PicGo v2.4.0

打开 PicGo → 左侧“图床设置” → “GitHub”

填写以下内容:

字段内容
图床配置名填写内容
仓库名<用户名>/<仓库名> 例如 xiaowenmimimi/myImage
分支名main
Token你的 GitHub Token
存储路径img/blog/(可自定义)
自定义域名https://myimage-9r1.pages.dev/gh/xiaowenmimimi/myImage/main (Cloudflare CDN 生成的地址)

六、配置 Cloudflare CDN 加速#

在使用 Cloudflare 实现对 GitHub 图床的 CDN 加速之前,需要了解 Cloudflare 提供的 Pages Functions —— 这是 Cloudflare Pages 内置的无服务器(Serverless)函数,用于编写 API、反向代理、重写请求等逻辑,非常适合作为 GitHub 文件的中转加速层。

Cloudflare Pages Functions 官网

Cloudflare Pages 官方文档

Cloudflare Pages Functions 特点

  1. 支持边缘节点执行(比传统服务器更快)
  2. 免费额度充足(每日 100,000 次请求)
  3. 适合 GitHub 静态文件的代理加速
  4. 无需自己的服务器、无需备案

1. 新建 Cloudflare Pages 项目#

  • 在 Cloudflare 控制台:
  • 左侧菜单:Workers 和 Pages
  • 创建应用程序

  • 选择 Connect GitHub

  • 选择底部的 Get started

  • 导入现有 GitHub 仓库
  • 绑定一个仓库(我这里绑定的是刚刚新建在 GitHub 的 myImage 仓库)

  • 维持默认配置后,保存并部署

2. 创建静态代理 Functions#

GitHub 仓库文件配置

在绑定的仓库根目录下创建/functions/gh文件夹,文件夹下创建文件[[path]].js,填入以下内容:

/functions/gh/[[path]].js
export async function onRequest(context) {
// [[path]] 对应的参数名就是 path,这里会是一个数组
const segments = context.params.path || [];
const path = segments.join("/");
// 组装成 GitHub Raw 地址
const url = `https://raw.githubusercontent.com/${path}`;
const res = await fetch(url, {
headers: {
"User-Agent": "Mozilla/5.0"
}
});
return new Response(res.body, {
headers: {
"Content-Type": res.headers.get("Content-Type") || "application/octet-stream",
"Cache-Control": "public, max-age=31536000"
},
status: res.status
});
}

Cloudflare 会自动缓存资源。

3. 部署 Cloudflare Pages#

部署完成后 Cloudflare 会生成默认域名,例如:

https://your-project.pages.dev

配置使用自定义域名(可选)

例如:

https://img.xhwen.cn

只需添加 CNAME 解析到 Cloudflare Pages。

4. 最终 CDN URL 格式#

将图片从 GitHub 映射到 Cloudflare:

https://myimage-9r1.pages.dev/gh/<用户名>/<仓库名>/<分支名>/<路径>/<图片文件名>

https://myimage-9r1.pages.dev/gh/xiaowenmimimi/myImage/main/img/blog/sample_pictures.jpg
PicGo 配置修改

在 PicGo 的 GitHub 图床设置中,将 自定义域名 修改为:

https://myimage-9r1.pages.dev/gh/<用户名>/<仓库名>/<分支名>

例如:

https://img.xhwen.cn/gh/xiaowenmimimi/myImage/main

PicGo 上传后生成的 URL 自动使用 Cloudflare CDN 链接。


七、测试上传图片#

  • 拖一张图片进 PicGo

  • 上传成功后,PicGo 会返回 CDN 链接

  • 在浏览器打开检查是否正常显示


Astro 博客中的示例截图#

这里是写作过程中的一个界面:

示例图片

Fuwari 本身支持响应式图片布局,因此无需额外适配。

PicGo + GitHub + Cloudflare 搭建图床
https://fuwari.vercel.app/posts/blog/github-image-hosting-with-picgo/
作者
朗姆提子冰淇淋
发布于
2025-12-05
许可协议
CC BY-NC-SA 4.0