Configurar un Nodo de Catapult usando Terraform

El programa de recompensas de cosecha en catapulta es tan atractivo que es posible que desee aprender cómo configurar el nodo para la cosecha antes de que la red principal esté activa.

Me gustaría compartir con ustedes cómo puede escribir una infraestructura como código para implementar su servidor de catapulta en su terminal.

Introducción

Terraform es una herramienta muy poderosa para desarrolladores, puede escribir un plan (infraestructura como código) y administrar su servicio en la nube.

Como se mencionó en el servicio en la nube, hay una lista del proveedor de la nube compatible con Terraform, en este caso, usando Digital Ocean (DO). En caso de que no sea usuario de DO, el registro utiliza mi enlace en el que obtendrá $ 100 en crédito durante 60 días.

Hight-level-diagram
  1. Escriba un plan para configurar la infraestructura y parte del script que desea ejecutar después de que se complete el suministro del servidor.
  2. Terraform seguirá el “plan” para ejecutar, comenzando a aprovisionar un servidor.
  3. Una vez completada la provisión, comenzará a ejecutar todo el script.
  4. El script comenzará a extraer el código del servidor de catapulta de GitHub, además de instalar herramientas esenciales como Docker.

Objetivos

  • Servidor de aprovisionamiento de Digital Ocean.
  • Instalar herramientas esenciales como docker.
  • Descargar el código del servidor catapult de Github.
  • Implementar el nodo de catapulta y únase a Testnet.
  • Implementar todo en la terminal.

Prerequisitos

  • Instale Terraform en su máquina local
  • Registrar cuenta de DO

Manos a la Obra

  1. Configuración de la cuenta DO (puede omitir, si ya lo tiene) Agregue la clave ssh en su cuenta DO, es fácil para el acceso ssh del terminal a Droplet más tarde.

1.1 De permiso para generar clave ssh sin frase de contraseña en su máquina local.

ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/catapult_node

1.2 copie catapult_node.pub a la cuenta DO. Tutorial

1.3 crear token de acceso para uso posterior de terraformas. Tutorial

2. Terraform

Si eres nuevo en Terraform, puedes comenzar desde aquí.

Vamos a escribir el plan de infraestructura, creé 4 archivos diferentes, que es firewall.tf, main.tf, variables.tf, output.tf

En firewall.tf, necesitamos definir pocos puertos de entrada para el uso de catapult.

resource "digitalocean_firewall" "catapult-node" {
    name = "ssh-and-catapult-port"
    droplet_ids = ["${digitalocean_droplet.catapult-node.id}"]

    inbound_rule {
        protocol         = "tcp"
        port_range       = "22" // ssh access 
        source_addresses = ["0.0.0.0/0", "::/0"]
    }

    inbound_rule {
        protocol         = "tcp"
        port_range       = "3000" // Catapult Api endpoint
        source_addresses = ["0.0.0.0/0", "::/0"]
    }

    inbound_rule {
        protocol         = "tcp"
        port_range       = "7900-7902" // Catapult peer communication
        source_addresses = ["0.0.0.0/0", "::/0"]
    }
}

En variables.tf, defina las variables que deben usarse en la provisión del servidor. aquí necesitamos el token de acceso DO y private_key para el inicio de sesión ssh. así que ya no necesitamos contraseña.

variable "do_token" {
    default = "your_DO_Access_Token" // refer 1.3
}

variable "private_key" {
    default = "~/.ssh/catapult_node" // refer 1.1
}

En output.tf, imprima el retorno de salida de Terraform. Después de la provisión exitosa de Terraform, imprimirá la dirección IP del servidor en la terminal.

output "fip_output" {
    description = "Droplet ipv4 address"
    value = "${digitalocean_droplet.catapult-node.*.ipv4_address}"
}

Por último main.tf, esta es una parte importante porque todas las especificaciones del servidor y la ejecución del script estarán aquí.

// We are pointing "digitalocean" as our provider.
provider "digitalocean" {
  token = "${var.do_token}"
}

