IPFS: Docker
IPFS es un protocolo P2P
diseñado para hacer que la Web sea más rápida, segura y abierta.
Las siglas IPFS
proviene de InterPlanetary File System, el cual es un nuevo protocolo de internet que renueva los demás protocolos ofreciendo una respuesta a todo, como alternativa sobre HTTP.
Este nuevo protocolo aún se encuentra en su etapa prematura de desarrollo (Alpha), y no brinda demasiadas posibilidades a nivel técnico, a pesar de ello, el protocolo funciona y facilita un seriado de guias y casos prácticos para así tener una toma de contacto con él.
El protocolo surge en el año 2014, inicialmente basando su desarrollo en el Blockchain de Bitcoin.
Las diferencias fundamentales entre el protocolo actualmente más extendido (HTTP) y el IPFS se puede ver en la siguiente comparativa, especialmente cuando lanzamos una consulta:
IPFS proporciona distribución de datos de alto rendimiento y baja latencia. También es descentralizado y seguro. Se puede utilizar para enviar contenido a sitios web, almacenar archivos a nivel mundial con versiones y copias de seguridad automáticas, facilitar el intercambio seguro de archivos y la comunicación cifrada.
Algunos proyectos interesantes que se están construyendo bajo esta iniciativa son:
- Akasha - Una red social de próxima generación
- BlockFreight - Una red abierta para el transporte mundial de mercancías
- Digix - Una plataforma para tokenizar oro físico
- Infura - Un proveedor de infraestructura para DApps
- Livepeer - Una plataforma descentralizada de transmisión de video en vivo
- Origen - Un mercado peer-to-peer para la economía colaborativa
- uPort - Un sistema de identidad auto-soberano
A pesar del impresionante rendimiento de IPFS, algunos problemas aún no se han resuelto por completo. En primer lugar, el direccionamiento de contenido en IPFS actualmente no es muy fácil de recordar. Un enlace IPFS típico se ve así:
https://ipfs.fleek.co/ipfs/QmbKsfZSFNLdnxtPwHcZPWtWJLte413gHJWsx2vmbi8cq8
Pero también surgen alternativas de redirección, por ejemplo del enlace previo, una ruta más sencilla de recordar sería:
Si te apetece investigar sobre esta red, una forma sencilla es mediante Docker, para ello vamos a realizar unos pasos previos para preparar el entorno. En primer lugar creamos las carpetas donde alojar el proyecto:
mkdir -p $HOME/docker/ipfs/config && \
cd $HOME/docker/ipfs
Ahora vamos a crear el fichero de configuración docker-compose.yml
lanzando el siguiente comando:
cat << EOF > $HOME/docker/ipfs/docker-compose.yml
version: "2.1"
services:
ipfs:
image: ghcr.io/linuxserver/ipfs
container_name: IPFS
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
volumes:
- '~/docker/ipfs/config:/config'
ports:
- 1080:80
- 4001:4001
- 5001:5001
- 2080:8080
restart: always
EOF
Vamos a repasar los principales parámetros a modificar para adaptarlos a nuestro sistema y configuración especifica:
Parámetro | Función |
---|---|
PUID=1000 |
UID de nuestro usuario. Para saber nuestro ID ejecutar en terminal: id |
PGID=1000 |
GID de nuestro usuario. Para saber nuestro ID ejecutar en terminal: id |
TZ=Europe/Madrid |
Zona horaria Europa/Madrid |
~/docker/ipfs/config:/config |
Ruta donde se almacena la configuración |
1080:80 |
Puerto de gestión intefaz Web |
4001:4001 |
Puerto para compartir contenido P2P |
5001:5001 |
Puerto comunicación API: Web UI + IPFS |
2080:8080 |
Puerto de puerta enlace para servir contenido IPFS |
restart: always |
Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio |
Una vez configurado, lo levantamos para ser creado y ejecutado:
docker-compose up -d
Tras ello, podremos configurar el servicio, que en mi caso estaría disponible en la dirección web http://192.168.1.90:1080.
Durante el primer acceso veremos un error de comunicación en la interfaz:
Definimos la IP del Servidor (Ejemplo: 192.168.1.90) y el puerto API (5001) en nuestro servidor y hacemos clic sobre enviar:
Nos saldra un emergente informando que ya estamos conectados a la red IPFS:
En la pestaña de Estado podremos evaluar el rendimiento y consumo del servicio:
En la pestaña Archivos añadimos el contenido a compartir mediante la red:
En la pestaña Explorar podremos analizar como se estructuran los datos relacionando cada nodo:
En la pestaña Pares descubrimos usuarios que estan interconectados a la red:
En la pestaña Configuración podremos personalizar nuestra interacción:
Como comentamos cuando analizamos el docker-compose
vimos que para poder usar plenamente la red debiamos de abrir el puerto 4001
en nuestro sistema para exteriorizar el servicio:
NOTA: Recomiendo encarecidamente revisar la documentación del proyecto se encuentra muy bien detallada en esta guía, para poder completar la experiencia de esta red.
Y listo!