<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: .cryptojei/</title>
    <description>The latest articles on Forem by .cryptojei/ (@cryptojei).</description>
    <link>https://forem.com/cryptojei</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F823059%2F1752eb74-0277-4eb9-b43b-49dc705e5680.jpg</url>
      <title>Forem: .cryptojei/</title>
      <link>https://forem.com/cryptojei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cryptojei"/>
    <language>en</language>
    <item>
      <title>Como alojar tu sitio web en IPFS con tu dominio Handshake HNS - dweb</title>
      <dc:creator>.cryptojei/</dc:creator>
      <pubDate>Mon, 28 Feb 2022 20:00:38 +0000</pubDate>
      <link>https://forem.com/cryptojei/como-alojar-tu-sitio-web-en-ipfs-con-tu-dominio-handshake-hns-dweb-2fnc</link>
      <guid>https://forem.com/cryptojei/como-alojar-tu-sitio-web-en-ipfs-con-tu-dominio-handshake-hns-dweb-2fnc</guid>
      <description>&lt;p&gt;Últimamente se puesto muy de moda el termino web3, que trae un abanico de nuevas soluciones a la web tradicional dentro del que esta IPFS (sistema de archivos interplanetario), con el que empezamos a pensar un alojamiento descentralizado sostenible en el tiempo, en esta pequeña guía te enseñare a desplegar un nodo local de IPFS y almacenar los sitios web que desees y poder publicarlos en internet con un dominio TLD totalmente descentralizado y de manera segura gracias a handshake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requisitos:&lt;/strong&gt;&lt;br&gt;
Dominio Handshake ← &lt;a href="https://www.namebase.io/register/yyigok"&gt;puedes comprar uno aqui&lt;/a&gt;&lt;br&gt;
Servidor 1gb o 2gb ram&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Instalar tu nodo IPFS&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En esta guia nos centraremos en sistemas operativos linux, si quieres una guia para windows hasmelo saber&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Iniciamos actualizando librerias e instalando algunas dependencias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt-get update
apt-get install tar wget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Descargamos la ultima version de los binarios e instalamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://dist.ipfs.io/go-ipfs/v0.12.0/go-ipfs_v0.12.0_linux-amd64.tar.gz
tar xfv go-ipfs_v0.12.0_linux-amd64.tar.gz
cp go-ipfs/ipfs /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por lo general, no es una buena idea ejecutar un servicio público como root. Así que cree una nueva cuenta de usuario para ejecutar IPFS y cambie a ella:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adduser ipfs
su ipfs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iniciamos IPFS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ipfs init --profile=server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ya podrias iniciar ipfs demon pero configuraremos IPFS para que inicie con el servidor&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;volvemos a usuario root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit
o
sudo su
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Permite que el usuario ipfs ejecute servicios de ejecución prolongada habilitando la persistencia del usuario para ese usuario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;loginctl enable-linger ipfs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cree el archivo ipfs.service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir /etc/systemd/system/ipfs.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con este contenido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=IPFS daemon

[Service]
User=ipfs
Group=ipfs
ExecStart=/usr/local/bin/ipfs daemon --enable-gc
Restart=on-failure

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Habilite e inicie el servicio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl enable ipfs
systemctl start ipfs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ahora IPFS debería estar en funcionamiento y comenzara cuando se inicie el servidor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Volvemos al usuario Ipfs e iniciamos el nodo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;su ipfs
ipfs swarm peers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Seguido veremos algunos pares dentro de la red, perfecto todo a sido un exito&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Agregar los datos de tu sitio web a IPFS&lt;/strong&gt;&lt;br&gt;
Ahora que tiene IPFS ejecutándose en su servidor, agregue su sitio web:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ipfs add -r &amp;lt;path/react-app/build&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Esto agrega todo el contenido de la carpeta en  a IPFS, recursivamente. Deberías ver un resultado similar a este&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;added QmcrBxpSJ8if6Uy7yZbtyXXsPuUmvT5KKfZKQi39kVJ5aW &amp;lt;path&amp;gt;/images/fritz.png
added QmauwH6KDTGaTeAdQJbW9wZEGczjzSu9EceeasPUXo2qz9 &amp;lt;path&amp;gt;/index.html
added Qmd9JiiVRTyyY1Tn2CWDLrkqqKFaMiwaAvAASTE88yyXAC &amp;lt;path&amp;gt;/images
added QmaFrmEDFJXnYJb9hCrKDGs8XVvSUALzhv297W3uP97v2Y &amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Guarda el último multi-hash (aquí: QmaFrmED…, el tuyo será diferente). Su sitio web ahora está agregado a IPFS. Puede verlo en la puerta de enlace ipfs.io ahora: &lt;a href="https://ipfs.io/ipfs/QmaFrmED"&gt;https://ipfs.io/ipfs/QmaFrmED&lt;/a&gt;.... O en su local en localhost:8080. O en cualquier otra puerta de enlace.&lt;br&gt;
Una recomendacion es repetir este proceso al actualizar el sitio ya que si actuliza sobre el mismo hash IPFS puede causar enlaces rotos&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;3. Configuarar tus DNS Handshake HNS&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Inicialmente en este caso usaremos Namebase y nuestro servidor privado para crear nuestro regitros dns.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- NAMEBASE&lt;/strong&gt;&lt;br&gt;
Ingresamos al apartado de administracion de dominio de namebase:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LFSmALsI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jedud0551y4xv71vrkrf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LFSmALsI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jedud0551y4xv71vrkrf.png" alt="Image description" width="880" height="701"&gt;&lt;/a&gt;&lt;br&gt;
Crearemos un regitros A asia la ip de nuestro servidor ya que &lt;/p&gt;

