在 IPFS 上部署静态博客

本文主要记录在 IPFS 上部署博客的过程,用以熟悉 IPFS 的基本操作。https://ipfs.0ranga.com 就是博主博客在 IPFS 上部署的版本。

IPFS

安装 IPFS

首先得在计算机上安装 IPFS,博主 PC 的操作系统的 Arch,可以直接使用包管理器进行安装。如果之后需要为博客添加域名则需要在云服务器上部署 IPFS,博主选择的是 DightOcean 的 CentOS 7。所以提供了以上两种操作系统的安装方式,其他系统如何安装请自行探索。

12345678910111213
## 包管理器直接安装pacman -S go-ipfs 

# CentOS## 从 https://dist.ipfs.io/#go-ipfs 获取最新安装包,例如wget https://dist.ipfs.io/go-ipfs/v0.4.17/go-ipfs_v0.4.17_linux-amd64.tar.gz

## 解压tar xvfz go-ipfs_v0.4.17_linux-amd64.tar.gz

## 安装cd go-ipfs && ./install.sh

安装完成后需要先初始化 IPFS

1
ipfs init

另外,一般在云服务器上需要将 IPFS 设置为自启动服务,设置方式如下,首先需要添加 service 描述文件

1
vi /etc/systemd/system/ipfs.service

文件内容如下:

123456789
[Unit]Description=IPFS Daemon

[Service]Type=simpleExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub

[Install]WantedBy=multi-user.target

然后使服务开机自启动同时立即启动:

12
systemctl enable ipfssystemctl start ipfs

部署一个文件

接下来在本地创建一个文件 index.html,在里面写入简单的话

1
echo 'hello, my simple blog!' > index.html

随后添加至 IPFS 中

1
ipfs add index.html

得到返回如下

123
ipfs add index.html # added QmaqwGFUj34wDLPzHVxmJhEN6n27xidsfrmf2WUnhSTKTr index.html# 23 B / 23 B [=========================================] 100.00%

可以通过如下命令查看文件内容

1
ipfs cat QmaqwGFUj34wDLPzHVxmJhEN6n27xidsfrmf2WUnhSTKTr

当我们使用如下命令启动节点后,文件内容将会逐渐被 IPFS 网络存储

123
ipfs daemon# 或者systemctl start ipfs

随后可以通过访问 https://gateway.ipfs.io/ipfs/QmaqwGFUj34wDLPzHVxmJhEN6n27xidsfrmf2WUnhSTKTr 得到该文件。如果你不介意将这句简单的话作为你的博客的全部内容的话,那至此博客的全部创建完成了,而且理论上永远不会消失。

部署静态博客框架:以 Hexo 为例

虽然小标题写的是“以 Hexo 为例”,但本文不会细讲如何使用 Hexo,Hexo 官方文档提供了细致的帮助。如果你之前用过 Hexo 而且因为懒得写作而把它丢弃在硬盘里,这里有几个命令可以帮助你快速回想起使用方法。

12345678910
# 创建新文章hexo new post <new_post_name># 清理hexo clean# 生成博客hexo g# 启动本地服务器hexo s --open# 部署hexo d

在使用 hexo g 生成静态博客后,我们可以在 public 目录中找到部署博客需要的所有文件,入口是熟悉的 index.html。(其他博客框架也有个类似 public 的文件夹用于存放整个博客)

使用如下命令将整个 public 文件夹放入 IPFS

1
ipfs add -r public

添加后的输出中最后一行是目录 public 的哈希值,比如博主得到的是

1
# added QmSc5D1ahPbVkAhHFxJvqnWDEWrgMQw9B9BGmQv5i1VAwt public

然后访问 https://gateway.ipfs.io/ipfs/QmSc5D1ahPbVkAhHFxJvqnWDEWrgMQw9B9BGmQv5i1VAwt/ 就可以看到保存在 IPFS 上的博客了。不过,在修改文章更新 public 目录之后,目录的哈希值会变化,因此以上的连接只是博客在当前的一个(永久)状态,如果想要通过一个链接访问不断更新的博客,就需要借助 IPNS,IPNS 的作用就是将某个文件与 PeerID 进行绑定,一般情况下,PeerID 可以保持不变,这样,通过访问 PeerID,就可以访问与 PeerID 绑定的内容了,这和 DNS 中域名与 IP 的关系类似。

通过以下命令将当前的 public 目录哈希与 PeerID,PeerID 不需要显示指定,得到绑定结果后的 PeerID 实际上与通过 ipfs id 命令得到的 ID 一致。

123456789101112131415
# 绑定ipfs name publish <file_hash>ipfs name publish QmSc5D1ahPbVkAhHFxJvqnWDEWrgMQw9B9BGmQv5i1VAwt

