如何利用ipfs部署圖牀

前言

寫博客不久就遇到了須要引用大量圖片的尷尬境地。node

若是全部圖片都上傳至 github,會使得後期代碼倉庫愈來愈臃腫,在天朝這個網速讓人捉急的地方,須要更好的方法去解決這個問題。linux

第一反應想到的是使用對象儲存服務,而後配合 CDN,部署一個圖牀。nginx

經過多方面瞭解,七牛和騰訊雲都是不錯的選擇(阿里雲太貴,直接被我 pass 了)。git

隨之而來的是一波波讓人蛋疼之事 😭 。github

七牛會免費送 10GB 的空間,可是它的臨時域名只有 30 天的壽命,每 30 天會刷新一次 🤒 。golang

若是想要永久的,須要本身買一個域名,而且進行公安網備案。(備案真的很折騰。。。)web

騰訊雲好一點,臨時域名是沒有限制的,搞了一下配置,勉強能用了。json

過了幾天,想着是否是有更好的辦法。vim

由於工做關係,接觸了 ipfs,以前也對此有必定了解,果斷着手開始嘗試,能不能經過 ipfs 在本身的服務器上開個節點,把圖片傳到 ipfs 公網上去,這樣就能夠隨時隨地訪問了,相似於實現了 CDN 的做用。瀏覽器

準備工做

你只須要有一臺至少 10GB 硬盤的服務器,固然內存越大越好,ipfs 很是佔用內存。

正文

首先咱們須要經過 ssh 登陸服務器安裝 ipfs。

個人服務器是 Ubuntu 18.04。

若是使用了其餘的系統,能夠跳轉至官方安裝介紹進行安裝。

# update packages
sudo apt update

# install golang
sudo apt install golang-go -y

# install git
sudo apt install git -y

# install ipfs-update
go get -u github.com/ipfs/ipfs-update

# add ~/go/bin into .bash_profile
echo "export PATH=$PATH:$HOME/go/bin" >> .bash_profile

# add GOPATH into .bash_profile
echo "export GOPATH=$HOME/go" >> .bash_profile

source .bash_profile
複製代碼

安裝 ipfs:

$ ipfs-update install latest
fetching go-ipfs version v0.4.20
binary downloaded, verifying...
success! tests all passed.
installing new binary to /home/Like/go/bin/ipfs
checking if repo migration is needed...

Installation complete!
複製代碼

初始化 ipfs:

$ ipfs init
initializing IPFS node at /home/Like/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmS5DQXifPi4cBRDYhVLWbSAYcMEvt4J6RdBs4mCMr7oUP
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
複製代碼

QmS5DQXifPi4cBRDYhVLWbSAYcMEvt4J6RdBs4mCMr7oUP這串長長的字符就是你獲得的節點 id。

不用擔憂會丟失,你能夠隨時用ipfs id命令行來查看。

接下來咱們就能夠開啓 ipfs 進程了:

$ ipfs daemon
Initializing daemon...
go-ipfs version: 0.4.20-
Repo version: 7
System version: amd64/linux
Golang version: go1.12.4
Swarm listening on /ip4/10.152.0.2/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/10.152.0.2/tcp/4001
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
複製代碼

咱們能夠獲得這幾個信息:

  1. 官方提供了一個 WebUI: http://127.0.0.1:5001/webui,它可讓咱們拜託指令操做。
  2. 咱們有個本地網關 Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080,讓咱們能夠經過 CID 訪問公網上的文件。

接下來就簡單了,咱們只要開啓nginx服務,使咱們能從外網訪問到這兩個地址,就實現了至關於對象儲存的功能。

首先咱們ctrl+c退出當前運行的 ipfs 進程。

實現後臺運行:

$ ipfs daemon --enable-gc > ipfs.log &
[1] 5497
複製代碼

接下來咱們安裝nginx:

sudo apt install nginx -y
複製代碼

安裝完成後,經過vim修改配置,下面提供了配置,直接照抄就好。

sudo vim /etc/nginx/sites-available/default
複製代碼
server {
  server_name _;
  location / {
    proxy_pass http://127.0.0.1:5001;
  }
  location /ipfs/
  {
    proxy_pass http://127.0.0.1:8080;
  }
}
複製代碼

啓動nginx服務:

sudo service nginx start
複製代碼

在本地瀏覽器訪問 [your server ip]/webui 就能夠看到 ipfs 的 UI 界面了 😃 。

第一次加載可能會有些慢,請耐心等待。

若是加載失敗,請重啓nginx

sudo service nginx restart
複製代碼

ipfs webui

在 UI 界面上能夠看到兩行命令,複製他們,並在服務器上執行。

# excute copied command
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://[your server ip]", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'

# restart ipfs daemon
kill -9 $(ps | grep 'ipfs' | cut -d' ' -f1)
ipfs daemon --enable-gc > ipfs.log &
複製代碼

從新訪問[your server ip]/webui,能夠看到 UI 界面變了,你能夠在這裏上傳文件,並經過[your server ip]/ipfs/[CID] 訪問你上傳的文件 🎉。


若是你喜歡這篇文章,歡迎關注個人博客

相關文章
相關標籤/搜索