// request ssh public key from DO account refer 1.2
data "digitalocean_ssh_key" "mykey" {
  name = "catapult_node"
}

// define droplet spec
// https://developers.digitalocean.com/documentation/v2/#list-all-sizes
// define server spec base on your need.
resource "digitalocean_droplet" "catapult-node" {
    image = "ubuntu-18-04-x64"
    name = "catapult-node-1"
    region = "sgp1"
    size = "s-1vcpu-2gb" // server spec
    ssh_keys = ["${data.digitalocean_ssh_key.mykey.id}"] // attach public key from my DO account

// script to install docker tools and git pull catapult-server-code
    provisioner "remote-exec" {

      inline = [
        "export PATH=$PATH:/usr/bin",
        "curl -fsSL https://get.docker.com -o get-docker.sh",
        "sudo sh get-docker.sh",
        "curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` | sudo tee /usr/local/bin/docker-compose > /dev/null",
        "sudo chmod +x /usr/local/bin/docker-compose",
        "sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose",
        "git config --global --unset http.proxy",
        "git config --global --unset https.proxy",
        "git clone https://github.com/nemfoundation/catapult-testnet-bootstrap.git",
        "cd catapult-testnet-bootstrap/api-harvest-assembly",
        "sudo docker-compose up --build --detach"
      ]

// for SSH connection to execute script
      connection {
        type     = "ssh"
        private_key = "${file(var.private_key)}"
        user     = "root"
        timeout  = "2m"
        host = "${self.ipv4_address}"
      }
  }
}

intente también con

git clone https://github.com/AnthonyLaw/catapult-terraform

cd catapult-terraform

terraform init – para iniciar un proyecto con terraform.

terraform apply – para crear un droplet en su cuenta DO

// output message
...
...
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_db_1 ...
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_api-broker_1 ...
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_store-addresses_1        ... done
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_api-broker_1             ... done
digitalocean_droplet.catapult-node (remote-exec): 
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_update_vars_1            ... done
digitalocean_droplet.catapult-node (remote-exec): 
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_init-db_1                ... done
digitalocean_droplet.catapult-node (remote-exec): Creating api-harvest-assembly_rest-gateway_1           ... done
digitalocean_droplet.catapult-node (remote-exec): 
digitalocean_droplet.catapult-node: Still creating... [3m40s elapsed]
digitalocean_droplet.catapult-node: Creation complete after 3m45s [id=171927070]
digitalocean_firewall.catapult-node: Creating...
digitalocean_firewall.catapult-node: Creation complete after 9s [id=98a6e7ed-c54a-4c0c-91b0-f0848fabfa68]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Outputs:

fip_output = [
  "104.248.153.68",
]

Una vez que finalice la solicitud, puede visitar : 3000 / chain / height para asegurarse de que su servidor de catapulta tenga una configuración exitosa.

Terraform Destruir – para destruir la gota en su cuenta DO

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

digitalocean_firewall.catapult-node: Destroying... [id=98a6e7ed-c54a-4c0c-91b0-f0848fabfa68]
digitalocean_firewall.catapult-node: Destruction complete after 10s
digitalocean_droplet.catapult-node: Destroying... [id=171927070]
digitalocean_droplet.catapult-node: Still destroying... [id=171927070, 10s elapsed]
digitalocean_droplet.catapult-node: Still destroying... [id=171927070, 20s elapsed]
digitalocean_droplet.catapult-node: Destruction complete after 22s

Destroy complete! Resources: 2 destroyed.

Resumen

Una vez que su nodo de catapulta esté en funcionamiento, puede cambiar fácilmente su harvesterPrivateKey y beneficiaryPublicKey en su nodo.

Con Terraform, puede escribir fácilmente el plan de infraestructura para configurar cualquier servidor y unirse a la red de catapult.

Lea más sobre:

Código fuente
Terraform para principiantes
Terraform.io
Ejecutando Catapult Testnet

Fuente: Dev.to Anthony Law