- Jordi Torrens
Infraestructura WEB3: obtenga su propio nodo IPFS.
En artículos anteriores hemos explorado IPFS y sus capacidades, y cómo se ha convertido en uno de los pilares de WEB3 como sistema de almacenamiento de activos digitales por excelencia.
IPFS o InterPlanetary File System es una red peer-to-peer y su propósito es publicar datos (archivos, directorios, sitios web, etc.) de forma descentralizada. De esta manera podemos publicar datos de forma segura dentro de la red y recuperarlos desde cualquier lugar de Internet.
En este artículo vamos a explorar cómo hacer nuestra propia instalación de un nodo de servidor IPFS ( kubo ) y qué nos aporta tener nuestro propio nodo IPFS.
Instalación de un nodo IPFS de Linux
IPFS es multiplataforma, siendo posible instalarlo en los diferentes SO actuales como Windows, Mac y Linux. En este artículo nos centramos en la instalación basada en Ubuntu Linux con el IPFS Kubo precompilado para Golang. También podemos descargar el código fuente o binario precompilado desde el repositorio oficial de GIT.
GIT: https://github.com/ipfs/kubo
Binario: https://dist.ipfs.tech/#kubo
Kubo se ejecuta en la mayoría de los sistemas Windows, MacOS, Linux, FreeBSD y OpenBSD que cumplen con los siguientes requisitos. Una instalación básica utiliza alrededor de 12 MB de espacio en disco.
6 GiB de memoria
2 núcleos de CPU ( kubo es altamente paralelo)
Descargue el binario del sitio web oficial de kubo
Kubo se ejecuta en la mayoría de los sistemas Windows, MacOS, Linux, FreeBSD y OpenBSD que cumplen con los siguientes requisitos. Una instalación básica utiliza alrededor de 12 MB de espacio en disco .
- 6 GiB de memoria
- 2 núcleos de CPU ( kubo es altamente paralelo)
Descargue el binario del sitio web oficial de kubo
# wget https://dist.ipfs.tech/kubo/v0.20.0/kubo_v0.20.0_linux-amd64.tar.gz
Descomprimir el archivo tar.gz
# tar -xzvf kubo_v0.20.0_linux-amd64.tar.gz
Ejecutar instalación de archivos
# install.sh
Moved ./ipfs to /usr/local/bin
A partir de este punto tenemos el binario instalado en nuestro host como ejecutable y procederemos a configurar nuestro nodo en modo servidor asumiendo que el host está en un centro de datos; También podemos realizar la misma instalación en nuestra máquina local.
IPFS almacena todas sus configuraciones y datos internos en el directorio /$HOME/ ipfs /. Antes de utilizar Kubo por primera vez, debes inicializar el repositorio.
(NOTA: la inicialización no requiere privilegios de root).
# ipfs init --profile server (datacenter) evita que ipfs busque otros nodos en la red local
# ipfs init (local machine)
Esto generará el archivo de configuración que contiene el identificador de nodo único y la estructura del directorio.
En este punto crearemos un servicio para iniciar y para que IPFS inicie el servicio automáticamente al iniciar el host.
Crearemos un archivo llamado ipfs.service en el directorio / etc / systemd /system/.
[Unit]
Description=IPFS daemon
Wants=network.target
After=network.target
[Service]
User=ipfs
Environment=”IPFS_PATH=/home/user/ipfs/home/”
ExecStart=/usr/local/bin/ipfs daemon
Restart=on-failure
User=user
Group=user
[Install]
WantedBy=multiuser.target
Una vez creado ejecutaremos los siguientes comandos:
# systemctl enable ipfs
# systemctl daemon-reload
# systemctl start ipfs
# systemctl status ipfs
Estructura del nodo
Inicio /$HOME/ ipfs /home/
Configuración de archivos /$HOME/ ipfs /home/config
FS Blocks /$HOME/ ipfs /home/blocks
FS Datastore /$HOME/ ipfs /home/datastore
[Unit]
Description=IPFS daemon
Wants=network.target
After=network.target
[Service]
User=ipfs
Environment=”IPFS_PATH=/home/user/ipfs/home/”
ExecStart=/usr/local/bin/ipfs daemon
Restart=on-failure
User=user
Group=user
[Install]
WantedBy=multiuser.targetService ports
4001 swarm (IPFS network port)
5001 webUI (it is advisable to secure this port in case you are in a datacenter)
80 gateway (ipfs endpoint, it is advisable to create a DNS and add an SSL layer)
Ahora tenemos un nodo IPFS completamente funcional.
Cómo cargar un archivo a través del nodo IPFS
Para subir archivos a la red IPFS a través del nodo tenemos dos opciones, desde el propio shell del host o mediante la api del nodo
API:
# curl -vk “https://nuestro_host:5001/api/v0/add” -F file=@”<file.png>”
{“Name”:”archivo.png”,”Hash”:”QmawvemLB8kPK5t9adkln87E9fHtt1d2ct487Rb1uvc85m7v7″,”Size”:”19″}
# ipfs pin ls QmawvemLB8kPK5t9adkln87E9fHtt1d2ct487Rb1uvc85m7v7
QmawvemLB8kPK5t9adkln87E9fHtt1d2ct487Rb1uvc85m7v7 recursive
Shell:
# ipfs add file.png
¿Fijado o no fijado? Esa es la pregunta
Por defecto, cuando subimos un archivo a la red IPFS se peinará, pero ¿qué significa fijar? Cada servidor de red IPFS almacena localmente sus archivos que pueden ser solicitados por otro nodo, cuando otro nodo solicita un archivo que tenemos en nuestro servidor parte o todos los bloques del archivo se replicarán en el nodo que lo ha solicitado siendo replicado en dos o varios nodos pero siempre tendremos en nuestro servidor el archivo ya que por defecto viene pineado en el servidor desde donde se ha subido.
# curl -v “http://localhost:5001/api/v0/add?pin=false” -F file=@”archivo.png”
# ipfs add –pin=false archivo.png
Entonces, ¿en qué caso no nos interesa no fijar el archivo?
Si usamos IPFS cuando estamos desarrollando, tal vez no estemos interesados en llenar el nodo con archivos de prueba permanentes si no están anclados, podemos eliminarlos fácilmente realizando un “GC” para purgar el nodo de los bloques que no estamos interesados, así como archivos que no están fijados.
¿GC, recolector de basura en IPFS?
Por la naturaleza de las redes P2P, los nodos IPFS comparten bloques de otros servidores dentro de la red IPFS, de vez en cuando es saludable purgar nuestro nodo y reiniciar el proceso IPFS periódicamente para borrar la memoria y realizar un «ipfs repo gc » para Evitar el almacenamiento excesivo de bloques en nuestro nodo.
Conclusiones
En este artículo aprendemos cómo instalar un servidor IPFS en una distribución Linux, cómo subir un archivo a la red IPFS ya sea desde el shell o desde la API del nodo, por qué anclar o no un archivo que subimos a IPFS y cómo purgar nuestro servidor IPFS de archivos no deseados.
En futuros artículos profundizaremos en los casos de uso del nodo IPFS como IPNS, el CID v0 o v1 y cómo asegurar fácil y eficientemente nuestro nodo IPFS.