IPFS is one of popular topics for netmag.ml. We decided to go forward and publish our site on IPFS. Lets take a closer look on how is publishing to IPFS done.
Advantages of IPFS
IPFS is global distributed filesystem. Its main function is to store and distribute static content. Content can be replicated, deduplicated and is identified by secure hash. IPFS can be used for hosting static web sites.
Dynamic sites needs to include fragments from servers outside IPFS. There are some experiments with using PubSub to communicate with other IPFS nodes and deliver dynamic content but they are not yet stable for production use.
IPFS Node installation
While there are several choices how to install IPFS we would stick with go-ipfs. Installation is quite simple, you need just to unpack it and then run ipfs init followed by ipfs daemon . After this you should have IPFS node running.
Generate static website
This depends on your website software used. Netmag uses Hugo. In our case all we need is to adjust configuration in config.toml to make links relative.
relativeURLs = true uglyURLs = true canonifyURLs = false
If links are still not relative it is because they are declared as absolute in theme. In that case add –baseURL http://netmag.ml.ipns.localhost:8080/ command line argument. After updating configuration run hugo and website will be generated into public directory.
Add generated site to IPFS
ipfs add --pin=false --recursive --quiet public
This will output something like:
[...] QmRkxq768Xng59tz9kaVjxNUUkZLS83WJKtvTmGbdEqQGc QmZd6MtynzJUAiB3Coax5fXHZi7PYmpFVWMfM14jSyjGqv QmSoZRxirKX7tFjAA55EkNS7GiNo1VmJeB8T8dhnnwRKEh
Last hash printed is root of our site. We have to remember it for next step.
_dnslink.netmag.ml. IN TXT "dnslink=/ipfs/QmSoZRxirKX7tFjAA55EkNS7GiNo1VmJeB8T8dhnnwRKEh"
Pin to mirror node
We may choose to mirror published website to another IPFS node which is under our control. This will increase availability and load speed. This is useful if our primary IPFS node is notebook which is not running 24/7.
ipfs pin add QmSoZRxirKX7tFjAA55EkNS7GiNo1VmJeB8T8dhnnwRKEh
After it is done we can verify that entire tree structure is stored correctly and list pinned entries.
ipfs pin verify ipfs pin ls --type=recursive
Pin to pinning service
Using pinning service is alternative to pinning into our another node. To pin our website to one of public IPFS pinning services log in and navigate to PIN Hash or similar function then enter hash for root folder of our site - QmSoZRxirKX7tFjAA55EkNS7GiNo1VmJeB8T8dhnnwRKEh.