遷移博客到IPFS

  • 注意,IPFS是永久網絡,放上去就會被別的節點緩存,不能撤銷,因此內容不能隨便放哦!
  • IPFS是一個分佈式服務型文件系統,遷移博客到IPFS是能夠把博文放在本地,而後經過p2p協議讓別人訪問。
  • 這裏的方法使用了第三方平臺,其實IPFS是能夠100%本身管理的。

 

遷移博客到IPFS

IPFS是最近很是熱門的一個分佈式網絡系統,其主要支持如下功能:ios

  • ipfs add,將本地的一個文件(夾)上傳到一個去中心化的web中,返回一個和文件夾內容有關的Hash,記爲fsHash。以後用戶既能夠經過ipfs客戶端根據fsHash來獲取內容;也能夠經過官方提供的https gateway,用https://ipfs.io/ipfs/QmdPtC3T7Kcu9iJg6hYzLBWR5XCDcYMY7HV685E3kH3EcS/2015/09/15/hosting-a-website-on-ipfs/之類的連接直接訪問獲取
  • ipfs name publish。每次上傳新的文件夾後,獲得的Hash均不一樣,這給訪問帶來了很大的不便。爲了解決這個問題,咱們在持有私鑰的狀況下能夠把fsHashpublish到一個和公鑰相關的地址keyHash,這樣,用戶就能夠用https://ipfs.io/ipns/keyHash來訪問不一樣的內容,而不用擔憂內容版本的變化
  • ipfs dns。由於keyHash很是長,ipfs提供了一種可以經過https://ipfs.io/ipns/intmainreturn0.com方式訪問https://ipfs.io/ipns/keyHash的方法:配置intmainreturn0.com的DNS,添加TXT項,內容是dnslink=/ipns/keyHash便可

但願達到的效果是:git

  • push Hugo source到github後自動編譯成HTML
  • 自動上傳到IPFS,自動name publish
  • 用戶能夠用 https://intmainreturn0.com 訪問這個博客
  • 不依賴於https://ipfs.io的可用性

自動編譯 & 自動上傳/publish

這一塊都依賴於Travis-CI的功能。但這也要求咱們把私鑰交給第三方……github

首先咱們須要生成一對公鑰私鑰:web

ipfs key gen -t ed25519 blog
# 這裏會輸出keyHash
base64 ~/.ipfs/keystore/blog #把輸出的私鑰複製成一行

而後運行:docker

travis encrypt SECKEY_BASE64=私鑰

輸出:瀏覽器

secure: "BLAHBLAH"

以後咱們就能夠編寫.travis.yml了:緩存

sudo: required
dist: trusty

services:
    - docker

env:
  global:
    - secure: "BLAHBLAH"
branches:
  only:
    - master

before_install:
  - git submodule update --init --recursive
  - mkdir -p ipfs/staging ipfs/data
  - docker run -d --name ipfs_host -v $(pwd)/ipfs/staging:/export -v $(pwd)/ipfs/data:/data/ipfs -p 18080:8080 -p 14001:4001 -p 15001:5001 ipfs/go-ipfs:latest # 啓動daemon
  - sleep 3 # 等它建立好FS
  - ls -l ipfs/data
  - echo $UID
  - sudo chmod -R 777 ipfs/data/keystore
  - echo $SECKEY_BASE64 | base64 -d > ipfs/data/keystore/blog

install:
  - rm -rf public || exit 0
  - wget https://github.com/gohugoio/hugo/releases/download/v0.27.1/hugo_0.27.1_Linux-64bit.tar.gz && tar xzf hugo_0.27.1_Linux-64bit.tar.gz
script:
  - ./hugo -v
after_success:
  - cp -r ./public ipfs/staging
  - export DATA_HASH=$(docker exec ipfs_host ipfs add -r /export/public/ | tail -1 | awk '{print $2}') # 提取出fsHash
  - echo "DATA_HASH = $DATA_HASH"
  - docker exec ipfs_host ipfs name publish --key=blog $DATA_HASH # 用blog key上傳
  - sleep 5 # Wait for a while

這樣,編譯完成的東西就會自動上傳到IPFS中並註冊ipns了。這個時候,應該能夠經過https://ipfs.io/ipns/keyHash來訪問了網絡

intmainreturn0.com反代IPFS訪問

大多數人很難記住長長的https://ipfs.io/ipns/fooooooooobbbbbbaaaaaaarrrrrrr,並且ipfs.io隨時有可能被牆,所以咱們須要反代一下其的訪問。分佈式

反代須要咱們本地跑一個ipfs和一個caddy,目錄結構:ui

.
|-- caddy
|   `-- Caddyfile
|-- docker-compose.yml
`-- ipfs
    |-- data # 空文件夾
    `-- staging # 空文件夾

docker-compose.yml:

version: '2'

services:

  ipfs:
    image: jbenet/go-ipfs
    restart: always
    volumes:
    - /home/htfy96/ipfs-stack/ipfs/staging:/export
    - /home/htfy96/ipfs-stack/ipfs/data:/data/ipfs

  caddy:
    image: abiosoft/caddy
    restart: always
    volumes: 
    - /home/htfy96/ipfs-stack/caddy/Caddyfile:/etc/Caddyfile
    depends_on:
    - ipfs
    ports:
    - 443:443

Caddyfile:

gzip
log stdout
rewrite {
	r (.*)
	to /ipns/keyHash/{1}
}

proxy /ipns/keyHash ipfs:8080

最後直接docker-compose up -d就能夠了,Caddy會自動解決TLS證書獲取等問題。

總結

目前來看,去中心化、效率與便利彷佛三者中最多隻能知足二者。要想讓通常人也能用瀏覽器訪問就必需要一箇中心化的gateway,要想讓做者隨時隨地上傳就須要一箇中心化的auto build/deploy系統。 整體來看,轉到了IPFS以後,控制權從最早的徹底VPS owned,變成了Github / TravisCI / IPFS net / VPS 四方面共同擁有。好處是隻要IPFS net不掛,歷史上已經上傳的東西都能找到;壞處是Github/Travis CI能夠篡改內容,或者VPS掛了就不能反代訪問。有利有弊須要權衡。

相關文章
相關標籤/搜索