简介
其实网站自建设以来都是我手动复制文件添加到IPFS并手动再发布一次IPNS的,也一直想实现这么一套自动化系统,但是中文网络里面我也有并没有现成的教程,所以一直搁置,不过现在终于有时间给这套脚本写出来了。
因为涉及Hugo、Linux、Git、Cron、IPFS CLI等各种操作,虽然本教程在很多地方偷懒使用宝塔代为执行,但是本教程仅是简略复现我的操作步骤,每个步骤的教程并不一定能在其他环境下直接照搬执行,可能晦涩难懂,仅供参考,望纯小白见谅~
环境与实现方式
以下是本次配置的环境
- 安装了IPFS的宝塔服务器,检测并发布最新代码到IPFS、IPNS (此处宝塔是为了方便设置,不喜欢宝塔完全没必要)
- 负责编写Hugo的个人电脑
每次编写完Hugo并在本地测试完毕后通过Git提交到代码仓库,通过宝塔服务器上的定时任务脚本每隔一小时监测仓库是否有变化,如有则同步文件到IPFS网络并发布IPNS,以及清除之前的IPFS PIN缓存。
配置服务器
- 安装宝塔
- 服务器下载最新的适合服务器的IPFS-Kubo: https://github.com/ipfs/kubo/releases/
解压并执行install.sh安装
- 执行
- 导入或生成ipns密钥,我这里是导入我之前生成的IPNS私钥
1
|
ipfs key import <name> <key.file>
|
-
宝塔->软件商店->免费应用,安装 进程守护管理器
-
添加守护进程 启动命令:ipfs daemon 进程目录: /root/.ipfs/
-
检查ipfs是否运行成功
配置Cron脚本
- 在Hugo项目根目录创建 syncipfscron.sh 改为其他名称也可以 放入其他目录也行,因为该文件也没有过多隐私信息且我的仓库是私有,为了方便部署就直接放入仓库根目录了。
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
|
#!/bin/bash
# 定义public文件夹路径和IPNS名称
HUGO_DIR="/home/GitHub/w.cx"
PUBLIC_DIR="$HUGO_DIR/public"
IPNS_NAME="w.cx"
LAST_CID_FILE="/home/GitHub/w.cx/last_cid.txt"
# 注意这是一个定时任务,适用于服务器只用于同步IPFS文件,不在服务器上编辑Hugo只在自己电脑上通过git提交代码,才需要此步骤拉取最新的代码到服务器再由服务器上传到IPFS网络,如果你在服务器上编辑Hugo请您自行根据Git规则同步内容库并删除以下代码,否则会造成进度丢失!!!
# 拉取最新代码库
cd $HUGO_DIR
#恢复代码库,如果你同步public并重新编译了则需要这一句
#git reset --hard
if git pull | grep -q 'Already up to date'; then
echo "No changes detected."
exit 0
#如果你不信任git同步过来的通过你自己电脑上Hugo编译的public文件夹那么在这里删除掉他并用服务器的Hugo重新编译。
#else
#rm -rf "$PUBLIC_DIR"/*
#hugo --source $HUGO_DIR
fi
# 获取当前public文件夹的CID
CURRENT_CID=$(ipfs add -r -Q $PUBLIC_DIR)
# 如果last_cid.txt不存在,创建它并写入当前CID
if [ ! -f $LAST_CID_FILE ]; then
echo $CURRENT_CID > $LAST_CID_FILE
ipfs name publish --key=$IPNS_NAME $CURRENT_CID
exit 0
fi
# 读取上一个CID
LAST_CID=$(cat $LAST_CID_FILE)
# 检查是否有变动
if [ "$CURRENT_CID" != "$LAST_CID" ]; then
# 取消pin上一个CID
ipfs pin rm $LAST_CID
ipfs repo gc
# pin新的public文件夹
ipfs pin add $CURRENT_CID
# 更新IPNS
ipfs name publish --key=$IPNS_NAME $CURRENT_CID
# 更新last_cid.txt
echo $CURRENT_CID > $LAST_CID_FILE
fi
|
- 在安装了IPFS服务器上拉取Hugo储存库
- 配置宝塔计划任务
1
|
sudo -u root /home/GitHub/w.cx/syncipfscron.sh
|
- 手动执行一次并排查错误。
- 向.gitignore加入last_cid.txt要求不同步last_cid.txt 不然会影响脚本判断
总结
因为使用Hugo等编译静态博客在简中网络中实属少见,即使用Hugo等编译器又研究将博客部署到IPFS的更是少之又少。
所以本篇教程无法从Hugo的配置教程、以及IPFS的配置教程写起,当然您若是搜索到这篇教程肯定是您配置到了这一步,望能给有兴趣的您一个参考。