自动化版图床保姆级搭建教程:B2/又拍云+Cloudflare+GitHub Action
微博图床倒下了,之前阿斌使用B2(Backblze)+CloudFlare
弄了一个图床,弄好了,但是没写教程,趁着还没忘记,先写下来,方便自己以及大家参考使用。
那图床搭好了,GitHub有啥用呢?
之前阿斌使用的GitHub+jsDelivr(已被墙),所有照片都在GitHub上,阿斌就想有没有直接将GitHub同步到B2,Github不缺大佬,还真有!
下面就跟着阿斌一起来操作吧!真可谓一劳永逸!
准备资源
PS:已有账号的,忽略注册,直接登录即可
- 一个域名(可以修改DNS,不作为主要域名)
- Backblaze:注册账号,不能访问,富强试试
- Cloudflare:注册账号
- GitHub:注册账号
教程
Backblaze 设置
-
创建一个桶(Bucket),配置如下,点击创建即可。
名称(Bucket Unique Name):任意英文 Files in Bucket are:Public Default Encryptio:Disable
-
上传一张照片到桶里,点击照片即可查看图片信息,复制
友好URL
,格式如下:https://f004.backblazeb2.com/file/<桶名称>/<文件夹>/<文件名称> 域名(后面会用到):f004.backblazeb2.com(这个地方可能不一样,按自己的设置即可)
-
桶设置(Bucket Settings)- Bucket Info:
{"cache-control":"max-age=720000"}
CloudFlare 设置
-
添加站点,按步骤操作,去域名厂商修改DNS(阿里云:控制台 - 域名 - 域名列表 - 域名后的
管理
- DNS管理 - DNS修改 - 修改DNS服务器),生效时间24-48小时,设置完过一段时间去ClouFlare检验一下,通过则表示设置成功。 -
在域名的设置页面,点击左侧:
SSL/TLS
,加密模式:完全(严格)
-
点击左侧:
DNS
,添加一条CNAME
记录,名称:任意,内容:Backblaze图片的域名
-
点击左侧:
规则
,创建页面规则URL:https://
.<自己的域名>/file/<桶名称>/* 选取设置:缓存级别 缓存级别:标准 选取设置:边缘缓存 TTL 输入边缘缓存 TTL:1 个月 URL:https://
.<自己的域名>/* 转发URL:301-永久重定向 输入目标URL:https://f004.backblazeb2.com/file/<桶名称>/$1 -
规则 - 转换规则 - 创建规则
自定义筛选表达式 字段:主机名 运算符:等于 值:
.<自己的域名> 重写到:Dynamic concat("/file/<桶名称>", http.request.uri.path) 保留
验证
替换后的地址仍能显示原图片代表配置成功了。
https://f004.backblazeb2.com/file/<桶名称>/<文件夹>/<文件名称>
替换后:https://<CNAME名称>.<自己的域名>/<文件夹>/<文件名称>
GitHub同步到Backblaze
-
在 GitHub 打开 Actions 权限
-
点击顶部导航:Action - New workflow - Configure(Simple workflow)
-
将
.yml
文件内容清空,替换为如下内容,保存。触发条件:每次push(提交)
文件自动执行,具体参数说明可参考此仓库:backblaze-b2-actionname: Sync B2 Bucket on: push jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - run: rm -rf /github/workspace/.git/ && rm -rf /github/workspace/.github - uses: alximy/backblaze-b2-action@master env: # SOURCE_DIR:文件夹路径,此处设置的是仓库的根目录,/里面包含系统文件,不是真正的仓库文件夹路径 SOURCE_DIR: '/github/workspace' B2_BUCKET: ${{ secrets.B2_BUCKET }} B2_APPKEY_ID: ${{ secrets.B2_APPKEY_ID }} B2_APPKEY: ${{ secrets.B2_APPKEY }}
-
Backblaze 获取 B2_APPKEY_ID 和 B2_APPKEY:App Keys - Add a New Application Key - 名称:随意,权限:All - Create New Key
B2_APPKEY: Backblaze里的applicationKey B2_APPKEY_ID: Backblaze里的keyID
-
GitHub 新增 Action 变量: Settings - Action - New repository secret - Name:冒号前的内容,Secret:冒号后的内容 - Add secret
B2_BUCKET: b2://<桶名称>/
验证
在本地用上传工具上传到GitHub,查看Action是否运行
,运行成功后查看Backblaze是否有文件
。
- 运行成功、有文件:代表配置没问题
- 运行失败:查看报错并解决
GitHub同步到又拍云
没有又拍云的站长可以申请一下 又拍云联盟:免费 10G 存储空间+15G CDN流量
此处省略了创建云存储的步骤,没有云存储的,可以参考 官方文档
-
又拍云获取
服务名称
、操作员
、操作员密码
:头像 - 账户管理 - 添加操作员 - 操作员:自己记住的名称,密码:生成并复制
,权限:全部打勾✔
- 创建 -
授权:管理 - 添加自己的云存储,将下面的变量添加到GitHub Action(参考
GitHub同步到Backblaze
第5
步)BUCKET: 就是授权的云存储名称 OPERATOR: 上面的操作员名称 OPERATOR_PASSWORD: 上面生成的密码
-
GitHub:参考
GitHub同步到Backblaze
,创建一个 Action.yml
文件,内容如下:name: Sync Upyun Bucket on: push: branches: - main env: TZ: Asia/Shanghai # 设置当前环境时区 jobs: deploy: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@master - run: rm -rf /github/workspace/.git/ && rm -rf /github/workspace/.github - uses: dongyubin/upyun-upx-action@main env: bucket: ${{ secrets.BUCKET }} operator: ${{ secrets.OPERATOR }} operator_password: ${{ secrets.OPERATOR_PASSWORD }} # 此处改为自己的仓库路径 local_path: /home/runner/work/<仓库名称>/<仓库名称> # 此处改为又拍云的存储路径 remote_path: /<又拍云存储路径>/
验证
在本地用上传工具上传到GitHub,查看Action是否运行
,运行成功后查看又拍云是否有文件
。
- 运行成功、有文件:代表配置没问题
- 运行失败:查看报错并解决
GitHub同步到UnRaid
UnRaid 提前安装好兰空图床,通过兰空图床服务来做图床
备份是通过SSH
+ rsync 命令进行的,Github Action参考:Burnett01/rsync-deployments
# 一路回车,不需要输入密码,邮箱改为自己的
ssh-keygen -t rsa -C "[email protected]"
会生成 id_pub(私钥)、id_pub.pub(公钥) 两个文件
cat ~/.ssh/id_pub.pub >> ~/.ssh/authorized_keys
Github Action文件内容如下:
name: Sync To UnRaid
on: push
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- run: rm -rf /github/workspace/.git/ && rm -rf /github/workspace/.github
- uses: burnett01/[email protected]
with:
switches: -avzhP --update
path: ./
remote_path: ${{ secrets.DEPLOY_PATH }}
remote_host: ${{ secrets.DEPLOY_HOST }}
remote_port: ${{ secrets.DEPLOY_PORT }}
remote_user: ${{ secrets.DEPLOY_USER }}
remote_key: ${{ secrets.DEPLOY_KEY }}
在GitHub Action添加下面几个变量:(参考 GitHub同步到Backblaze
第 5
步)
- DEPLOY_PATH:服务器上的路径
- DEPLOY_HOST:远程主机IP/域名
- DEPLOY_PORT:远程端口,默认为:22
- DEPLOY_USER:远程用户
- DEPLOY_KEY:远程SSH秘钥(上面的私钥)
验证
在本地用上传工具上传到GitHub,查看Action是否运行
,运行成功后查看UnRaid是否有文件
。
- 运行成功、有文件:代表配置没问题
- 运行失败:查看报错并解决
总结
教程写完了,阿斌把所有的坑🕳都踩完了,已去坑,放心使用,如果不能运行,请再来一遍。
如果你觉得不错的话,给个免费的赞或者评论一下,这是对阿斌最大的支持。
你觉得这篇文章怎么样?
小熊
cf、github果然好东西呀
斌仔
万能的gayhub
美樂地
感谢大佬的教程,这样可以实现在三个地方备份了
斌仔
写完之后又折腾了一把又拍云,又多了一个地方备份,等着更上
小N同学
这玩意速度应该不是很好,但是是免费的哈哈哈
斌仔
速度可能慢点,免费要啥自行车啊
羽熙
请问进行桶设置(Bucket Settings)- Bucket Info:{“cache-control”:”max-age=720000"}时候提示Invalid json object要怎么解决
斌仔
可能是引号的问题,都设置为英文引号试试
koobai
增加一个github同步到多吉云的教程吧~