L`IPFS ou InterPlanetary File System est un protocole pair à pair (p2p) de distribution de contenu adressable par hypermédia. Il permet de "stocker" des fichiers ou des arborescences de fichiers de manière décentralisée et permanente, et d’y accéder via un noeud ipfs ou via un navigateur web. Il permet aussi d’héberger un site web statistique.
Rendez vous sur le site de IPFS et suivez les instructions.
Téléchargez la dernière version de ipfs:
wget https://dist.ipfs.io/go-ipfs/v0.4.13/go-ipfs_v0.4.13_linux-arm.tar.gz
Décompressez:
tar xvf go-ipfs_v0.4.13_linux-arm.tar.gz
Placez vous dans le répertoire go-ipfs
cd go-ipfs
Installez:
sudo make install
Puis:
sudo ./install
Initialisez votre noeud:
ipfs init
Ouvrez un terminal Linux et entrez la commandes suivante:
ipfs daemon
ipfs swarm peers
ipfs add <path du fichier>
Vous récupérez alors le hash
ipfs dht findprovs <hash du fichier>
ipfs cat <hash>
Ou
curl http://127.0.0.1:8080/ipfs/<hash>
Ou
curl https://ipfs.io/ipfs/<hash>
Ou pour le télécharger
ipfs get <hash>
ou
wget https://ipfs.io/ipfs/<hash>
Ou depuis votre navigateur internet à l’adresse: https://ipfs.io/ipfs/<hash>
On va dans un premier temps créer un répertoire pour notre site, et se placer dedans:
pi@stretch:~ $ mkdir ipfsite
pi@stretch:~ $ cd ipfsite/
On crée ensuite un fichier index.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Index</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<h1>Bienvenue sur mon site web</h1>
</body>
</html>
On crée aussi un fichier style.css:
h1 {
color:green;
}
Notre répertoire contient donc désormais deux fichiers:
pi@stretch:~/ipfsite $ ls
index.html style.css
On ajoute nos fichiers sur ipfs:
pi@stretch:~/ipfsite $ ipfs add -r .
added QmSyMfjwNyuHUQE4YJ6Rq78YaztbuhRnhTxfEwQvULHqhK ipfsite/index.html
added QmNrbWL1C5GYRgHfKYMA9iFVk6NUQimUDZopBtEPhB8RZv ipfsite/style.css
added QmeufZKLAwGkFobboRfj2xJx7DwGxe6PyQYUXiqXPuTR5T ipfsite
Notre site est désormais accessible, à l’adresse suivante: https://ipfs.io/ipfs/QmeufZKLAwGkFobboRfj2xJx7DwGxe6PyQYUXiqXPuTR5T/ mais si vous effectuez des modifications sur votre site, cette adresse (qui est le hash de votre site) va changer (l’ancienne adresse existera toujours, mais elle continuera à pointer vers l’ancienne version du site), on va donc ajouter un domaine IPNS:
pi@stretch:~/ipfsite $ ipfs name publish QmeufZKLAwGkFobboRfj2xJx7DwGxe6PyQYUXiqXPuTR5T
Published to QmTMJG3uKfPVhS6JhwxMNBMx2Y4Em2kjwWnCysiGaaaJeY: /ipfs/QmeufZKLAwGkFobboRfj2xJx7DwGxe6PyQYUXiqXPuTR5T
Notre site est désormais accessible à l’adresse https://ipfs.io/ipns/QmTMJG3uKfPVhS6JhwxMNBMx2Y4Em2kjwWnCysiGaaaJeY/
On peut alors ajouter, modifier des fichiers dans notre répertoire, à condition de répeter les deux dernières étapes (ipfs add -r .
et ipfs name publish
) afin de prendre en compte nos modifications. L’adresse https://ipfs.io/ipns/QmTMJG3uKfPVhS6JhwxMNBMx2Y4Em2kjwWnCysiGaaaJeY/ pointera toujours vers votre site actualisé depuis le dernier ipfs name publish
.
C’est tellement facile que ca donne presque envie de créer un autre site. Il vous faut alors un autre domaine ipns; il faut pour cela vous créer une nouvelle paire de clés, et il faudra mentionner le nom de la clé (et donc du domaine ipns) lorsque vous executerez la commande publish comme ceci: ipfs name publish -k <nom de la clé> <hash>
Une première paire de clé est automatiquement générée lors de l’initialisation de ipfs
Créer et ajouter une nouvelle paire de clés.
ipfs key gen <name> -t rsa -s 2048
Afficher la liste des clés:
ipfs key list
Vous pouvez aussi renommer ou supprimer une clé avec les commandes ipfs key rename
et ipfs key rm
My IPFS API est une application web hébergée sur IPFS et permettant d’ajouter du texte ou de uploader des fichiers sur IPFS
Le code source de l’application est accesible ici
Attention: ipfshttpclient n'est plus maintenu, et infura est devenu payant !
Ce module python vous permet de gérer votre noeud IPFS local ou un noeud public (comme infura) avec python:
Installer ipfshttpclient:
>>> pip install ipfshttpclient
Puis dans python:
>>> import ipfshttpclient
>>> infura = ipfshttpclient.connect('/dns/ipfs.infura.io/tcp/5001/https', chunk_size=20000, session=True)
>>> local = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001/http', chunk_size=20000, session=True)
Les objets 'infura' et 'local' vous donnent alors accès à toutes les fonctions de IPFS: .add(path)
, .add_str(str)
, .add_json(json)
, .cat(hash)
, .get(hash)
, .get_json(path)
, .id()
...
Avec l’api oversas et requests:
import json
import requests
import os
def addtxt(text, title="file.txt"):
""" Ajoute du text sur ipfs """
url = "https://oversas.org/api/v0/add"
files = {'file': (title, text)}
r = requests.post(url, files=files)
return r.json()
def addfile(path):
""" Ajoute un fichier sur ipfs """
if os.path.isfile(path) == False:
return False
url = "https://oversas.org/api/v0/add"
params = (('pin', 'false'),)
files = {'file': (path, open(path, 'rb'))}
r = requests.post(url, files=files, params=params)
return r.json()
def getfile(hash):
url = "https://oversas.org/api/v0/cat"
payload = {"arg":hash}
r = requests.get(url, params=payload)
try:
return r.json()
except:
return r.text