IPFS en el servidor. Alojar sitios desde una computadora portátil



A menudo necesito publicar una página estática o un sitio web, una demostración con un formulario o diseño web. Verter en algún lugar como Jsfiddle cada vez no siempre es conveniente, y editar estadísticas en un host local es mucho más rápido y más agradable. Los problemas comienzan cuando necesito que alguien muestre mi trabajo, o simplemente abra la misma página desde el teléfono. Tenemos que alojar todas estas opciones y bocetos de trabajo interminables, para cada carga de archivos nuevamente, atornille vhosts.

Con IPFS, puede alojar sitios en Internet directamente desde su computadora portátil, todas las actualizaciones de los archivos locales se aplicarán de inmediato en Internet y no es necesario cargarlas en algún lugar. Cuando la computadora portátil se desconecta de la red, el sitio seguirá estando disponible. IPFS es como Bittorrent, solo para la web.

En el artículo, implementaremos el nodo IPFS en el servidor y probaremos esta tecnología en la práctica.

¿Qué es el IPFS?


IPFS es una red p2p grande y descentralizada que se utiliza como servicio para compartir archivos, archivo web o reemplazo de Bittorrent . Todos los ejemplos interesantes del uso de IPFS en proyectos reales se pueden encontrar en el salón de la fama en el sitio web oficial awesome.ipfs.io .

En pocas palabras, funciona así: los archivos almacenados obtienen su multicash y se dividen en bloques que se encuentran dispersos en todos los nodos interesados. DHT se sincroniza en los nodos; cuando se descarga un archivo, los bloques se recopilan de nodos diferentes (en teoría, los más cercanos). Además, para acceder al archivo o directorio no necesita elevar su nodo, todos son accesibles desde el navegador, lo que nos lleva a la característica popular: puede alojar sitios en IPFS de forma gratuita. Pero solo las estadísticas, la actualización de los datos más de una vez cada pocos minutos es inconveniente debido a los mismos hashes que forman un enlace y cambian cada vez que se cambia el archivo (hay un sistema de nombres IPNS permanente, pero es lento). Sin embargo, esto no impidió que los tipos de Orbitdb actualizaran la base de datos a IPFS , pero hay algunos matices. Lea más sobre el dispositivo de red aquí..


Supongamos que tengo un nodo con el que distribuyo sitios estáticos de forma gratuita, voy a ellos y algunas veces llevo a mis colegas a buscar. La cantidad total de datos está limitada solo por el tamaño de mi disco y la velocidad de descarga de Internet en el hogar, ¿qué podría ser mejor? Pero hay una serie de problemas. En primer lugar, el propio IPFS necesita bastante Internet y una parte sólida del procesador, e incluso sin tráfico, siempre toma parte de los recursos para la sincronización DHT. En segundo lugar, trabajo principalmente con una computadora portátil y mantengo todos los archivos en ella, y por lo tanto, no está lejos de tener una fibra casera de medio gigabyte a mano. Los descansos breves para IPFS no son un problema, mantiene el caché en DHT durante varias horas, pero cuesta un lugar dejarlo durante un par de días, y ahora todos sus proyectos están felizmente saliendo de la red. Puede pisotear ("recordar") archivos en el escritorio, pero esto al menos duplicará el tráfico,que tampoco es comme il faut. ¿Qué hacer? Traté de elevar el nodo en el servidor para descargar la computadora portátil, pero aún así tuve que cargar los archivos manualmente, como en un alojamiento normal. Como resultado, fumé muelles y API y escribí una sencilla utilidad para sincronizar mis estadísticas locales con el servidor.



IPFS tiene dos implementaciones separadas: go-ipfs y js-ipfs. JS está más cerca de mí, así que escribí sobre eso. Quería que la utilidad pudiera recoger carpetas con mis sitios y subirlas regularmente a la red mientras trabajo. El lado del servidor debe capturar los hashes de las carpetas y patearlos para que los archivos no se pierdan.

Instalación y lanzamiento


npm install ipfs -g

Js-ipfs tiene un tutorial bastante detallado con ejemplos , así que:

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

El nodo se ejecuta en varias líneas:

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

Las configuraciones y semillas están registradas allí, pero esto es suficiente para comenzar.

Escribimos funcionalidad


A continuación, debe transferir los archivos al nodo y subirlos a IPFS. Para hacer esto, use node.addcon la opción { recursive: true }para carpetas. La dirección puede pasarse en argumentos al inicio y guardarse por comando. Es importante registrar solo el último hash: es de la carpeta raíz:



toda la carpeta se ha enviado correctamente a la red. El sitio se abrirá mediante un enlace, y la carpeta en sí se puede verificar en el webmord de IPFS: a



continuación, para facilitar el proceso de guardado, agregué el guardado con el número de versión y la publicación en IPNS a través denode.name.publish. ¡Pero guardar manualmente es aburrido! Quiero poder ver el sitio actualizado tan rápido como veo cambios en el localhost, lo que significa que la actualización debería ocurrir automáticamente. Y si de repente me olvido de guardar algo, apago la computadora portátil y me voy a casa, la versión actual se guardará no solo en el editor, sino también en la red. Haremos un guardado automático por defecto una vez cada 10 minutos, con la capacidad de cambiar el intervalo para diferentes tasas de trabajo. Por cierto, si los archivos no han cambiado desde el último guardado, el hash tampoco cambiará.



Genial, pero hasta ahora estamos distribuyendo todos los archivos de la máquina local. ¡Es hora de conectar el nodo del servidor! Tomamos el pubsub experimental , tomamos el tema de los argumentos al inicio e intentamos entregar el hash de guardado:



¡Hurra! Lo pequeño es hacer que el servidor almacene todos los hashes recibidos y patearlos (node.pin.add), y enseñe al cliente a cortar su nodo cuando no sea necesario ( node.stop).


Esta es la lista de descargas en el nodo del servidor

Cual es el resultado?


  • Cuando me siento a escribir código, se guarda automáticamente en IPFS
  • Todas las versiones están siempre disponibles a través de enlaces personales / ipfs / Qm ...
  • Puedo publicar el sitio en IPNS para no enviar un montón de enlaces al cliente
  • El nodo local se activa solo para cargar archivos y contactar con el servidor, luego se duerme nuevamente
  • A nivel local, solo tengo una copia del sitio, el tráfico a descargas individuales de nuevas versiones es mucho menor que el tráfico en segundo plano del nodo IPFS
  • Finalmente puedo trabajar en un localhost sin dolor de cabeza con el control de versiones

Toda esta felicidad me cuesta el precio del VPS más barato, mientras que hay suficientes recursos y deberían ser suficientes en otro lugar durante un año, después de lo cual será posible comprar otro servidor o archivar el antiguo.

En general, usando IPFS, puede hacer cosas mucho más interesantes. Definitivamente quiero recordar esta utilidad y escribir una nueva, con pegajosa. Mientras tanto, mantenga el sitio que escribimos y alojamos todo este tiempo:

https://ipfs.slipner.ru/ - con el dominio
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
https : // gt / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS a través de la puerta oficial

Navegador Opera con soporte IPFS




Hace solo unos días, Opera Software lanzó el primer navegador con soporte nativo de IPFS. Hasta ahora, sin embargo, solo en la versión móvil para Android. ¡Esto significa que puede acceder directamente a la red IPFS sin puertas de enlace web! Estamos esperando que se agregue el soporte a la versión de escritorio.




All Articles