<?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>DEV Community: alvarogardev</title>
    <description>The latest articles on DEV Community by alvarogardev (@alvacode).</description>
    <link>https://dev.to/alvacode</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%2F551470%2F95f54f2f-b822-4c39-a29f-eaf237039f11.png</url>
      <title>DEV Community: alvarogardev</title>
      <link>https://dev.to/alvacode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alvacode"/>
    <language>en</language>
    <item>
      <title>[II - IOTA Development]: Configuración y puesta en marcha del nodo Hornet</title>
      <dc:creator>alvarogardev</dc:creator>
      <pubDate>Wed, 25 Jan 2023 23:01:42 +0000</pubDate>
      <link>https://dev.to/alvacode/ii-iota-development-configuracion-y-puesta-en-marcha-del-nodo-hornet-3o1k</link>
      <guid>https://dev.to/alvacode/ii-iota-development-configuracion-y-puesta-en-marcha-del-nodo-hornet-3o1k</guid>
      <description>&lt;p&gt;Después de ver en el &lt;a href="https://dev.to/alvarogardev/i-iota-development-preparar-el-entorno-c1"&gt;primer capítulo&lt;/a&gt; la instalación de todas las herramientas básicas que iremos necesitando durante nuestra aventura, vamos a empezar con la puesta en marcha de un nodo Hornet para tener nuestra red shimmer local.&lt;/p&gt;

&lt;p&gt;Hornet, es un software desarrollado por la Fundación IOTA, escrito en Go y es el nodo que implementa la funcionalidad completa de los últimos avances de la red, como es actualmente la actualización &lt;code&gt;Stardust&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Puesta en marcha del nodo Hornet local
&lt;/h2&gt;

&lt;p&gt;Lo primero vamos a crear un espacio de trabajo para todos los ficheros de configuración de nuestra red privada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ mkdir ~/iota-dev/private-network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dentro de ese directorio iremos creando todos los ficheros de configuración para poder tener nuestro nodo hornet operativo.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  ./config.json
&lt;/h4&gt;

&lt;p&gt;Ese fichero contiene toda la configuración para nuestro nodo hornet, dejo por aquí el enlace a la &lt;a href="https://wiki.iota.org/shimmer/hornet/references/configuration/" rel="noopener noreferrer"&gt;wiki de iota&lt;/a&gt; con todos los parámetros de configuración posibles, también podemos hacer un &lt;code&gt;hornet -h --full&lt;/code&gt; y obtenemos un listado de todos los parámetros posibles actualizados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"alias"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ALVAROGAR DEV"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"targetNetworkName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alvarogar-dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"milestonePublicKeyCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"baseToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TestCoin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tickerSymbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TEST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TEST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"subunit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"testies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"decimals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"useMetricPrefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"publicKeyRanges"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ed3c3f1a319ff4e909cf2771d79fece0ac9bd9fd2ee49ea6c0885c9cb3b1248c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"f6752f5f46a53364e2ee9c4d662d762a81efd51010282a75cd6bd03f28ef349c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"participation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"participationdb"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"privatedb"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"p2p"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"p2pstore"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"snapshots"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fullPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"snapshots/full_snapshot.bin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"deltaPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"snapshots/delta_snapshot.bin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"downloadURLs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"restAPI"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"publicRoutes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"/health"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"/api/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"protectedRoutes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  ./Dockerfile
&lt;/h4&gt;

&lt;p&gt;Este fichero es el que se encarga de crear la imagen con todos los plugins de hornet, se pueden modificar las versiones de las imágenes usadas para hornet y los plugins inx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/hornet:2.0.0-rc.4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;hornet&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-indexer:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;indexer&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-faucet:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;faucet&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-dashboard:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;dashboard&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-mqtt:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mqtt&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-spammer:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;spammer&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-coordinator:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;coordinator&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-poi:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;poi&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;iotaledger/inx-participation:1.0-rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;participation&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; debian:11&lt;/span&gt;