&lt;p&gt;contamos con un nodo IPFS local:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TEweQ67y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nkfh2t2nv8vy07fveote.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TEweQ67y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nkfh2t2nv8vy07fveote.png" alt="Image description" width="880" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En caso de que quiera usar un getaway externo usa un registro CName apuntando al getaway deceado:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gUjTZWSR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2n2rkb1zy6txe8gp86fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gUjTZWSR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2n2rkb1zy6txe8gp86fo.png" alt="Image description" width="880" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si usas esta opcion tendras problemas para tener una coneccion segura SSL&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ya que nuestro dominio pricipal esta apuntando a nuestro getaway podemos crear nustro dlink en un rcord TXT:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dnslink=/ipfs/QmaFrmEDFJXnYJb9hCrKDGs8XVvSUALzhv297W3uP97v2Y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tienes que usar el hash de la carpeta IPFS que te pedimos guardar en uno de los pasos anteriores&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JW10SLyS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6g4ao2zs6ybt4x1jptof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JW10SLyS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6g4ao2zs6ybt4x1jptof.png" alt="Image description" width="880" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Listo ya tienes listos tus registros dns, esto tambien creara un ipns con el nombre de tu dominio en el caso de domonios icann esperamos pronto resuelva dominios HNS de igual manera&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;4. Configurar nuestro servidor&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En este caso usaramos el servidor NGINX esto para usarlo como proxy asia el getaway y nuestro dominio dentro de la red IPFS&lt;br&gt;
Recuerda que los puertos 80 y 443 de tu servidor deben estra abiertos para permitir el trafico web&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt-get update &amp;amp;&amp;amp; apt-get install nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Editamos o creamos el archivo conf de nuestro servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con el siguiente contenido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
    server_name tudominio;
    server_tokens off;

    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Esto enviará todas las solicitudes a tudominio a su puerta de enlace IPFS que se ejecuta en localhost:8080.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agregamos seguridad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
  location /ipns/ {
    return 404;
  }

  location /ipfs/ {
    return 404;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Agrega esto en la ultima linea, evitaria que usuarios externos hagan otras solicitudes a IPFS afectando el acho de banda de tu servidor&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Verificamos que todo este correcto y reiniciamos el servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nginx -t
systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Nota importante:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Agregar los nameserver de &lt;a href="https://www.hdns.io/"&gt;hdns.io&lt;/a&gt; a tu servidor para una correcta resolucion de los dominios handshake&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;103.196.38.38
103.196.38.39
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Configurar coneccion segura DANE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instala cerbot para generar los certificados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generemos los certificados DANE:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo certbot --nginx -d tudominiotld --server https://acme.htools.work/directory --reuse-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;En este caso no usaremos el api de letsencrypt, usaremos un api proporcionada por &lt;a href="https://blek.ga/"&gt;Rithvik Vibhu&lt;/a&gt; para generar certificados auntofirmados DANE&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Creamos Record TLSA:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En este caso para la validacion completa del certificado DANE tienes que crear otro registro en tu dns con el contenido de tu llave publica aqui te explico como generarlo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Primero iremos a la ruta donde se generaron nuestros certificados DANE:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /etc/letsencrypt/live/tudominio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora ejecutamos el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo -n "3 1 1 " &amp;amp;&amp;amp; openssl x509 -in fullchain.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | xxd  -p -u -c 32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;esto nos arrojara el contenido de nuestro registro&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3 1 1 03ED84FCD533CD930D46B1D219263BF3EC027F4E927143EE805A43C7422041A9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos un registro TLSA en ruestro dns:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IeRI6S4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l1go37liqq1pkgk2r90h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IeRI6S4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l1go37liqq1pkgk2r90h.png" alt="Image description" width="880" height="73"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_443._tcp.tudominio     3600    IN      TLSA    3 1 1 03ED84FCD533CD930D46B1D219263BF3EC027F4E927143EE805A43C7422041A9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hemos terminado y con un resultado exitoso&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ffVyx7VU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/484axbl2o33r9fjlkjjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ffVyx7VU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/484axbl2o33r9fjlkjjl.png" alt="Image description" width="656" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lo hemos logrado, les quiero recordar que los DNS en handshake se actualizan cada 6 horas asi que tienen que coordinar su tiempo de trabajo para no quedarte esperando ese tiempo&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dweb</category>
      <category>web3</category>
      <category>handshaked</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
