Consultando la blockchain

Para arrancar una instancia de cardano-db-sync vamos a utilizar Docker como gestor y despliegue de esta instancia. Antes de continuar asegúrese de tener instalado Docker.

Primero desinstalamos posibles versiones viejas de Docker:

sudo apt-get remove docker docker-engine docker.io containerd runc

Actualizamos el repositorio de paquetes:

sudo apt-get update

Instalamos los paquetes necesarios para los repositorios sobre https:

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Agrega la clave oficial GPG de Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Verificamos la clave:

sudo apt-key fingerprint 0EBFCD88

Configuramos el repositorio estable de Docker.

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Finalmente actualizamos el repo(para obtener la versión mas reciente) e instalamos.

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose

Instalar cardano-db-sync

Source. Descargamos el código fuente del proyecto cardano-db-sync

git clone https://github.com/input-output-hk/cardano-db-sync.git
cd cardano-db-sync

Vamos a chequear la configuración con la que se va a establecer el nuevo entorno:

docker-compose config

Mi configuración es la siguiente:

version: "3.5"

services:
  postgres:
    image: postgres:11.5-alpine
    shm_size: 1g
    environment:
      - POSTGRES_LOGGING=true
      - POSTGRES_DB_FILE=/run/secrets/postgres_db
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
      - POSTGRES_USER_FILE=/run/secrets/postgres_user
    secrets:
      - postgres_password
      - postgres_user
      - postgres_db
    volumes:
      - postgres:/var/lib/postgresql/data
    ports:
      - 5432:5432
    restart: on-failure
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

  cardano-node:
    image: inputoutput/cardano-node:1.19.0
    environment:
      - NETWORK=${NETWORK:-mainnet}
    volumes:
      - node-db:/data/db
      - node-ipc:/ipc
    restart: on-failure
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

  cardano-db-sync:
    image: inputoutput/cardano-db-sync:4.0.0
    environment:
      - NETWORK=${NETWORK:-mainnet}
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
    depends_on:
      - cardano-node
      - postgres
    secrets:
      - postgres_password
      - postgres_user
      - postgres_db
    volumes:
      - node-ipc:/node-ipc
    restart: on-failure
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

secrets:
  postgres_db:
    file: ./config/secrets/postgres_db
  postgres_password:
    file: ./config/secrets/postgres_password
  postgres_user:
    file: ./config/secrets/postgres_user

volumes:
  postgres:
  node-db:
  node-ipc:

Si nos fijamos en la configuración vemos que Docker va a utilizar la credenciales postgres_db, postregres_password y postgres_user. Las va a ir a buscar a la carpeta /home/cardano/cardano-db-sync/config/secrets/. El repositorio por defecto trae estos archivos bajo el sufijo *_example, solo tenemos que reemplazar o duplicar los ejemplos.

cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_db_example \
    ~/home/cardano/cardano-db-sync/config/secrets/postgres_db
cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_password_example \
    ~/home/cardano/cardano-db-sync/config/secrets/postgres_password

Recuerda cambiar la contraseña.

cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_user_example \
    ~/home/cardano/cardano-db-sync/config/secrets/postgres_user

Antes de correr Docker necesitamos añadir nuestro usuario al grupo docker:

sudo usermod -aG docker $USER

Ahorra arrancamos la instancia con los mensajes de log activados:

docker-compose up -d && docker-compose logs -f

Con esto hemos arrancado los servicios cardano-node, la base de datos postgresql, y la herramienta cardano-db-sync. Podemos acceder a estos servicios a través del puerto por defecto: 5432.

Una ejecución más óptima

Vamos a utilizar tmux para ejecutar docker en segundo plano y mostrar el estado de la máquina en vivo.

Creamos el script que levanta el servicio en segundo plano:

cd /home/cardano/cardano-db-sync
vim start.sh
#!/bin/bash
session="cardano-db-sync"
# Check if the session exists, discarding output
# We can check $? for the exit status (zero for success, non-zero for failure)
tmux has-session -t $session 2>/dev/null
if [ $? != 0 ]; then
 tmux attach-session -t $session
 tmux new -s "cardano-db-sync" -n "node" -d
 tmux split-window -v
 tmux select-pane -t 'cardano-db-sync:node.0'
 tmux split-window -h
 tmux send-keys -t 'cardano-db-sync:node.0' './init-cardano-db.sh' Enter
 tmux send-keys -t 'cardano-db-sync:node.1' 'htop' Enter
 tmux send-keys -t 'cardano-db-sync.2' 'nload' Enter
fi

tmux attach-session -t $session

Agregamos permisos de ejecución a los scripts:

chmod +x start.sh stop.sh init-cardano-db.sh

Finalmente arrancamos el servicio:

./start.sh

Una vez iniciado podemos lanzar consultas a la dirección localhost:5432.

Listamos todos los containers:

docker container ls -a

Eliminar un container concreto por su ID:

docker container rm 661525b875a1

Terminar todas las instancias:

docker-compose down -v

Relanzamos las instancias:

docker-compose up --remove-orphans --force-recreate

Última actualización

¿Te fue útil?