IPFS di server. Situs host dari laptop



Saya sering perlu menerbitkan halaman atau situs web statis, demo dengan formulir atau tata letak web. Menuangkan suatu tempat seperti Jsfiddle setiap waktu tidak selalu nyaman, dan mengedit statika di server lokal jauh lebih cepat dan lebih menyenangkan. Masalah mulai ketika saya membutuhkan seseorang untuk menunjukkan pekerjaan saya, atau hanya membuka halaman yang sama dari telepon. Kami harus meng-host semua opsi dan sketsa yang tak ada habisnya, untuk setiap file unggah lagi, mengacaukan vhosts.

Menggunakan IPFS, Anda dapat meng-host situs di Internet langsung dari laptop Anda, semua pembaruan file lokal akan segera diterapkan di Internet, dan mereka tidak perlu diunggah di suatu tempat. Ketika laptop terputus dari jaringan, situs tersebut akan tetap tersedia. IPFS seperti Bittorrent, hanya untuk web.

Dalam artikel ini, kami akan menggunakan node IPFS di server dan mencoba teknologi ini dalam praktiknya.

Apa itu IPFS?


IPFS adalah jaringan P2P yang besar dan terdesentralisasi yang digunakan sebagai layanan berbagi file, arsip web , atau penggantian Bittorrent . Semua contoh keren menggunakan IPFS dalam proyek nyata dapat ditemukan di hall of fame di situs resmi awesome.ipfs.io .

Secara singkat, ini bekerja seperti ini: file yang disimpan mendapatkan multicash dan dibagi menjadi blok yang tersebar di semua node yang tertarik. DHT disinkronkan pada node, ketika file diunduh, blok dikumpulkan dari node yang berbeda (secara teori, terdekat). Selain itu, untuk mengakses file atau direktori Anda tidak perlu menaikkan node Anda, mereka semua dapat diakses dari browser, yang membawa kita ke fitur populer: Anda dapat meng-host situs di IPFS secara gratis. Tetapi hanya statika, memperbarui data lebih dari sekali setiap beberapa menit tidak nyaman karena hash yang sama yang membentuk tautan dan berubah setiap kali file diubah (ada sistem nama IPNS permanen, tetapi lambat). Namun, ini tidak menghentikan dudes dari Orbitdb dari mem-flash database ke IPFS , tetapi ada beberapa nuansa. Baca lebih lanjut tentang perangkat jaringan di sini..


Misalkan saya memiliki simpul yang saya gunakan untuk mendistribusikan situs statis secara gratis, saya pergi sendiri dan kadang-kadang membawa kolega saya untuk melihatnya. Jumlah total data hanya dibatasi oleh ukuran disk saya, dan kecepatan pengunduhan oleh internet di rumah, apa yang bisa lebih baik? Tetapi ada sejumlah masalah. Pertama, IPFS sendiri membutuhkan sedikit Internet dan prosesor yang solid, dan bahkan tanpa lalu lintas, selalu membutuhkan beberapa sumber daya untuk sinkronisasi DHT. Kedua, saya terutama bekerja dengan laptop dan menyimpan semua file di dalamnya, dan karena itu jauh dari selalu bahwa saya memiliki serat setengah gigabyte buatan sendiri. Istirahat pendek untuk IPFS bukan masalah, ia menyimpan cache di DHT selama beberapa jam, tetapi biayanya harus dikeluarkan untuk beberapa hari, dan sekarang semua proyek Anda dengan senang hati keluar dari jaringan. Anda dapat menginjak-injak ("ingat") file di desktop, tetapi ini setidaknya akan menggandakan lalu lintas,yang juga tidak kome il faut. Apa yang harus dilakukan? Saya mencoba menaikkan node di server untuk membongkar laptop, tetapi saya masih harus mengunggah file secara manual, seperti pada hosting biasa. Akibatnya, saya merokok dermaga dan API dan menulis utilitas sederhana untuk menyinkronkan statika lokal saya dengan server.



IPFS memiliki dua implementasi terpisah: go-ipfs dan js-ipfs. JS lebih dekat dengan saya, jadi saya menulisnya. Saya ingin utilitas dapat mengambil folder dengan situs saya, dan secara teratur mengunggahnya ke jaringan saat saya bekerja. Sisi server harus menangkap hash folder dan menendang mereka sehingga file tidak hilang.