&lt;span class="c"&gt;# hornet-1 API&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 14265/tcp&lt;/span&gt;

&lt;span class="c"&gt;# hornet-1 dashboard&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8081/tcp&lt;/span&gt;

&lt;span class="c"&gt;# hornet-1 INX&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 9029/tcp&lt;/span&gt;

&lt;span class="c"&gt;# faucet&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8091/tcp&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Prepare supervisor&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; supervisor parallel
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /var/log/supervisor
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; supervisord.conf /etc/supervisor/conf.d/supervisord.conf&lt;/span&gt;


&lt;span class="c"&gt;# Copy the inx apps dir into HORNET image&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=hornet /app /app/hornet-1&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=hornet /app /app/hornet-2&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=indexer /app /app/indexer&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=faucet /app /app/faucet&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=dashboard /app /app/dashboard&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=mqtt /app /app/mqtt&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=spammer /app /app/spammer&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=coordinator /app /app/coordinator&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=poi /app /app/poi&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=participation /app /app/participation&lt;/span&gt;

&lt;span class="c"&gt;# Overwrite default config&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; config.json /app/hornet-1/config.json&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; config.json /app/hornet-2/config.json&lt;/span&gt;

&lt;span class="c"&gt;# Create snapshots&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; protocol_parameters.json /app/protocol_parameters.json&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app/hornet-1/snapshots

&lt;span class="k"&gt;RUN &lt;/span&gt;/app/hornet-1/hornet tool snap-gen &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--protocolParametersPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/protocol_parameters.json &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--mintAddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tst1qq2kvnu9pqzptkggrpqrvltvagccsh6aj2fkdhla7p3lrsy9dwhdzu5l2ye &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--outputPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/hornet-1/snapshots/full_snapshot.bin

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; /app/hornet-1/snapshots /app/hornet-2/

&lt;span class="c"&gt;# Bootstrap network&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app/coordinator/state
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nv"&gt;COO_PRV_KEYS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;651941eddb3e68cb1f6ef4ef5b04625dcf5c70de1fdc4b1c9eadb2c219c074e0ed3c3f1a319ff4e909cf2771d79fece0ac9bd9fd2ee49ea6c0885c9cb3b1248c,0e324c6ff069f31890d496e9004636fd73d8e8b5bea08ec58a4178ca85462325f6752f5f46a53364e2ee9c4d662d762a81efd51010282a75cd6bd03f28ef349c /app/hornet-1/hornet tool bootstrap-private-tangle &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--configFile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/hornet-1/config.json &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--snapshotPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/hornet-1/snapshots/full_snapshot.bin &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--databasePath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/hornet-1/privatedb &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--cooStatePath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/app/coordinator/state/coordinator.state


&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["/usr/bin/supervisord"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  ./protocol_parameters.json
&lt;/h4&gt;

&lt;p&gt;Este fichero lo vamos a usar para generar un snapshot para la red privada mediante &lt;code&gt;hornet tool snap-gen&lt;/code&gt;. Si se ejecuta un nodo Hornet por primera vez, se necesita iniciarlo con una instantánea completa. Hornet la descarga automáticamente de fuentes de confianza. Para este caso vamos a generarla con la herramienta &lt;code&gt;snap-gen&lt;/code&gt;. &lt;a href="https://wiki.iota.org/hornet/how_tos/managing_a_node/#how-to-work-with-snapshots" rel="noopener noreferrer"&gt;más info&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"networkName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alvarogar-dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bech32HRP"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tst"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"minPoWScore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"belowMaxDepth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"rentStructure"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vByteCost"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vByteFactorData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"vByteFactorKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tokenSupply"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2779530283277761"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h5&gt;
  
  
  ./supervisord.conf
&lt;/h5&gt;

&lt;p&gt;Este es el fichero de configuración para &lt;code&gt;supervisor&lt;/code&gt;, es un gestor de procesos que facilita el manejo de procesos en ejecución por largo tiempo, en este caso lo usamos para gestionar los logs e inicializar hornet y todos sus plugins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;unix_http_server&lt;/span&gt;]
&lt;span class="n"&gt;file&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;.&lt;span class="n"&gt;sock&lt;/span&gt;

