Twikoo评论+PicList+R2图床:博客评论图片上传与CDN加速最佳实践

首先我们使用进行演示搭建服务的机器是YXVM提供,感谢大善人的赞助。

NodeSupport计划是NodeSeek社区和合作商家主导的免费服务器赞助计划,为高质量博客、开源项目、tg频道、App等持续提供优质稳定的服务器资源。
为了规范化、透明化赞助和审批流程,我们开发了审批管理系统,用于处理免费机器的申请、续期、答疑、建议和检举投诉。
目前NodeSupport的vps服务器资源由YxVM大力赞助,项目处于试运营状态NodeSupport计划申请

博主前言

  • 博主我呢是对容器一点不熟悉,我也搜索过,hexo博客评论系统接入picgo-server服务,基本没有找到相关的文章,只能自己折腾,最终实现了自己想要的效果。这篇博文完整记录了我的操作流程,希望能为和我一样的新手小白提供参考和帮助,大佬无视,教程中有什么优化的可以提出指正。

界面预览

事前准备

  • 域名(必须,你也可以使用免费域名)
  • 已经开通R2储存功能(必须
  • 博客(必须,或接入Twikoo评论系统的其他站点)
  • 一台安装了1Panel的服务器(必须,没有可以试着去NodeSupport计划申请

部署教程

创建容器

  1. 容器创建容器
    创建容器

    创建容器

  2. 容器参数

    plaintext
    1
    2
    3
    4
    5
    6
    7
    8
    容器名称=piclist  “名称随你设置”
    镜像勾选手动输入=kuingsmile/piclist:latest
    端口暴露端口:
    服务器=36677 容器=36677 协议=tcp
    挂载:“本机目录随你设置,我放在opt/zrf,这个文件夹下”
    本机目录=/opt/zrf/piclist 权限=读写 容器目录=/root/.piclist
    Command=node /usr/local/bin/picgo-server -k piclist123456 “其中 piclist123456 这个是上传的密码随你设置”
    Entrypoint=docker-entrypoint.sh
  3. 如图所示,我没写的都默认即可。全部参数填写完毕点击右下角的 确认
    创建容器2

    创建容器2

    创建容器3
    创建容器3

  4. 好等待容器 状态 变为 已启动
    容器状态已启动

    容器状态已启动

  5. 浏览器打开:http://你的服务器ip:36677 可以看到这样的内容就说明你的服务正确的启动了。
    浏览服务

    浏览服务

  6. 接下来,打开 系统文件 打开你前面创建的本机目录的路径,你我的可能不一样,进入你设置的目录,打开 config.json 配置文件替换下方的json内容。
    config.json

    config.json

  7. config.json 文件内容

  • 这些配置内容,是你开通了R2图床才有这些数据,我们先复制进去找到一个参数填写一个参数进去。

config.json 文件内容

config.json 文件内容

json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{
"picBed": {
"current": "aws-s3-plist",
"uploader": "aws-s3-plist",
"aws-s3-plist": {
"_configName": "随意填写",
"accessKeyID": "访问密钥 ID",
"secretAccessKey": "机密访问密钥",
"bucketName": "你的储存桶名",
"uploadPath": "blog/{timestamp}.{extName}",
"endpoint": "为 S3 客户端使用管辖权地特定的终结点",
"urlPrefix": "https://webp.001315.xyz",
"pathStyleAccess": false,
"rejectUnauthorized": false,
"acl": "public-read",
"disableBucketPrefixToURL": false
}
},
"settings": {
"autoRename": true,
"rename": true,
"useWebp": true
},
"buildIn": {
"compress": {
"quality": 50,
"isConvert": true,
"convertFormat": "webp",
"isReSize": false,
"reSizeWidth": 500,
"reSizeHeight": 500,
"skipReSizeOfSmallImg": false,
"isReSizeByPercent": false,
"reSizePercent": 50,
"isRotate": false,
"rotateDegree": 0,
"isRemoveExif": true,
"isFlip": false,
"isFlop": false,
"formatConvertObj": {
"png": "webp",
"jpg": "webp",
"jpeg": "webp",
"bmp": "webp",
"tiff": "webp",
"heic": "webp",
"webp": "webp"
}
},
"watermark": {
"isAddWatermark": false,
"watermarkType": "text",
"isFullScreenWatermark": false,
"watermarkDegree": 0,
"watermarkText": "",
"watermarkFontPath": "",
"watermarkScaleRatio": 0.15,
"watermarkColor": "#CCCCCC73",
"watermarkImagePath": "",
"watermarkPosition": "southeast"
}
},
"picgoPlugins": {}
}

创建储存桶

  1. 获取R2储存桶设置参数。如果你还没有创建储存桶就创建一个。
    创建储存桶

    创建储存桶

  2. 选择美国西部的话,可以使用 WebP 云服务缓存 来加快的你图片访问速度。我之前创建过名为img的储存桶就不创建了。名字你随意取。
    创建储存桶2

    创建储存桶2

获取储存桶Token并填入config.json配置

参数:

  1. configName=随意填写
  2. bucketName=你的储存桶名,
  3. uploadPath=blog/{timestamp}.{extName},其中的blog是在这个桶中创建一个 blog文件图片存在在这个目录,你也可以设置为: {fileName}.{extName} 就是放在根目录。
  • 每个对应填写到你的config.json配置中,例子:
    json
    1
    2
    3
    "bucketName": "img",
    "uploadPath": "blog/{timestamp}.{extName}",
    "endpoint": "https://xxxxxxxxxxxxx.r2.cloudflarestorage.com",

获取储存桶Token

  1. 回到创建储存桶的页面选择API管理API令牌 创建 用户 API 令牌
    用户 API 令牌1

    用户 API 令牌1

    用户 API 令牌2
    用户 API 令牌2

  2. 创建完成这个页面的Token值都找个地方保存一下,这些令牌值不会再次显示,如果你下次使用忘记就得重新创建。
    用户 API 令牌 Token

    用户 API 令牌 Token

  3. urlPrefix=可以是你的储存桶的自定义域名也可以是 WebP 云服务缓存 服务的分配的域名或者你其中设置的自定义域名。

  • 因为博客的评论功能的图片并不是使用率非常高的,基本 WebP 云服务缓存 所提供的免费计划基本已经够用了。

R2储存桶 自定义域名

R2储存桶 自定义域名

设置 WebP 云服务缓存服务

  1. 打开 https://dashboard.webp.se/ 注册并登录账号就不演示了,创建代理代理名称=随意设置,源站地址=你R2储存桶的自定义域名
    WebP 云服务缓存服务1

    WebP 云服务缓存服务1

  2. 可以在这里设置自定义域名,根据平台的提示进行设置解析和TXT验证,等一会,激活就行,或者也可以使用平台分配的域名 https://b7038d2.webp.li 这样的,反正最终,你需要填写的 urlPrefix=代理地址(如果你不使用这个缓存服务就是你的储存桶的自定义域名
    WebP 云服务缓存服务2

    WebP 云服务缓存服务2

  3. 到此所有的config.json配置参数都获得并填写。右下角确定保存配置!
    WebP 云服务缓存服务3

    WebP 云服务缓存服务3

配置域名并安装证书

配置域名

  1. 给这个服务配置域名,我设置为:picgo-server.zrf.me 解析到你的服务器ip保存。
    配置域名

    配置域名

  2. 先确定你的容器内网ip及端口,我的是172.17.0.2:36677
    容器内网ip及端口

    容器内网ip及端口

  3. 来到 1panel网站网站创建反向代理主域名=你自己刚设置的域名。代理地址=172.17.0.2:36677(以你的为准)
    反向代理

    反向代理

安装证书

  1. 接下来回到 1panel网站证书DNS账户创建名称随你设置,因为我的域名托管到 cloudflare中的。选择类型为cloudflareEMAIL就是你cloudflare账号的邮箱。
    安装证书1

    安装证书1

    安装证书2
    安装证书2

  2. API Token 获取,我们打开 https://dash.cloudflare.com/ 首页 右上角 配置文件
    API Token

    API Token

  3. API令牌创建令牌 选择 编辑区域 DNS 点击 使用模板区域资源 选择 所有区域创建令牌 得到的 用户 API 令牌 填入 DNS账户API Token
    API Token2

    API Token2

    API Token3
    API Token3

    API Token4
    API Token4

  4. 从网站中获取 选你的这个域名,然后确定就可以申请了。日志显示:申请 [picgo-server.zrf.me] 证书成功!! 这就申请成功了。
    证书成功

    证书成功

    证书成功
    证书成功

  5. 来到 1panel网站网站配置 → 如图设置然后保存。
    配置证书

    配置证书

    配置证书
    配置证书

  6. 重启容器(很重要)
    重启容器

    重启容器

  7. 然后浏览器可以打开你的域名:https://picgo-server.zrf.me/ 显示我这样的就对的,到此所有的picgo-server服务安装完成

配置博客Twikoo评论

  1. IMAGE_CDN_URL=你自己刚设置的域名,IMAGE_CDN_TOKEN=之前步骤的这个其中 piclist123456 这个是上传的密码随你设置,然后保存,去测试上传是否正常。
    配置博客Twikoo评论

    配置博客Twikoo评论

  2. https://blog.zrf.me/message/ 效果浏览。我发现大图上传不了还是咋回事。有几张失败。
    上传后的直链地址:https://webp.001315.xyz/blog/1746733312.webp
    测试上传图片

    测试上传图片

  3. 完结撒花。

相关链接

NodeSupport计划申请:https://support.nodeget.com/page/promotion?id=116

GitHub PicList:https://github.com/Kuingsmile/PicList

WebP 云服务缓存服务:https://dashboard.webp.se/