IPFS auf dem Server. Hosten Sie Websites von einem Laptop aus



Ich muss oft eine statische Seite oder Website veröffentlichen, eine Demo mit einem Webformular oder Layout. Es ist nicht immer bequem, jedes Mal irgendwo wie Jsfiddle zu gießen, und das Bearbeiten von Statiken in einem lokalen Host ist viel schneller und angenehmer. Probleme beginnen, wenn ich jemanden brauche, der meine Arbeit zeigt oder einfach dieselbe Seite vom Telefon aus öffnet. Wir müssen all diese endlosen Arbeitsoptionen und Skizzen hosten, für jede Upload-Datei wieder vhosts schrauben.

Mit IPFS können Sie Websites im Internet direkt von Ihrem Laptop aus hosten. Alle Aktualisierungen lokaler Dateien werden sofort im Internet angewendet und müssen nicht irgendwo hochgeladen werden. Wenn der Laptop vom Netzwerk getrennt wird, ist die Site weiterhin verfügbar. IPFS ist wie Bittorrent, nur für das Web.

In diesem Artikel werden wir den IPFS-Knoten auf dem Server bereitstellen und diese Technologie in der Praxis ausprobieren.

Was ist IPFS?


IPFS ist ein großes, dezentrales P2P-Netzwerk, das als Dateifreigabedienst, Webarchiv oder Bittorrent-Ersatz verwendet wird . Alle coolen Beispiele für die Verwendung von IPFS in realen Projekten finden Sie in der Hall of Fame auf der offiziellen Website awesome.ipfs.io .

Kurz gesagt funktioniert es so: Gespeicherte Dateien erhalten ihren Multicash und sind in Blöcke unterteilt, die über alle interessierten Knoten verteilt sind. DHT wird auf den Knoten synchronisiert. Wenn eine Datei heruntergeladen wird, werden Blöcke von verschiedenen (theoretisch den nächsten) Knoten gesammelt. Um auf die Datei oder das Verzeichnis zuzugreifen, müssen Sie Ihren Knoten nicht erhöhen. Alle sind über den Browser zugänglich. Dies führt uns zu der beliebten Funktion: Sie können Websites auf IPFS kostenlos hosten. Aber nur statische Daten, bei denen Daten mehr als einmal alle paar Minuten aktualisiert werden, sind unpraktisch, da dieselben Hashes einen Link bilden und sich bei jeder Änderung der Datei ändern (es gibt ein permanentes IPNS-Namenssystem, das jedoch langsam ist). Dies hat jedoch nicht verhindert, dass die Jungs von Orbitdb die Datenbank auf IPFS flashen , aber es gibt einige Nuancen. Lesen Sie hier mehr über das Netzwerkgerät ..


Angenommen, ich habe einen Knoten, mit dem ich statische Websites kostenlos verteile. Ich gehe selbst zu ihnen und bringe manchmal meine Kollegen dazu, nachzuschauen. Die Gesamtdatenmenge ist nur durch die Größe meiner Festplatte und die Download-Geschwindigkeit durch das Heim-Internet begrenzt. Was könnte besser sein? Es gibt jedoch eine Reihe von Problemen. Erstens benötigt IPFS selbst einiges an Internet und einen soliden Teil des Prozessors, und selbst ohne Datenverkehr benötigt es immer einen Teil der Ressourcen für die DHT-Synchronisation. Zweitens arbeite ich hauptsächlich mit einem Laptop und behalte alle Dateien darauf. Daher habe ich keineswegs immer eine selbstgemachte halbe Gigabyte-Glasfaser zur Hand. Kurze Pausen für IPFS sind kein Problem, sie halten den Cache mehrere Stunden lang in DHT, aber es kostet irgendwo, ein paar Tage zu bleiben, und jetzt werden alle Ihre Projekte glücklich aus dem Netzwerk verschüttet. Sie können Dateien auf dem Desktop stampfen ("merken"), dies verdoppelt jedoch mindestens den Datenverkehr.das ist auch nicht comme il faut. Was zu tun ist? Ich habe versucht, den Knoten auf dem Server anzuheben, um den Laptop zu entladen, musste die Dateien jedoch manuell hochladen, wie bei einem normalen Hosting. Am Ende habe ich Docks und APIs geraucht und ein einfaches Dienstprogramm geschrieben, um meine lokale Statik mit dem Server zu synchronisieren.



