w.cx
w.cx is Rocco’s blog.

优化站点IPFS访问速度:让闲置的服务器自动pin本站IPNS地址,并做到新旧内容更新!

Posted on Jun 10, 2024

简介

前文介绍了本站如何利用自动化脚本实现自动将本站每次新编译的内容发布到IPFS网络并自动在自己的服务器上pin,然而官方默认配置的情况下IPFS节点清除缓存的时间只有1个小时,如果只有一个节点pin了本站的内容的话可能会大大增加IPFS寻址时间(显然本站目前不可能做到大量的IPFS访问保持热度)。将站点的IPNS交给好友或者他人pin其实也并不现实,如可以委托朋友在他的IPFS节点上执行 ipfs pin add /ipns/w.cx 但是这只能pin当前网站的版本,如果网站更新了还需要让他们重新执行pin命令,并且为了清理垃圾,还要找到原来pin的cid并清理掉,这一点也不优雅,也不可靠,靠这种方式站点更新后也无法为站点带来任何效益。

刚好我有许多闲置的不同地域国内外的服务器,刚好给他们部署上IPFS并编写自动化pin的脚本,并写出过程供大家参考。

配置环境

以下是本次配置的环境

  • 安装了宝塔的闲置服务器(此处宝塔是为了方便设置,不喜欢宝塔完全没必要)

配置服务器

  1. 服务器下载最新的适合服务器的IPFS-Kubo: https://github.com/ipfs/kubo/releases/ 解压并执行install.sh安装
  2. 执行
1
2
ipfs init --profile server
#服务器不在数据中心或是本地电脑不需要--profile server
  1. 宝塔->软件商店->免费应用,安装 进程守护管理器
  2. 添加守护进程 启动命令:ipfs daemon 进程目录: /root/.ipfs/ image-1
  3. 检查ipfs是否运行成功

配置Cron脚本

  1. 创建 ipfsautosync.sh 我是放入了/home/ipfs/,至于这个文件需要放到哪里其实很随意。
 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
#!/bin/bash

# IPNS 记录
IPNS_RECORD="/ipns/w.cx"
# 用于保存上一次 IPFS 哈希值的文件
LAST_HASH_FILE="/home/ipfs/last_ipfs_hash"

# 获取当前 IPFS 哈希值
get_current_ipfs_hash() {
    ipfs name resolve "$IPNS_RECORD" 2>/dev/null
}

# 更新 Pin
pin_ipfs_hash() {
    local ipfs_hash=$1
    ipfs pin add "$ipfs_hash"
}

# 取消 Pin
unpin_ipfs_hash() {
    local ipfs_hash=$1
    ipfs pin rm "$ipfs_hash"
    ipfs repo gc
}

# 读取上一次保存的 IPFS 哈希值,如果文件不存在则初始化为空字符串
if [ -f "$LAST_HASH_FILE" ]; then
    LAST_IPFS_HASH=$(cat "$LAST_HASH_FILE")
else
    LAST_IPFS_HASH=""
fi

# 获取当前 IPFS 哈希值
CURRENT_IPFS_HASH=$(get_current_ipfs_hash)

# 如果获取到的当前哈希值不为空且与上一次不同,进行 Pin 操作并保存新的哈希值
if [ -n "$CURRENT_IPFS_HASH" ] && [ "$CURRENT_IPFS_HASH" != "$LAST_IPFS_HASH" ]; then
    echo "IPFS hash changed: $CURRENT_IPFS_HASH"
    if [ -n "$LAST_IPFS_HASH" ]; then
        unpin_ipfs_hash "$LAST_IPFS_HASH"
        echo "Unpinned: $LAST_IPFS_HASH"
    fi
    pin_ipfs_hash "$CURRENT_IPFS_HASH"
    echo "Pinned: $CURRENT_IPFS_HASH"
    echo "$CURRENT_IPFS_HASH" > "$LAST_HASH_FILE"
fi
  1. 配置宝塔计划任务
1
sudo -u root bash /home/ipfs/ipfsautosync.sh

image-1

  1. 手动执行一次并排查错误。

总结

因为使用Hugo等编译静态博客在简中网络中实属少见,即使用Hugo等编译器又研究将博客部署到IPFS的更是少之又少。 所以本篇教程无法从Hugo的配置教程、以及IPFS的配置教程写起,当然您若是搜索到这篇教程肯定是您配置到了这一步,望能给有兴趣的您一个参考。