学习笔记搭建教程零成本搭建高速图床
Lynx Frost需求分析
我目前博客的图片都是存在博客的images文件夹里面的,每次在Typora写完文章要发布的时候都要重新整理图片路径太麻烦了,并且直接把图片都放到博客里面也不是长久之计。
我的需求
- 主打白嫖,能省就省
- 数据自主可控
- 有密码只能我一个人使用
- 在Typora里面添加图片可以自动上传到图床并替换好链接
- 有网页管理页面,我可以通过网页上传图片
方案
我想到的方案是使用 Cloudflare R2 对象存储 +CloudflareWorkers + EdgeOne +PicList
Cloudflare R2 对象存储会给每个用户10G空间,用来存图片绰绰有余。
EdgeOne 用来缓存照片,可以有效降低 Cloudflare R2 的请求命中率。
CloudflareWorkers 用来构建网页,有现成的项目可以直接修改实现。
PicList软件用于在Typora里面添加图片自动上传到图床并替换好链接。
部署教程
准备三个域名(三个子域名也可以,但主域名必须托管到CF),其中一个必须托管到CF(免费域名也可以)
一.准备CF存储桶并且配置加速链接
第一步添加R2对象存储

存储桶名称:随便写要记住之后要用
位置:选择亚太或者用默认的
第二步启用公共开发url

第三步使用EO加速

源站地址和回源 HOST 头都要填写CF给你的公共开发url,回源协议HTTPS
配置网站缓存

修改默认的404页面

<!DOCTYPE html> <html lang="zh-CN"> <head> <link rel="icon" href="https://i.itrf.cn/favicon.ico" type="image/x-icon"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>404 - 图片走丢了</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { height: 100vh; display: flex; justify-content: center; align-items: center; background: #0f172a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: #f8fafc; overflow: hidden; position: relative; } .bg-glow { position: absolute; width: 400px; height: 400px; background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); filter: blur(120px); border-radius: 50%; z-index: 0; animation: float 10s ease-in-out infinite alternate; } @keyframes float { 0% { transform: translate(-100px, -100px); } 100% { transform: translate(100px, 100px); } } .card { position: relative; z-index: 1; background: rgba(30, 41, 59, 0.7); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.1); padding: 40px 50px; border-radius: 24px; text-align: center; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3); max-width: 420px; width: 90%; } .error-code { font-size: 6rem; font-weight: 800; background: linear-gradient(to right, #60a5fa, #c084fc); -webkit-background-clip: text; -webkit-text-fill-color: transparent; line-height: 1; margin-bottom: 15px; letter-spacing: -2px; } h2 { font-size: 1.25rem; font-weight: 600; margin-bottom: 10px; color: #e2e8f0; } p { color: #94a3b8; font-size: 0.95rem; margin-bottom: 25px; line-height: 1.5; } .btn { display: inline-block; background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%); color: white; font-weight: 500; padding: 12px 28px; border-radius: 9999px; text-decoration: none; transition: all 0.3s ease; box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4); } .btn:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(59, 130, 246, 0.6); } .countdown { margin-top: 15px; font-size: 0.85rem; color: #64748b; } </style> </head> <body>
<div class="bg-glow"></div>
<div class="card"> <div class="error-code">404</div> <h2>哎呀,图片走丢了</h2> <p>你访问的链接可能已经失效,或者输入的地址有误。</p> <a href="占位符" class="btn" id="homeLink">返回主页</a> <div class="countdown"><span id="sec">5</span> 秒后自动返回主页</div> </div>
<script> let seconds = 5; const secTag = document.getElementById('sec'); const targetUrl = "占位符";
const timer = setInterval(() => { seconds--; secTag.innerText = seconds; if (seconds <= 0) { clearInterval(timer); window.location.href = targetUrl; } }, 1000); </script> </body> </html>
|
可以参考我的,占位符可以改成你想跳转的网站,可以填写之后要部署的网页的域名
在EO里面开启HTTPS,等待网站配置完成
现在就可以使用自己的域名来代替公共访问url了
只会要访问图床里面的图片直接使用这个域名就可以了
利用EO的缓存机制,可以有效减少CF的请求数
二.配置PicList实现自动上传图床
访问官网,安装软件,并完成相关配置
返回到CF R2对象存储 获取密钥

选择 对象读和写

注意密钥只会出现一次,请保存好再关闭网页
参考PicList的官方教程添加存图床,选择S3类型


下面的按照自己的需求配置吧,可以去看看官方文档,配置太多了



配置Typora实现自动上传,按照我的配置就可以了
文件->偏好设置->图像

三.部署网页
使用我二开的PixR2部署网页,新增支持图床自定义域名功能
项目文档里面有详细部署教程,下面我只做演示,推荐直接看项目文档
第一步创建CFWorkers
复制仓库里面的_worker.js里面的代码






设置完成环境变量之后需要重新部署一下Workers
第二步给网页添加自己的域名并使用EO加速
因为CFWorkers限制,我们没有办法直接加速Workers里面的添加的域名,但是经过我的研究,发现使用Workers路由可以完美解决这个问题,我们需要准备一个域名做中转,这个域名必须托管到CF
给这个域名开启小云盾,解析地址随便填写,可以填我这个

添加Workers路由,不要直接在Workers里面直接添加域名,一定要用路由!!!

打开EO添加站点
源站地址和回源 HOST 头都要填写上面设置的中转域名

等待部署完成,开启HTTPS,并且配置缓存,可以参考上面的缓存策略
站点加速 -> 规则引擎 -> 配置缓存
配置完成缓存策略可以减少CF命中次数
注意:网页加速和图床加速配置一个就可以了,当然你也可以都配置,环境变量IMAGE_DOMAIN填写就走图床地址,不填写就走网页地址,按照需求填写。
我推荐填写IMAGE_DOMAIN,这样软件上传和网页上传的返回的图片链接是一致的,详细请看项目里面对这个参数的介绍
注意点
- 源站地址和回源 HOST 头 必须一致,并且回源协议选择HTTPS
- 不能直接用EO加速Workers给你的域名或者在Workers里面添加的域名
- 必须利用Workers路由绕开限制,直接加速会出现522错误码