# 绑定后的输出# Published to QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo:# /ipfs/QmSc5D1ahPbVkAhHFxJvqnWDEWrgMQw9B9BGmQv5i1VAwt

# 访问(列出目录) IPNS QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYoipfs ls /ipns/<peer_id>ipfs ls /ipns/QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo

# 反向解析ipfs name resolve <peer_id>ipfs name resolve QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo

绑定 IPNS 之后,可以通过 https://gateway.ipfs.io/ipns/QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo/ 访问到博客。

但是直接部署 public 目录存在一个问题:hexo 这类的博客中所有本地资源的路径均为根目录开头的相对站点根目录的绝对路径,例如对于 /css/home.css,当访问 https://gateway.ipfs.io/ipfs/<file_hash> 这样在文件中有类似绝对路径链接时,相当于访问 https://gateway.ipfs.io/css/home.css,显然这个 home.css 文件是不存在的。如果想要使得网站可以正确访问,有两种解决办法:

  1. 使用相对路径 ./css/home.css,这样就相当于访问 https:/ 大专栏  在 IPFS 上部署静态博客/gateway.ipfs.io/ipfs/<file_hash>/css/home.css,如此可以正确访问。如果博客框架自身支持将所有本站资源的绝对路径替换成这样,或者整个博客是自己实现如此,那不需要额外的操作就可以得到一个完美的博客。
  2. http://gateway.site/css/home.css 真实存在,即将 http://gateway.ipfs.io/ipfs/<file_hash> 替换成一个独立域名 http://gateway.site,这就需要用到 IPFS 提供的 dnslink 增强。

为博客添加域名

还是以我自己的域名 0ranga.com 为例,这个域名托管在 Namecheap 上,使用 Namecheap 的 DNS 管理,可以为域名增加一个子域名 TXT 记录如下:

1
TXT 0ranga.com dnslink=/ipns/QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo

这样,我们可以通过地址 https://gateway.ipfs.io/ipns/0ranga.com 访问到部署在 IPFS 上博客。我们还可以进一步缩短访问链接长度,在 DNS 管理中进一步添加如下记录(为了不与原博客 0ranga.com 冲突,这里使用子域名 ipfs.0ranga.com):

123456
# 1. 为子域名 ipfs.0ranga.com 添加 A 记录,绑定到一个 Gateway 的 IP,#    示例中是 209.94.78.78 ,这个 IP 是 gateway.ipfs.io 的众多 IP 中的一个A ipfs.0ranga.com 209.94.78.78

# 2. 为子域名 ipfs.0ranga.com 添加 TXT 记录,指定 IPNSTXT ipfs.0ranga.com dnslink=/ipns/QmRP5ZT2B5W8zWTXhPwpgZQpuj8Gv5bNaXWbttRB6niAYo

等待 DNS 记录生效后,可以通过 http://ipfs.0ranga.com 访问博客。至此,博客的短链接改造已经基本完成。接下来会记录些自己另外的一些尝试,包括对博客的访问进行加速等。

进阶

部署云服务器以增强博客的可用性同时加快访问速度

如果部署了博客的本地 PC 关机,同时博客的访问量不是那么可观,则可能存在一部分博客文件无法访问的情况,因为在没有激励的情况下 IPFS 上的其他节点一般不会主动存储其他用户往 IPFS 中添加的文件。所以配置一个云服务器来存储博客本身就可以确保文件的可用性(请问:那为什么还要用 IPFS 来部署博客?),同时随着 FileCoin 激励与 IPFS 的结合,事情会变得不那么糟糕。

