IPFS sur le serveur. Héberger des sites à partir d'un ordinateur portable



J'ai souvent besoin de publier une page ou un site Web statique, une démo avec un formulaire Web ou une mise en page. Verser quelque part comme Jsfiddle à chaque fois n'est pas toujours pratique, et l'édition de statiques dans un hôte local est beaucoup plus rapide et plus agréable. Les problèmes commencent lorsque j'ai besoin que quelqu'un montre mon travail ou ouvre simplement la même page à partir du téléphone. Nous devons héberger toutes ces options de travail sans fin et ces esquisses, pour chaque fichier téléchargé à nouveau, vhosts de vis.

En utilisant IPFS, vous pouvez héberger des sites sur Internet directement depuis votre ordinateur portable, toutes les mises à jour des fichiers locaux seront immédiatement appliquées sur Internet, et elles n'ont pas besoin d'être téléchargées quelque part. Lorsque l'ordinateur portable est déconnecté du réseau, le site sera toujours disponible. IPFS est comme Bittorrent, juste pour le web.

Dans l'article, nous allons déployer le nœud IPFS sur le serveur et essayer cette technologie en pratique.

Qu'est-ce que IPFS?


IPFS est un grand réseau p2p décentralisé utilisé comme service de partage de fichiers, archive Web ou remplacement de Bittorrent . Tous les exemples intéressants d'utilisation d'IPFS dans des projets réels peuvent être trouvés dans le Hall of Fame sur le site officiel awesome.ipfs.io .

En bref, cela fonctionne comme ceci: les fichiers stockés obtiennent leur multicash et sont divisés en blocs, qui sont dispersés sur tous les nœuds intéressés. DHT est synchronisé sur les nœuds; lorsqu'un fichier est téléchargé, les blocs sont collectés à partir de différents nœuds (en théorie, les plus proches). De plus, pour accéder au fichier ou au répertoire dont vous n'avez pas besoin pour monter votre nœud, ils sont tous accessibles depuis le navigateur, ce qui nous amène à la fonctionnalité populaire: vous pouvez héberger des sites sur IPFS gratuitement. Mais seulement la statique, la mise à jour des données plus d'une fois toutes les quelques minutes est gênante en raison des mêmes hachages qui forment un lien et changent chaque fois que le fichier est modifié (il existe un système de noms IPNS permanent, mais il est lent). Cependant, cela n'a pas empêché les mecs d'Orbitdb de flasher la base de données sur IPFS , mais il y a quelques nuances. En savoir plus sur le périphérique réseau ici..


Supposons que j'ai un nœud avec lequel je distribue gratuitement des sites statiques, j'y vais moi-même et j'amène parfois mes collègues à regarder. La quantité totale de données n'est limitée que par la taille de mon disque et la vitesse de téléchargement par Internet domestique, quoi de mieux? Mais il y a un certain nombre de problèmes. Premièrement, IPFS lui-même a besoin d'un peu d'Internet et d'une partie solide du processeur, et même sans trafic, il prend toujours une partie des ressources pour la synchronisation DHT. Deuxièmement, je travaille principalement avec un ordinateur portable et je garde tous les fichiers dessus. Par conséquent, il est loin d’être toujours à portée de main une fibre demi-gigaoctet maison. De courtes pauses pour IPFS ne sont pas un problème, il garde le cache en DHT pendant plusieurs heures, mais cela coûte quelque part pour partir pendant quelques jours, et maintenant tous vos projets se répandent avec bonheur hors du réseau. Vous pouvez écraser ("mémoriser") des fichiers sur le bureau, mais cela doublera au moins le trafic,ce qui n'est pas non plus comme il faut. Que faire? J'ai essayé de soulever le nœud sur le serveur pour décharger l'ordinateur portable, mais j'ai quand même dû charger les fichiers manuellement, comme sur un hébergement classique. En conséquence, j'ai fumé les quais et les API et j'ai écrit un utilitaire simple pour synchroniser mes statistiques locales avec le serveur.



IPFS a deux implémentations distinctes: go-ipfs et js-ipfs. JS est plus proche de moi, j'ai donc écrit dessus. Je voulais que l'utilitaire puisse récupérer des dossiers avec mes sites et les télécharger régulièrement sur le réseau pendant que je travaille. Le côté serveur doit attraper les hachages des dossiers et les lancer afin que les fichiers ne soient pas perdus.