IPFS verfügt über zwei separate Implementierungen: go-ipfs und js-ipfs. JS ist näher bei mir, also habe ich darüber geschrieben. Ich wollte, dass das Dienstprogramm Ordner mit meinen Websites abrufen und regelmäßig während der Arbeit in das Netzwerk hochladen kann. Die Serverseite sollte die Hashes der Ordner abfangen und sie treten, damit die Dateien nicht verloren gehen.

Installation und Start


npm install ipfs -g

Js-ipfs hat ein ziemlich detailliertes Tutorial mit Beispielen , also:

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

Der Knoten läuft in mehreren Zeilen:

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

Konfigurationen und Samen dafür sind genau dort registriert, aber das ist genug, um zu beginnen.

Wir schreiben Funktionalität


Als Nächstes müssen Sie die Dateien auf den Knoten übertragen und in IPFS hochladen. Verwenden Sie dazu node.adddie Option { recursive: true }für Ordner. Die Adresse kann beim Start in Argumenten übergeben und per Befehl gespeichert werden. Es ist wichtig, nur den letzten Hash aufzuzeichnen - er stammt aus dem Stammordner:



Der gesamte Ordner wurde erfolgreich in das Netzwerk verschoben. Die Site wird über den Link geöffnet und der Ordner selbst kann im IPFS-Webmord überprüft werden:



Um den Speichervorgang zu vereinfachen, habe ich das Speichern mit der Versionsnummer und der Veröffentlichung in IPNS über hinzugefügtnode.name.publish. Aber manuell speichern ist langweilig! Ich möchte in der Lage sein, die aktualisierte Site so schnell zu sehen, wie ich Änderungen im localhost sehe, was bedeutet, dass die Aktualisierung automatisch erfolgen sollte. Und wenn ich plötzlich vergesse, etwas zu speichern, den Laptop ausschalten und nach Hause gehen, wird die aktuelle Version nicht nur im Editor, sondern auch im Netzwerk gespeichert. Standardmäßig werden alle 10 Minuten automatische Speicherungen durchgeführt, wobei das Intervall für verschiedene Arbeitsraten geändert werden kann. Übrigens, wenn sich die Dateien seit dem letzten Speichern nicht geändert haben, ändert sich auch der Hash nicht.



Cool, aber bisher verteilen wir alle Dateien vom lokalen Computer. Es ist Zeit, den Serverknoten zu verbinden! Wir nehmen den experimentellen Pubsub , holen das Thema aus den Argumenten beim Start und versuchen, den Save Hash zu liefern:



Hurra! Die kleine Sache ist, den Server alle empfangenen Hashes speichern zu lassen und sie zu treten (node.pin.add) und bringen Sie dem Client bei, seinen Knoten zu kürzen, wenn er nicht benötigt wird ( node.stop).


Dies ist die Liste der Downloads auf dem Serverknoten

Was ist das Ergebnis?


  • Wenn ich mich hinsetze, um Code zu schreiben, wird dieser automatisch in IPFS gespeichert
  • Alle Versionen sind immer über persönliche Links / ipfs / Qm ...
  • Ich kann die Site in IPNS veröffentlichen, um keine Links an den Client zu senden
  • Der lokale Knoten wacht nur auf, um Dateien hochzuladen und den Server zu kontaktieren. Dann schläft er wieder ein
  • Vor Ort habe ich nur eine Kopie der Site. Der Datenverkehr zu einzelnen Downloads neuer Versionen ist viel geringer als der Hintergrunddatenverkehr des IPFS-Knotens
  • Ich kann endlich in einem lokalen Host ohne Kopfschmerzen mit der Versionierung arbeiten

All dieses Glück kostet mich den Preis des billigsten VPS, obwohl es genügend Ressourcen gibt und für ein Jahr an einem anderen Ort ausreichen sollte. Danach kann ich einen anderen Server kaufen oder den alten archivieren.

Im Allgemeinen können Sie mit IPFS viel interessantere Dinge tun. Ich möchte auf jeden Fall an dieses Dienstprogramm denken und ein neues mit gooey schreiben. Behalten Sie in der Zwischenzeit die Site bei, die wir die ganze Zeit geschrieben und gehostet haben:

https://ipfs.slipner.ru/ - mit der Domain
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
https : / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS über das offizielle Gate

Opera-Browser mit IPFS-Unterstützung




Vor wenigen Tagen hat Opera Software den ersten Browser mit nativer IPFS-Unterstützung eingeführt. Bisher jedoch nur in der mobilen Version für Android. Dies bedeutet, dass es ohne Web-Gateways direkt auf das IPFS-Netzwerk zugreifen kann! Wir warten darauf, dass der Support zur Desktop-Version hinzugefügt wird.




All Articles