云服务部署的步骤如下:

  1. 按照安装 IPFS 这小节中的安装方法在云服务器上部署一个 IPFS 服务;
  2. 为了 Gateway 可以被公网访问,需要将 IPFS 配置文件 ~/.ipfs/configAddresses:Gateway 的配置改为 /ip4/0.0.0.0/tcp/80 ,用以监听所有网卡上的 TCP 80 端口,随后重启 IPFS 服务使配置生效;
  3. 通过本地浏览器直接访问云服务器的 IP (博主目前测试使用的服务器实例的 IP 为 104.248.70.88)结果为 404 page not found ,则表明服务部署成功。进一步,访问 http://104.248.70.88/ipfs/QmaqwGFUj34wDLPzHVxmJhEN6n27xidsfrmf2WUnhSTKTr 可以得到 部署一个文件 这节中的 index.html 文件,至此完成了 IPFS Gateway 的部署与共享;
  4. 为 Gateway 绑定域名。类似之前的做法,添加一条 DNS A 记录。待记录生效后,访问连接变为 http://gateway.0ranga.com/ipfs/QmaqwGFUj34wDLPzHVxmJhEN6n27xidsfrmf2WUnhSTKTr
    1
    A gateway.0ranga.com 104.248.70.88
  5. 改用自己的 Gateway。将之前配置的子域名 ipfs.0ranga.com 的 A 记录对应的 IP 改成云服务器的 IP(TXT 记录保持不变),当浏览器访问 ipfs.0ranga.com 这个域名时,首先会访问 104.248.70.88 这台 Gateway 服务器,Gateway 再向整个 IPFS 网络收集当前页面的碎片;
    1
    A ipfs.0ranga.com 104.248.70.88
  6. 通过 Pin 操作将本地博客 public 目录”钉“至云服务器 IPFS 节点,然后将 public 目录哈希绑定至云服务器中 IPFS 的 PeerID,另外记得修改子域名 ipfs.0ranga.com 的 TXT 记录中的 IPNS 地址。此后即使关闭本地 PC 的 IPFS 服务,部署在 IPFS 上博客也可以被正常访问,访问地址依然是 http://ipfs.0ranga.com;
    1
    ipfs pin add QmSc5D1ahPbVkAhHFxJvqnWDEWrgMQw9B9BGmQv5i1VAwt
  7. 如果觉着同步文件至云服务器,而又不介意一直运行本地 PC 的 IPFS 服务,但是博客的访问速度又不快,可以考虑使用以下方式将云服务器上 IPFS 节点直接加入到本地 Peer 列表中,这样可以帮助云服务器上的 IPFS 节点快速找到本地 PC IPFS 节点中的博客文件。
    1
    ipfs swarm connect /ip4/104.248.70.88/tcp/4001/ipfs/QmamxGp6sw2dKUHm2RnaJ7zRDeR3w8m98kKAYgfpszeqHR

HTTPS 加持

在云服务器 CentOS 系统上安装 Nginx 服务,然后使用 Certbot 生成 Let’s Encrypt 证书,过程比较简单,Certbot 的安装在官方教程有详细的说明,此处省略。最终,子域名 ipfs.0ranga.com 的 Nginx 的配置大致如下:

123456789101112131415161718192021222324252627
server {    server_name  ipfs.0ranga.com;

    location / {            proxy_pass http://localhost:8080/;            proxy_set_header Host $host;            proxy_buffering off;            proxy_pass_request_headers on;    }

    listen 443 ssl; # managed by Certbot    ssl_certificate /etc/letsencrypt/live/ipfs.0ranga.com/fullchain.pem; # managed by Certbot    ssl_certificate_key /etc/letsencrypt/live/ipfs.0ranga.com/privkey.pem; # managed by Certbot    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot}server {    if ($host = ipfs.0ranga.com) {        return 301 https://$host$request_uri;    } # managed by Certbot

    listen       80 default_server;    server_name  ipfs.0ranga.com;return 404; # managed by Certbot}

注意,由于端口由 Nginx 进行控制, Gateway 不能再占用 80 端口,因此这里将其(~/.ipfs/configAddresses:Gateway 配置)重新设定为 8080。gateway.0ranga.com 的 Nginx 配置也是类似。Hurray!现在我们可以通过 https://ipfs.0ranga.com 访问博主部署在 IPFS 上的博客,通过 https://gateway.0ranga.com 访问博主的 Gateway 了。

总结

可以用以下几个网址进行总结:

序号 链接 改进之处
1 https://gateway.ipfs.io/ipfs/<root_path_hash>/ 原始博客目录
2 https://gateway.ipfs.io/ipns/<peer_id>/ IPNS 映射目录,站点更新时链接保持不变
3 https://gateway.ipfs.io/ipns/0ranga.com dnslink 绑定,增加链接可读性
4 http://ipfs.0ranga.com 实现完全自定义域名
5 https://ipfs.0ranga.com 为域名添加 HTTPS 证书

参考资料

  1. https://michalzalecki.com/set-up-ipfs-node-on-the-server/
  2. https://github.com/ipfs/notes/issues/39
  3. https://www.cloudxns.net/Support/detail/id/304.html
  4. https://ipfs.io/ipns/Qme48wyZ7LaF9gC5693DZyJBtehgaFhaKycESroemD5fNX/post/putting_this_blog_on_ipfs/

原文地址:https://www.cnblogs.com/wangziqiang123/p/11712152.html

时间: 2024-07-30 17:35:50

在 IPFS 上部署静态博客的相关文章

码云上部署hexo博客框架

title: 码云上部署hexo博客框架 Hexo框架在码云上实现个人博客 本文受 https://www.jianshu.com/p/84ae2ba1c133 启发编写 本地调试 安装完Node.js https://nodejs.org/en/ 安装git bash工具 https://gitforwindows.org/ 在目录下建立博客文件夹,同时cd进目录 右键 git bash here 输入命令 npm install -g hexo-cli 查看是否安装成功,输入命令 hexo

在Ubuntu上部署开源博客系统Blog_mini

0.说明 本文为开源博客系统Blog_mini的官方部署文档,通过本文的阅读,你将可以在一个全新的CentOS系统上完全部署Blog_mini,从而成功架设属于你的个人博客网站. 这里使用的操作系统为:Ubuntu 15.10,理论上,只要操作系统上安装的Python版本为2.6.x或2.7.x,都可以成功部署Blog_mini. 1.获取Blog_mini源代码 有以下两种方式可以获取Blog_mini的源代码: 通过git的方式 通过Blog_mini项目主页下载 我们将介绍这两种方法,实际

Coding上部署Ghost博客

Ghost构建于Node.js平台之上,支持0.10.*版本的Node.js. 在你的本地计算机上运行Ghost其实很简单,前提是你已经安装了Node.js. 什么是Node.js? 略过 在Windows上安装Node 访问 http://nodejs.org 点击install,将会下载一个'.msi'文件. 点击该文件启动一个安装程序,这将会安装Node和npm. 通过安装程序一步一步完成安装,直到屏幕上显示你已经成功安装Node.js. 通过cmd输入如下命令显示版本号表示安装成功 下载

如何在CentOS7上部署Ghost博客系统

目录 准备工作 新建用户 安装Nginx服务 将端口添加到防火墙里或者关闭防火墙 安装MySql5.7 安装官方的Ghost工具ghost-cli 网站目录准备,此目录必须为空目录 安装Ghost 启动ghost Nginx的反向代理配置 CentOS版本 CentOS-7-x86_64-DVD-1810 Ghost版本 2.23.4 本文以下所有操作和命令均是根据官网setup说明进行,官网仅针对Ubuntu有安装说明,没有在CentOS里的安装说明,网上能Google或Baidu到的所有文章

hexo部署到gitcafe上静态博客

http://zanderzhang.gitcafe.io/2015/09/17/hexo部署到gitcafe上静态博客/ hexo这些事儿,zippera's blog,之类的,这些都说的很清楚了. 不过也还是有几个特别的地方: 想插入图片的时候竟然上不了谷歌.好吧,睡觉,明天继续 在部署deploy的时候,出现 ERROR Deployer not found: git, 加上 npm install hexo-deployer-git --save, 之前type是填github,现在是g

Hexo快速搭建静态博客并实现远程VPS自动部署

这篇文章将如何搭建hexo,以及如何通过git webhooks实现远程vps的自动部署 这篇文件适合的条件: 简单的用于个人博客.公司博客展示,hexo的定位是静态博客,要实现动态服务器的功能并不适合 有自己私有的服务器.vps.域名 git仓库,Github或国内的Coding.net hexo本地部署 流程:先在本机搭建好hexo环境,push到git仓库,再部署到服务器上. 第一步,安装hexo命令行工具,这个工具在服务器端也需要执行安装 1 npm install hexo-cli -

windows上使用mkdocs搭建静态博客

windows上使用mkdocs搭建静态博客 之前尝试过用HEXO搭建静态博客,最近发现有个叫mkdocs的开源项目也是搭建静态博客的好选择,而且它支持markdown格式,下面简要介绍一下mkdocs的环境搭建过程 项目地址:https://github.com/mkdocs/mkdocs 介绍:英文版----http://www.mkdocs.org/ 中文版----http://markdown-docs-zh.readthedocs.io/zh_CN/latest/ 使用环境:win8.

原创:LNMP架构部署个人博客网站 禁止转载复制

nginx编译安装步骤 ①. 检查软件安装的系统环境 cat /etc/redhat-release uname -r ②. 安装nginx的依赖包(pcre-devel openssl-devel)---假设不进行安装 yum install -y pcre-devel openssl-devel ③. 下载nginx软件---1.10.2 复制链接地址(统一位置进行下载) mkdir -p /home/oldboy/tools cd /home/oldboy/tools wget -q ht

hexo搭建github静态博客

具体效果github不仅能免费提供代码托管,此外还提供了创建github博客的功能,网上有jekyll的方法,之前我试过最终由于Ubuntu下安装ruby及其他组建失败没成功,过程也比较繁琐,但有另一种方法,操作起来很简单,而且达到的效果也很好,那就是通过hexo搭建github博客.搭建环境为window, 步骤 1.安装git客户端,以及github账号:通过gitBash 生成ssh key,将公钥加入到github中,具体方法,百度搜索:为gthub配置ssh key.2.登陆githu