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:
1
sudo apt-get remove docker docker-engine docker.io containerd runc
Copied!
Actualizamos el repositorio de paquetes:
1
sudo apt-get update
Copied!
Instalamos los paquetes necesarios para los repositorios sobre https:
1
sudo apt-get install \
2
apt-transport-https \
3
ca-certificates \
4
curl \
5
gnupg-agent \
6
software-properties-common
Copied!
Agrega la clave oficial GPG de Docker:
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Copied!
Verificamos la clave:
1
sudo apt-key fingerprint 0EBFCD88
Copied!
Configuramos el repositorio estable de Docker.
1
sudo add-apt-repository \
2
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
3
$(lsb_release -cs) \
4
stable"
Copied!
Finalmente actualizamos el repo(para obtener la versión mas reciente) e instalamos.
1
sudo apt-get update
2
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
Copied!

Instalar cardano-db-sync

Source. Descargamos el código fuente del proyecto cardano-db-sync
1
git clone https://github.com/input-output-hk/cardano-db-sync.git
2
cd cardano-db-sync
Copied!
Vamos a chequear la configuración con la que se va a establecer el nuevo entorno:
1
docker-compose config
Copied!
Mi configuración es la siguiente:
1
version: "3.5"
2
3
services:
4
postgres:
5
image: postgres:11.5-alpine
6
shm_size: 1g
7
environment:
8
- POSTGRES_LOGGING=true
9
- POSTGRES_DB_FILE=/run/secrets/postgres_db
10
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
11
- POSTGRES_USER_FILE=/run/secrets/postgres_user
12
secrets:
13
- postgres_password
14
- postgres_user
15
- postgres_db
16
volumes:
17
- postgres:/var/lib/postgresql/data
18
ports:
19
- 5432:5432
20
restart: on-failure
21
logging:
22
driver: "json-file"
23
options:
24
max-size: "200k"
25
max-file: "10"
26
27
cardano-node:
28
image: inputoutput/cardano-node:1.19.0
29
environment:
30
- NETWORK=${NETWORK:-mainnet}
31
volumes:
32
- node-db:/data/db
33
- node-ipc:/ipc
34
restart: on-failure
35
logging:
36
driver: "json-file"
37
options:
38
max-size: "200k"
39
max-file: "10"
40
41
cardano-db-sync:
42
image: inputoutput/cardano-db-sync:4.0.0
43
environment:
44
- NETWORK=${NETWORK:-mainnet}
45
- POSTGRES_HOST=postgres
46
- POSTGRES_PORT=5432
47
depends_on:
48
- cardano-node
49
- postgres
50
secrets:
51
- postgres_password
52
- postgres_user
53
- postgres_db
54
volumes:
55
- node-ipc:/node-ipc
56
restart: on-failure
57
logging:
58
driver: "json-file"
59
options:
60
max-size: "200k"
61
max-file: "10"
62
63
secrets:
64
postgres_db:
65
file: ./config/secrets/postgres_db
66
postgres_password:
67
file: ./config/secrets/postgres_password
68
postgres_user:
69
file: ./config/secrets/postgres_user
70
71
volumes:
72
postgres:
73
node-db:
74
node-ipc:
Copied!
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.
1
cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_db_example \
2
~/home/cardano/cardano-db-sync/config/secrets/postgres_db
Copied!
1
cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_password_example \
2
~/home/cardano/cardano-db-sync/config/secrets/postgres_password
Copied!
Recuerda cambiar la contraseña.
1
cp ~/home/cardano/cardano-db-sync/config/secrets/postgres_user_example \
2
~/home/cardano/cardano-db-sync/config/secrets/postgres_user
Copied!
Antes de correr Docker necesitamos añadir nuestro usuario al grupo docker:
1
sudo usermod -aG docker $USER
Copied!
Ahorra arrancamos la instancia con los mensajes de log activados:
1
docker-compose up -d && docker-compose logs -f
Copied!
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.
start.sh
init-cardano-db.sh
stop.sh
Creamos el script que levanta el servicio en segundo plano:
1
cd /home/cardano/cardano-db-sync
2
vim start.sh
Copied!
1
#!/bin/bash
2
session="cardano-db-sync"
3
# Check if the session exists, discarding output
4
# We can check $? for the exit status (zero for success, non-zero for failure)
5
tmux has-session -t $session 2>/dev/null
6
if [ $? != 0 ]; then
7
tmux attach-session -t $session
8
tmux new -s "cardano-db-sync" -n "node" -d
9
tmux split-window -v
10
tmux select-pane -t 'cardano-db-sync:node.0'
11
tmux split-window -h
12
tmux send-keys -t 'cardano-db-sync:node.0' './init-cardano-db.sh' Enter
13
tmux send-keys -t 'cardano-db-sync:node.1' 'htop' Enter
14
tmux send-keys -t 'cardano-db-sync.2' 'nload' Enter
15
fi
16
17
tmux attach-session -t $session
Copied!
Creamos el script que ejecuta docker:
1
cd /home/cardano/cardano-db-sync
2
vim init-cardano-db.sh
Copied!
1
#!/bin/bash
2
docker-compose up -d && docker-compose logs -f
Copied!
Creamos el script que finaliza el servicio asociado a la sesión "cardano-db-sync".
1
cardano-db-sync
Copied!
1
vim stop.sh
Copied!
1
#!/bin/bash
2
# Check if the session exists, discarding output
3
# We can check $? for the exit status (zero for success, non-zero for failure)
4
session="cardano-db-sync"
5
# Check if the session exists, discarding output
6
# We can check $? for the exit status (zero for success, non-zero for failure)
7
8
tmux has-session -t $session 2>/dev/null
9
if [ $? != 0 ]; then
10
echo "Session not found."
11
else
12
echo "Killing session"
13
tmux kill-session -t cardano-db-sync
14
fi
Copied!
Agregamos permisos de ejecución a los scripts:
1
chmod +x start.sh stop.sh init-cardano-db.sh
Copied!
Finalmente arrancamos el servicio:
1
./start.sh
Copied!
Una vez iniciado podemos lanzar consultas a la dirección localhost:5432.
Listamos todos los containers:
1
docker container ls -a
Copied!
Eliminar un container concreto por su ID:
1
docker container rm 661525b875a1
Copied!
Terminar todas las instancias:
1
docker-compose down -v
Copied!
Relanzamos las instancias:
1
docker-compose up --remove-orphans --force-recreate
Copied!
Apoyo nuestro trabajo delegando al pool Ada Booster.
Copiar enlace