Instalasi dan peluncuran


npm install ipfs -g

Js-ipfs memiliki tutorial yang cukup rinci dengan contoh-contoh , jadi:

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

Node berjalan dalam beberapa baris:

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

Konfigurasi dan benih untuk itu terdaftar di sana, tetapi ini sudah cukup untuk memulai.

Kami menulis fungsionalitas


Selanjutnya, Anda perlu mentransfer file ke node dan mengunggahnya ke IPFS. Untuk melakukan ini, gunakan node.adddengan opsi { recursive: true }untuk folder. Alamat dapat dikirimkan dalam argumen saat startup, dan disimpan dengan perintah. Penting untuk merekam hanya hash terakhir - ini dari folder root:



Seluruh folder telah berhasil masuk ke jaringan. Situs akan dibuka melalui tautan, dan folder itu sendiri dapat diperiksa pada webmord IPFS:



Selanjutnya, untuk memudahkan proses penyimpanan, saya menambahkan penyimpanan dengan nomor versi dan publikasi di IPNS melaluinode.name.publish. Tetapi menabung secara manual itu membosankan! Saya ingin dapat menonton situs yang diperbarui secepat saya melihat perubahan di localhost, yang berarti bahwa pembaruan harus terjadi secara otomatis. Dan jika saya tiba-tiba lupa untuk menyimpan sesuatu, matikan laptop dan pulang, versi saat ini akan disimpan tidak hanya di editor, tetapi juga di jaringan. Kami akan membuat penyimpanan otomatis secara default setiap 10 menit, dengan kemampuan untuk mengubah interval untuk berbagai tingkat pekerjaan. By the way, jika file tidak berubah sejak penyimpanan terakhir, hash tidak akan berubah.



Keren, tapi sejauh ini kami mendistribusikan semua file dari mesin lokal. Sudah waktunya untuk menghubungkan node server! Kami mengambil pubsub eksperimental , mendapatkan topik dari argumen saat startup dan mencoba untuk mengirimkan hash save:



Hore! Hal kecil adalah membuat server menyimpan semua hash yang diterima dan menendang mereka (node.pin.add), dan ajarkan klien untuk mengurangi simpulnya saat tidak diperlukan ( node.stop).


Ini adalah daftar unduhan pada node server

Apa hasilnya?


  • Ketika saya duduk untuk menulis kode, kode itu secara otomatis disimpan dalam IPFS
  • Semua versi selalu tersedia melalui tautan pribadi / ipfs / Qm ...
  • Saya dapat menerbitkan situs di IPNS agar tidak mengirim banyak tautan ke klien
  • Node lokal hanya bangun untuk mengunggah file dan menghubungi server, lalu tertidur kembali
  • Secara lokal, saya hanya memiliki satu salinan situs, lalu lintas ke unduhan tunggal versi baru jauh lebih sedikit daripada lalu lintas latar belakang simpul IPFS
  • Saya akhirnya bisa bekerja di localhost tanpa pusing dengan versi

Semua kebahagiaan ini membuat saya kehilangan harga VPS termurah, sementara ada sumber daya yang cukup dan harus cukup di tempat lain untuk satu tahun ke depan, setelah itu akan mungkin untuk membeli server lain atau mengarsipkan yang lama.

Secara umum, menggunakan IPFS, Anda dapat melakukan banyak hal yang lebih menarik. Saya pasti ingin membawa utilitas ini ke pikiran dan menulis yang baru, dengan lengket. Sementara itu, pertahankan situs yang kami tulis dan host selama ini:

https://ipfs.slipner.ru/ - dengan domain
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
https://ipfs.slipner.ru / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS melalui gerbang resmi

Browser Opera dengan dukungan IPFS




Hanya beberapa hari yang lalu, Opera Software meluncurkan browser pertama dengan dukungan IPFS asli. Sejauh ini, bagaimanapun, hanya dalam versi mobile untuk Android. Ini berarti dapat langsung mengakses jaringan IPFS tanpa gateway web! Kami menunggu dukungan untuk ditambahkan ke versi desktop.




All Articles