使用IPFS+纸小墨搭建去中心化纯静态博客


IPFS是新一代的去中心化存储平台,可以做为网站的数据存储方案,尤其是静态站点,目前的官方版本使用GO语言编写,纸小墨(InkPaper)是一个GO语言编写的开源静态博客构建工具,可以快速搭建博客网站。它无依赖(不需要安装python\node.js\或其它库)跨平台,一个软件包搞定全部功能,配置简单构建快速,注重简洁易用与更优雅的排版。


来源:https://ipfs.io/ipns/QmcGzTiCfKvJAnW5D2P12XbvB8WjSNFDxZotwaZuLNb8ce/ink-blog-tool.html

1. IPFS安装

1.1 下载IPFS节点程序

请前往 IPFS项目官方网站下载对应你的平台的ipfs可执行程序:
点击 “Download IPFS for your platform” ,在新窗口中选择“Download go-ipfs”就开始下载了。
下面以windows版本为例讲述安装过程:
  • 将下载的压缩包解压,将解压得到的“ipfs.exe”文件复制到你的 C:\windows\system32 目录
  • 按快捷键:win+R,或者“开始菜单”-“运行”,输入cmd,按确定,进入win命令行界面。

1.2 输入以下命令建立一个用来存储本地数据的文件夹:

ipfs init
该命令执行结果见截图:
注意,此处的 peer identity 就是你的PeerID
  • 请把你的PeerID复制下来,保存到一个文本文件中,后面会反复用到,这个ID相当于你的域名!

在命令行窗口中复制文字的方法:

用鼠标左键指向要复制的起始文字,按住鼠标左键不放,拖动鼠标选中需要的字符,再放开鼠标,当前选中的字符就处于高亮状态。此时不要按 Ctrl+C,在命令行窗口中按Ctrl+C是退出当前运行的命令的意思,正确的复制方法是在被选中的任意高亮文字上点鼠标右键,你会发现高亮消失,此时已经复制成功,你可以在当前窗口中再按一下鼠标右键,你会发现刚才复制的文字被粘贴进来了。没错,复制粘贴都是鼠标右键单击!
ipfs init 命令默认会在当前用户路径下建立名字叫 .ipfs 的文件夹(假如当前用户名是administrator):
C:\Users\Administrator\.ipfs
你可以打开该路径来查看一下里面的内容:

1.3 输入以下命令启动节点程序:

ipfs daemon
运行成功后,你会看到提示信息“Daemon is ready” :

到此,ipfs的安装与运行已经成功完成,请保持该窗口打开,若关闭该窗口,会停止节点程序的运行。

2. 下面进入纸小墨的安装与使用说明:

纸小墨 +IPFS - 简洁的去中心化静态博客构建工具
纸小墨 +IPFS - 简洁的去中心化静态博客构建工具

纸小墨程序的作用:
要发布为静态博客,你的所有网站内容就只允许纯文本文件,不能有数据库查询操作,不能用动态编译的php、jsp之类的脚本文件,只能有html, css,图片…… 如果全部手写html,会非常累!
纸小墨这样的程序所起的作用就是把你写的.md文件转换为html文件!而且会帮你搞定站内链接,相互的引用关系等等。
有关 .md 文件
.md 文件也就是大家常说的markdown格式文档,它的内容就是纯文本,你用记事本就能任意编辑.md文件。但需要花几分钟了解一下它的语法(md的语法已经比html简单了很多,markdown转换软件也比较智能,会自动帮你翻译md为html)

2.1 开始上手

  • 下载并解压 Ink, 你会得到一个叫 ink.exe 的二进制文件,请将其复制到C:\windows\system32 另外,还会解压出一个blog文件夹,这就是你的博客网站文件包。将它复制到你的ipfs本地数据目录下( C:\Users\Administrator\.ipfs) 切换路径到blog路径下,打开config.yaml修改配置,注意一定要启用root (网站路径前缀),否则你的网站打开会出问题,默认是不启用root的,启用方法就是把root那行前面的 # 删除,并且把正确的路径信息填写进去:
root: "/ipns/你的PeerID”
比如我的root设置是这样:
一定要注意!root: 和后面的 "/ipns/你的PeerID" 之间有个 * 空格 *
有关纸小墨的其它配置参考下面的说明自行修改:

2.2 配置网站

编辑blog/config.yml,使用如下格式:
site:
    title: 网站标题
    subtitle: 网站子标题
    limit: 每页可显示的文章数目
    theme: 网站主题目录
    comment: 评论插件变量(默认为Disqus账户名)
    root: 网站根路径 使用IPFS必须启用!
    lang: 网站语言 #支持en, zh, ru, ja,可在theme/config.yml配置
    url: 网站链接 #用于RSS生成
    link: 文章链接形式 #默认为{title}.html,支持{year},{month},{day},{title}变量

authors:
    作者ID:
        name: 作者名称
        intro: 作者简介
        avatar: 作者头像路径

build:
    output: 构建输出目录 #可选, 默认为 "public"
    port: 预览端口
    copy:
        - 构建时将会复制的目录/文件
    publish: |
        ink publish 命令将会执行的脚本

2.3 创建文章