Installation et lancement


npm install ipfs -g

Js-ipfs a un tutoriel assez détaillé avec des exemples , donc:

git clone https://github.com/ipfs/js-ipfs.git
cd js-ipfs
npm install
npm run build

Le nœud s'exécute sur plusieurs lignes:

const IPFS = require('ipfs')
async function main () {
  const node = await IPFS.create()
}
main()

Les configurations et les graines sont enregistrées juste là, mais cela suffit pour commencer.

Nous écrivons des fonctionnalités


Ensuite, vous devez transférer les fichiers vers le nœud et les télécharger sur IPFS. Pour ce faire, utilisez node.addavec l'option { recursive: true }pour les dossiers. L'adresse peut être passée dans des arguments au démarrage et enregistrée par commande. Il est important d'enregistrer uniquement le dernier hachage - il provient du dossier racine:



le dossier entier a bien été transféré sur le réseau. Le site sera ouvert via le lien, et le dossier lui-même peut être vérifié sur le webmord IPFS:



Ensuite, pour faciliter le processus d'enregistrement, j'ai ajouté l'enregistrement avec le numéro de version et la publication dans IPNS vianode.name.publish. Mais enregistrer manuellement est ennuyeux! Je veux pouvoir regarder le site mis à jour aussi rapidement que je vois des changements dans l'hôte local, ce qui signifie que la mise à jour devrait se produire automatiquement. Et si j'oublie soudainement de sauvegarder quelque chose, d'éteindre l'ordinateur portable et de rentrer à la maison, la version actuelle sera enregistrée non seulement dans l'éditeur, mais aussi sur le réseau. Nous effectuerons des sauvegardes automatiques par défaut une fois toutes les 10 minutes, avec la possibilité de modifier l'intervalle pour différents taux de travail. Soit dit en passant, si les fichiers n'ont pas changé depuis la dernière sauvegarde, le hachage ne changera pas non plus.



Cool, mais jusqu'à présent, nous distribuons tous les fichiers de la machine locale. Il est temps de connecter le nœud du serveur! Nous prenons le pubsub expérimental , obtenons le sujet des arguments au démarrage et essayons de livrer le hachage de sauvegarde:



Hourra! La petite chose est de faire en sorte que le serveur stocke tous les hachages reçus et de les lancer (node.pin.add), et apprenez au client à couper son nœud lorsqu'il n'est pas nécessaire ( node.stop).


Ceci est la liste des téléchargements sur le nœud du serveur

Quel est le résultat?


  • Lorsque je m'assois pour écrire du code, il est automatiquement enregistré dans IPFS
  • Toutes les versions sont toujours disponibles via des liens personnels / ipfs / Qm ...
  • Je peux publier le site dans IPNS afin de ne pas envoyer un tas de liens au client
  • Le nœud local se réveille uniquement pour télécharger des fichiers et contacter le serveur, puis il s'endort de nouveau
  • Localement, je n'ai qu'une seule copie du site, le trafic vers les téléchargements uniques de nouvelles versions est bien inférieur au trafic de fond du nœud IPFS
  • Je peux enfin travailler dans un localhost sans mal de tête avec le versioning

Tout ce bonheur me coûte le prix du VPS le moins cher, alors qu'il y a suffisamment de ressources et devrait être suffisant ailleurs pour un an, après quoi il sera possible d'acheter un autre serveur ou d'archiver l'ancien.

En général, en utilisant IPFS, vous pouvez faire des choses beaucoup plus intéressantes. Je veux vraiment penser à cet utilitaire et en écrire un nouveau, avec gluant. En attendant, conservez le site que nous avons écrit et hébergé pendant tout ce temps:

https://ipfs.slipner.ru/ - avec le domaine
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
https : // gt / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS via la porte officielle

Navigateur Opera avec prise en charge IPFS




Il y a quelques jours à peine, Opera Software a déployé le premier navigateur avec prise en charge native d'IPFS. Jusqu'à présent, cependant, uniquement dans la version mobile pour Android. Cela signifie qu'il peut accéder directement au réseau IPFS sans passerelles Web! Nous attendons que le support soit ajouté à la version de bureau.




All Articles