尝试制作ipfs自动pin服务

简介

经过了使用 IPFS 大概两周的时间，慢慢了解了 IPFS 的运作原理。 刚开始使用 Planet 的时候对于这个概念完全不了解，导致了博客经常没有反应，甚至访问公网 gateway 会超时。一直认为这个服务不是很稳定

解决方案 - filebase

首先需要更多的朋友来帮助 pin 一下你，据了解 pin 的操作 只是对当前的 CID 进行了 pin，如果内容有所更改还是需要 pin 一下。 Planet 进行了一番更新，我们可以使用 filebase 来帮我们完成事情，Planet 发布完文章 一定要多留一会儿，这样 filebase 会把你的文章 pin 在互联网上。因为 IPFS 有个 GC 的特性，这个特性导致不是很频繁访问的资源会失效，所以这个 pin 的操作还是很重要的。

私房解决方案

思路如下，下载安装 ipfs，把 ipfs 设置成系统服务，这样每次开机的时候都可以启动。还要把 ipfs pin 加入到计划任务，让 ipfs 自动帮我们完成 pin 的操作。
到目前为止，自己的服务器安装了 IPFS 的操作，并把 qfdka.eth 做了一番操作，现在给我的好几个服务器就安装了 ipfs，包括 两台国内服务器，两台德国服务器，甚至美国服务器也有安装。 这些希望自动化一下，于是乎自己写了一个一键脚本：

看起来还是很不错的吧，不过还是有修改空间的，贴出来一部分，帮助到的朋友可以来点个赞那

Copy
#!/bin/bash
FILE_NAME="kubo_v0.16.0_linux-amd64.tar.gz"
DOMAIN="qfdka.eth"
ls /usr/local/bin/ipfs >/dev/null

# 判断是否安装 ipfs
if [ $? -ne 0 ]; then
echo -e "💡 下载ipfs ${FILE_NAME}"
cd /tmp
wget https://dist.ipfs.tech/kubo/v0.16.0/$FILE_NAME
tar -xvzf $FILE_NAME
cd kubo

echo -e "💡 执行官方安装脚本"
sudo bash install.sh >/dev/null
echo -e "✅ 官方安装脚本执行完成"

# 安装系统服务
echo -e "📪 安装系统服务"
cat >/lib/systemd/system/ipfs.service <<EOF
[Unit]
Description=IPFS
[Service]
ExecStart=/usr/local/bin/ipfs daemon
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
echo -e "📪 初始化 ipfs"
ipfs init >/dev/null
systemctl enable ipfs
echo -e "✅ IPFS 服务安装完成"
else
echo -e "✅ IPFS 已经安装"
fi

echo -e "💭 正在优化 IPFS 配置"
systemctl stop ipfs >/dev/null
sysctl -w net.core.rmem_max=2500000
ipfs config Addresses.Gateway /ip4/127.0.0.1/tcp/8088
# 切换为低功耗模式
# ipfs config profile apply server >/dev/null
ipfs config profile apply lowpower >/dev/null
systemctl start ipfs
echo -e "✅ 优化 IPFS 完成"

# pin 操作
echo -e "💡 执行 PIN 操作, 5 秒后操作开始 ..."
sleep 5
ipfs pin add /ipns/$DOMAIN
echo -e "✅ PIN 操作成功"

echo -e "📪 定时 PIN 任务检测"
if [ -f /var/spool/cron/crontabs/root ]; then
CRONTABLE=$(cat /var/spool/cron/crontabs/root | grep $DOMAIN | wc -l)
if [ $CRONTABLE -eq 1 ]; then
echo -e "✅ 任务已经存在"
else
echo "*/2 * * * * ipfs pin add /ipns/$DOMAIN" >>/var/spool/cron/crontabs/root
service cron reload
echo -e "✅ 定时 PIN 任务设置成功"
fi
else
echo "*/2 * * * * ipfs pin add /ipns/$DOMAIN" >>/var/spool/cron/crontabs/root
service cron reload
echo -e "✅ 定时 PIN 任务设置成功"
fi