每一篇文章就是一个后缀名为 .md 的文本文件!
在纸小墨程序规定下,所有md文件都存放在blog/source 路径下
source目录中可以建立任意个.md文件(可置于子文件夹),
注意,文件名最好不要用中文,否则在把链接发给你的朋友时可能出错,很多软件会把链接从中文出现的位置断开,它们不认为中文是超链接的一部分!
纸小墨程序对md文件的特殊规定:
title: 文章标题
date: 年-月-日 时:分:秒 #创建时间,可加时区如" +0800"
update: 年-月-日 时:分:秒 #更新时间,可选,可加时区如" +0800"
author: 作者ID
cover: 题图链接 #可选
draft: false #草稿,可选
top: false #置顶文章,可选
preview: 文章预览,也可在正文中使用<!--more-->分割 #可选
tags: #可选
    - 标签1
    - 标签2
type: post #指定类型为文章(post)或页面(page),可选
hide: false #隐藏文章,只可通过链接访问,可选

--- #注意这个分隔符不能少(三个-号),否则会报错!

Markdown格式的正文
你不需要每次都手工输入上面这些 “—” 之前的内容,我们称之为头部信息,建议在编写新的.md文件前,先打开一个旧的.md文件,复制上面这些头部信息,修改你需要的内容,这样能快速建立头部内容。

2.4 文章编译

此处必须注意工作路径!请确保你此时在blog父级路径下,也就是说,最好把blog目录复制到你的.ipfs路径下,看起来应该是这样:

接上图,请确保你已经在上述路径下,然后在当前位置打开CMD命令行窗口,方法有三个,其一便是上图的方法:在空白处同时按下shift+鼠标右键,选择“在此处打开命令窗口”
方法二是在当前位置的资源管理器地址栏输入 CMD 然后按回车:
方法三是在任意位置通过前文所述的 win+r 方式打开CMD窗口,进入windows命令行,使用以下命令切换到ipfs数据路径下:
cd C:\Users\Administrator\.ipfs
无论哪种方法,打开当前路径后的CMD窗口应该是这样:
当前路径提示符应该是 C:\Users\Administrator\.ipfs
如果你的当前路径不是这个,请再对照上面的两种方法,确保在.ipfs路径下打开CMD窗口,并且确保你的blog文件夹在.ipfs文件夹里面!

编译:

你编写的.md文件需要经过 ink.exe 程序编译才能生成正确的html文件, 打开windows命令行界面,再次检查当前路径是.ipfs,输入以下命令进行编译:
ink build
build成功后的截图:
得到的输出在 blog/public 路径下

预览

在.ipfs路径下运行命令 ink preview
该命令运行后的截图:
使用浏览器访问 http://localhost:8000 预览你的网站。

如何退出预览状态:

所谓预览,其实是由纸小墨程序自带的一个web服务器在运行着,提供网页解析功能,如果不退出预览,可能会干扰其它程序的运行,而且也无法重新编辑、预览下一次的修改,所以在反复修改、预览网页时,会频繁启动、中断后台web服务器的运行,此时在当前命令行窗口按 Ctrl+C 这个组合键,如果没有立即反馈中断信息,请等待半分钟,或者多按几次Ctrl+C 中断成功后你会看到提示信息。

2.5 通过IPFS发布:

在执行下面的操作之前,请确保你的ipfs 程序已经启动并在运行中!如果你本地的ipfs程序没有运行,你会发现下面的publish操作瞬间完成!但实际上你根本没有发布成功!
进入windows命令行,如果当前不在 .ipfs 路径下,请使用以下命令切换到ipfs数据路径下:
cd C:\Users\Administrator\.ipfs
输入以下命令,并按回车,
ipfs add -r blog/public
上述命令会将你的 public 目录添加到ipfs网络,生成对应的hash名称
找到最后几行:
此时注意看最后一行你的public目录的hash值,将其复制下来
接下来输入:
ipfs name publish 你的public目录的hash值
此时要等待大约半分钟或更久,让ipfs将你的网站在ipfs网络中以你的peerid注册。
警告:如果此时 publish 命令瞬间完成,99%的可能性是你的ipfs程序没有运行!
注册成功后会看到 “Published to 你的PeerID” 这样的提示信息:
请注意:每次修改了文档,必须再次执行 “ink build”, “ipfs add”, “ipfs name publish” 三个步骤才能让你的修改生效!如果你不执行上述步骤,你会发现你的网页没有发生改变。
针对上述情况的说明:
  • 每当你 add 并 publish 成功之后 ,你的网站就已经被ipfs创建成新的block文件放进本地存储区了,你通过浏览器访问的,并不是存放在blog/public 目录下的那些html文件,而是由ipfs根据你的请求查找到的本地存储区域中对应的文件块(block),按照正确的顺序重新组装成完整的文件发送给你!这些文件块是无法直接修改的,任何修改都会导致其hash改变,进而报错,这也是ipfs改篡改的一个原因。

构造URL:

如果使用本地运行的ipfs节点程序,要访问你的网站,请使用
你还可以通过ipfs-http网关来访问你的网站, 这种网关可以在你本地没有运行ipfs节点程序的情况下,让你通过他们的网关代理进入ipfs网络访问资源,比如 https://ipfs.io 就是一个ipfs-http网关!
你可以构造以下URL来访问你的网站,即使本地没有安装运行ipfs程序
附一个官方演示图说明URL对应关系:


发表评论