[&lt;span class="n"&gt;supervisord&lt;/span&gt;]
&lt;span class="n"&gt;logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;supervisord&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;logfile_maxbytes&lt;/span&gt;=&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="n"&gt;MB&lt;/span&gt;
&lt;span class="n"&gt;logfile_backups&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;loglevel&lt;/span&gt;=&lt;span class="n"&gt;error&lt;/span&gt;
&lt;span class="n"&gt;pidfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;supervisord&lt;/span&gt;.&lt;span class="n"&gt;pid&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt;=&lt;span class="n"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;nodaemon&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;minfds&lt;/span&gt;=&lt;span class="m"&gt;8192&lt;/span&gt;
&lt;span class="n"&gt;childlogdir&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/

[&lt;span class="n"&gt;rpcinterface&lt;/span&gt;:&lt;span class="n"&gt;supervisor&lt;/span&gt;]
&lt;span class="n"&gt;supervisor&lt;/span&gt;.&lt;span class="n"&gt;rpcinterface_factory&lt;/span&gt; = &lt;span class="n"&gt;supervisor&lt;/span&gt;.&lt;span class="n"&gt;rpcinterface&lt;/span&gt;:&lt;span class="n"&gt;make_main_rpcinterface&lt;/span&gt;

[&lt;span class="n"&gt;supervisorctl&lt;/span&gt;]
&lt;span class="n"&gt;serverurl&lt;/span&gt;=&lt;span class="n"&gt;unix&lt;/span&gt;:///&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;run&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;.&lt;span class="n"&gt;sock&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt; -&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;.&lt;span class="n"&gt;json&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;bindMultiAddresses&lt;/span&gt;=/&lt;span class="n"&gt;ip4&lt;/span&gt;/&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;/&lt;span class="m"&gt;15600&lt;/span&gt; --&lt;span class="n"&gt;restAPI&lt;/span&gt;.&lt;span class="n"&gt;bindAddress&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;:&lt;span class="m"&gt;14265&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;identityPrivateKey&lt;/span&gt;=&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f46fad4f538a031d4f87f490f6bca4319dfd0307636a5759a22b5e8874bd608f9156ba976a12918c16a481c38c88a7b5351b769adc30390e93b6c0a63b09b79&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;peers&lt;/span&gt;=/&lt;span class="n"&gt;ip4&lt;/span&gt;/&lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;/&lt;span class="m"&gt;15601&lt;/span&gt;/&lt;span class="n"&gt;p2p&lt;/span&gt;/&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="n"&gt;D3KooWCKwcTWevoRKa2kEBputeGASvEBuDfRDSbe8t1DWugUmL&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;peerAliases&lt;/span&gt;=&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt; --&lt;span class="n"&gt;inx&lt;/span&gt;.&lt;span class="n"&gt;enabled&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt; --&lt;span class="n"&gt;inx&lt;/span&gt;.&lt;span class="n"&gt;bindAddress&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;:&lt;span class="m"&gt;9029&lt;/span&gt; 
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;1&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt; -&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;.&lt;span class="n"&gt;json&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;bindMultiAddresses&lt;/span&gt;=/&lt;span class="n"&gt;ip4&lt;/span&gt;/&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;/&lt;span class="m"&gt;15601&lt;/span&gt; --&lt;span class="n"&gt;restAPI&lt;/span&gt;.&lt;span class="n"&gt;bindAddress&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;:&lt;span class="m"&gt;14266&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;identityPrivateKey&lt;/span&gt;=&lt;span class="n"&gt;a06b288ce7fc3b6f1e716f6f7d72050b53417aae4b305a68883550a3bb28597f254b082515a79391a7f13009b4133851a0c4d48e0e948809c3b46ff3e2500b4f&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;peers&lt;/span&gt;=/&lt;span class="n"&gt;ip4&lt;/span&gt;/&lt;span class="m"&gt;127&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt;/&lt;span class="n"&gt;tcp&lt;/span&gt;/&lt;span class="m"&gt;15600&lt;/span&gt;/&lt;span class="n"&gt;p2p&lt;/span&gt;/&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="n"&gt;D3KooWSagdVaCrS14GeJhM8CbQr41AW2PiYMgptTyAybCbQuEY&lt;/span&gt; --&lt;span class="n"&gt;p2p&lt;/span&gt;.&lt;span class="n"&gt;peerAliases&lt;/span&gt;=&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;2&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;coordinator&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;coordinator&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;coordinator&lt;/span&gt; --&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;stateFilePath&lt;/span&gt;=&lt;span class="n"&gt;state&lt;/span&gt;/&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;state&lt;/span&gt; --&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;interval&lt;/span&gt;=&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; --&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;blockBackups&lt;/span&gt;.&lt;span class="n"&gt;enabled&lt;/span&gt;=&lt;span class="n"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;environment&lt;/span&gt;=&lt;span class="n"&gt;COO_PRV_KEYS&lt;/span&gt;=&lt;span class="s2"&gt;"651941eddb3e68cb1f6ef4ef5b04625dcf5c70de1fdc4b1c9eadb2c219c074e0ed3c3f1a319ff4e909cf2771d79fece0ac9bd9fd2ee49ea6c0885c9cb3b1248c,0e324c6ff069f31890d496e9004636fd73d8e8b5bea08ec58a4178ca85462325f6752f5f46a53364e2ee9c4d662d762a81efd51010282a75cd6bd03f28ef349c"&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;coordinator&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;3&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;spammer&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;spammer&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;spammer&lt;/span&gt;  --&lt;span class="n"&gt;spammer&lt;/span&gt;.&lt;span class="n"&gt;autostart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt; --&lt;span class="n"&gt;spammer&lt;/span&gt;.&lt;span class="n"&gt;bpsRateLimit&lt;/span&gt;=&lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;spammer&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;spammer&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;4&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;dashboard&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;dashboard&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;dashboard&lt;/span&gt; --&lt;span class="n"&gt;dashboard&lt;/span&gt;.&lt;span class="n"&gt;bindAddress&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;:&lt;span class="m"&gt;8081&lt;/span&gt; --&lt;span class="n"&gt;dashboard&lt;/span&gt;.&lt;span class="n"&gt;auth&lt;/span&gt;.&lt;span class="n"&gt;passwordHash&lt;/span&gt;=&lt;span class="m"&gt;577&lt;/span&gt;&lt;span class="n"&gt;eb97f8faf2af47ff957b00827d6bfe9d05b810981e3073dc42553505282c1&lt;/span&gt; --&lt;span class="n"&gt;dashboard&lt;/span&gt;.&lt;span class="n"&gt;auth&lt;/span&gt;.&lt;span class="n"&gt;passwordSalt&lt;/span&gt;=&lt;span class="n"&gt;e5d8d0bd3bb9723236177b4713a11580c55b69a51e7055dd11fa1dad3b8f6d6c&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;dashboard&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;dashboard&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;5&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;faucet&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;faucet&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;faucet&lt;/span&gt; --&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;bindAddress&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;:&lt;span class="m"&gt;8091&lt;/span&gt; --&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;amount&lt;/span&gt;=&lt;span class="m"&gt;100000000000&lt;/span&gt; --&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;smallAmount&lt;/span&gt;=&lt;span class="m"&gt;10000000000&lt;/span&gt; --&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;maxAddressBalance&lt;/span&gt;=&lt;span class="m"&gt;200000000000&lt;/span&gt; --&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;rateLimit&lt;/span&gt;.&lt;span class="n"&gt;enabled&lt;/span&gt;=&lt;span class="n"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;environment&lt;/span&gt;=&lt;span class="n"&gt;FAUCET_PRV_KEY&lt;/span&gt;=&lt;span class="s2"&gt;"887844b1e6bf9ca9e0b57584656add4370dbb49a8cb79e2e3032229f30fd80359e3df559ad0de8e5fa019b9ea46d1ee40879f3f3f74594a3306de9dfd43dcd25"&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;faucet&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;6&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;indexer&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;indexer&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;indexer&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;indexer&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;indexer&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;7&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;mqtt&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;mqtt&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;mqtt&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;mqtt&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;mqtt&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;8&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;poi&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;poi&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;poi&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;poi&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;poi&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;9&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;participation&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=/&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;participation&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;participation&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt; = /&lt;span class="n"&gt;app&lt;/span&gt;/&lt;span class="n"&gt;participation&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;participation&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;priority&lt;/span&gt;=&lt;span class="m"&gt;11&lt;/span&gt;


&lt;span class="c"&gt;# This a workaround to label all the logs to be able to have
# a single log-stream in docker and know from which service it came
&lt;/span&gt;
[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="n"&gt;logging&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=&lt;span class="n"&gt;parallel&lt;/span&gt; --&lt;span class="n"&gt;tagstring&lt;/span&gt; &lt;span class="s2"&gt;"{/.}:"&lt;/span&gt; --&lt;span class="n"&gt;line&lt;/span&gt;-&lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="n"&gt;tail&lt;/span&gt; -&lt;span class="n"&gt;f&lt;/span&gt; {} ::: &lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;hornet&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;coordinator&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt;=&lt;span class="n"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;autostart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;dev&lt;/span&gt;/&lt;span class="n"&gt;fd&lt;/span&gt;/&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile_maxbytes&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;

[&lt;span class="n"&gt;program&lt;/span&gt;:&lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;logging&lt;/span&gt;]
&lt;span class="n"&gt;command&lt;/span&gt;=&lt;span class="n"&gt;parallel&lt;/span&gt; --&lt;span class="n"&gt;tagstring&lt;/span&gt; &lt;span class="s2"&gt;"{/.}:"&lt;/span&gt; --&lt;span class="n"&gt;line&lt;/span&gt;-&lt;span class="n"&gt;buffer&lt;/span&gt; &lt;span class="n"&gt;tail&lt;/span&gt; -&lt;span class="n"&gt;f&lt;/span&gt; {} ::: &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;indexer&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;spammer&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;faucet&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;mqtt&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;poi&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="n"&gt;inx&lt;/span&gt;-&lt;span class="n"&gt;participation&lt;/span&gt;.&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="n"&gt;user&lt;/span&gt;=&lt;span class="n"&gt;root&lt;/span&gt;
&lt;span class="n"&gt;directory&lt;/span&gt;=/&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;log&lt;/span&gt;/&lt;span class="n"&gt;supervisor&lt;/span&gt;/
&lt;span class="n"&gt;startsecs&lt;/span&gt;=&lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;autostart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;autorestart&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile&lt;/span&gt;=/&lt;span class="n"&gt;dev&lt;/span&gt;/&lt;span class="n"&gt;fd&lt;/span&gt;/&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;stdout_logfile_maxbytes&lt;/span&gt;=&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;redirect_stderr&lt;/span&gt;=&lt;span class="n"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h5&gt;
  
  
  ./docker-compose.yml
&lt;/h5&gt;

&lt;p&gt;Este es el fichero que &lt;code&gt;docker compose&lt;/code&gt; va a utilizar para levantar nuestros servicios dockerizados, concretamente nuestra imagen de hornet creada a partir del &lt;code&gt;Dockerfile&lt;/code&gt; anterior. También exponemos una serie de puertos para poder conectarnos desde fuera del container, concretamente son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API 14265/tcp&lt;/li&gt;
&lt;li&gt;Dashboard 8081/tcp&lt;/li&gt;
&lt;li&gt;INX 9029/tcp&lt;/li&gt;
&lt;li&gt;Faucet 8091/tcp
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.9"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hornet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hornet&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;dockerfile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Dockerfile&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hornet:dev&lt;/span&gt;
    &lt;span class="na"&gt;stop_grace_period&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;14265:14265/tcp"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8081:8081/tcp"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8091:8091/tcp"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9029:9029/tcp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Incializando nuestro nodo hornet
&lt;/h4&gt;

&lt;p&gt;Una vez hemos creado todos esos ficheros dentro de nuestra carpeta &lt;code&gt;/private-network&lt;/code&gt; y teniendo &lt;code&gt;docker y docker compose&lt;/code&gt; instalado ejecutamos dentro de ese directorio lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~&lt;span class="nv"&gt;$ &lt;/span&gt;docker compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;este comando lo que va a hacer es construir la imagen de nuestro hornet y va a levantar un contenedor con esa imagen y toda la configuración que le hemos dicho mediante el fichero &lt;code&gt;Dockerfile&lt;/code&gt;, podemos comprobar que todo funciona correctamente accediendo al dashboard en &lt;code&gt;http://localhost:8081&lt;/code&gt; o a la faucet en &lt;code&gt;http://localhost:8091&lt;/code&gt; o podemos conectar nuestra firefly a través del Hornet API en el host &lt;code&gt;http://localhost:14265&lt;/code&gt;.&lt;br&gt;
Si hacemos cualquier cambio en cualquiera de los ficheros deberemos parar el contenedor y ejecutar &lt;code&gt;docker compose build&lt;/code&gt; para volver a crear la imagen con los nuevos cambios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flahct6nlapglww63c9gy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flahct6nlapglww63c9gy.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnug7dfgpz5lke9i3tng2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnug7dfgpz5lke9i3tng2.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que os haya gustado y sobre todo que os haya servido, para el próximo capítulo veremos como crear un cluster de 2 nodos wasp formando un committee y dentro de poco smart contracts!!.&lt;/p&gt;

&lt;p&gt;Dejad vuestros comentarios y aprendamos juntos. Gracias!&lt;/p&gt;

</description>
      <category>iota</category>
      <category>hornet</category>
      <category>dlt</category>
      <category>shimmer</category>
    </item>
    <item>
      <title>[I - IOTA Development]: Preparar el entorno</title>
      <dc:creator>alvarogardev</dc:creator>
      <pubDate>Wed, 25 Jan 2023 15:39:39 +0000</pubDate>
      <link>https://dev.to/alvacode/i-iota-development-preparar-el-entorno-c1</link>
      <guid>https://dev.to/alvacode/i-iota-development-preparar-el-entorno-c1</guid>
      <description>&lt;p&gt;Quiero empezar una serie de tutoriales en los que vamos a aprender a como desarrollar bajo la tecnología DLT de &lt;a href="https://www.iota.org/" rel="noopener noreferrer"&gt;IOTA&lt;/a&gt;. Mi intención es hacer también videos para ayudar a que se entienda mejor y poder explicar otros aspectos importantes de IOTA no tan enfocados al desarrollo pero si a la parte técnica.&lt;/p&gt;

&lt;p&gt;En este primer artículo vamos a ver como instalar todas las herramientas necesarias para poder tener un entorno de desarrollo completo y actualizado.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  I - Virtualizar Ubuntu 22.04.1
&lt;/h2&gt;

&lt;p&gt;Vamos a virtualizar dentro de Hyper-V un &lt;a href="https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-desktop-amd64.iso" rel="noopener noreferrer"&gt;ubuntu 22.04.1&lt;/a&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No voy a explicar como virtualizar un SO ya que considero que como mínimo debemos de tener un SO dónde levantar nuestro entorno.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  II - Instalación de las herramientas básicas
&lt;/h2&gt;

&lt;p&gt;Lo primero que haremos será actualizar el sistema operativo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ sudo apt update
~$ sudo apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instalamos &lt;code&gt;git&lt;/code&gt; y &lt;code&gt;vim&lt;/code&gt; que nos hará falta más adelante y las &lt;code&gt;build essential&lt;/code&gt; para disponer de &lt;code&gt;gcc&lt;/code&gt; y &lt;code&gt;make&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ sudo apt install vim git build-essential curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Go Lang 1.19&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Necesitamos go para luego poder compilar el binario de &lt;code&gt;wasp&lt;/code&gt; (nodo para los Smart Contract) y una serie de herramientas que vienen en la suite.&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://go.dev/dl/go1.19.5.linux-amd64.tar.gz 
~$ sudo tar xzvf go1.19.5.linux-amd64.tar.gz -C /usr/local/
~$ export PATH=$PATH:/usr/local/go/bin
~$ source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;si escribimos &lt;code&gt;go version&lt;/code&gt; debemos de obtener lo siguiente&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkz6za8s4y1s4uujehha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkz6za8s4y1s4uujehha.png" alt=" " width="321" height="40"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer"&gt;Node Version Manager (NVM)&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Mediante esta herramienta vamos a poder gestionar varias versiones de nodeJs, es tan sencillo como ejecutar 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;~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez tengamos instalado &lt;code&gt;nvm&lt;/code&gt; debemos actualizar el bash con el siguiente comando &lt;code&gt;~$ source ~/.bashrc&lt;/code&gt; a partir de ese momento ya podemos hacer uso de la herramienta, lo primero que vamos a hacer es instalar la versión 16.19.0 (Gallium) con 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;~$ nvm install --lts=Gallium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://www.rust-lang.org/es" rel="noopener noreferrer"&gt;Rust Lang&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;La mayoría de las librerías de IOTA están escritas en rust, es un leguaje que los desarrolladores de la Fundación IOTA usan mucho debido a que hace muy buen uso de la memoria y da mucha seguridad a las aplicaciones, veremos más adelante su uso. Por el momento es suficiente con tenerlo instalado con los siguientes comandos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ curl https://sh.rustup.rs -sSf | sh
~$ source "$HOME/.cargo/env"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://docs.soliditylang.org/en/v0.8.17/installing-solidity.html#linux-packages" rel="noopener noreferrer"&gt;Solc Compiler&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Cuando vayamos a compilar los binarios de wasp es necesario tener instalado el compilador de solidity&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ sudo add-apt-repository ppa:ethereum/ethereum
~$ sudo apt update
~$ sudo apt install solc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Gracias a docker vamos a poder levantar de forma aislada y sencilla nuestro nodo Hornet y todos sus plugins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
~$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
~$ sudo apt update
~$ apt-cache policy docker-ce
~$ sudo apt install docker-ce
~$ sudo systemctl status docker
~$ sudo usermod -aG docker ${USER}
~$ su - ${USER}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalación de &lt;a href="https://github.com/docker/compose" rel="noopener noreferrer"&gt;Docker Compose&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Primero accedemos a las &lt;a href="https://github.com/docker/compose/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt; para ver que versión queremos instalar, en este caso la &lt;code&gt;2.15.1&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ mkdir -p ~/.docker/cli-plugins/
~$ curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
~$ chmod +x ~/.docker/cli-plugins/docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Instalamos:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://firefly.iota.org/#DownloadsSection" rel="noopener noreferrer"&gt;Firefly Desktop (shimmer)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.google.com/intl/es_es/chrome/" rel="noopener noreferrer"&gt;Google Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metamask.io/download/" rel="noopener noreferrer"&gt;Metamask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/Download" rel="noopener noreferrer"&gt;VsCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Una vez tengamos instaladas todas estas herramientas lo siguiente será configurar y levantar un nodo &lt;a href="https://github.com/iotaledger/hornet" rel="noopener noreferrer"&gt;Hornet&lt;/a&gt;, lo veremos en el siguiente capítulo.&lt;/p&gt;

&lt;p&gt;Gracias y no olvidéis dejar vuestros comentarios!!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>awschallenge</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
