Ir para o conteúdo

Executar um Nó Tanssi Usando Docker

Introdução

Neste guia, você aprenderá como iniciar um nó Tanssi usando a imagem oficial com Docker em sistemas Linux. Os nós são cruciais para o ecossistema Tanssi, pois fornecem endpoints de API estáveis aos quais aplicativos e usuários podem se conectar para obter dados da cadeia e enviar transações.

Verificando Pré-requisitos

Instalando o Docker

Para começar, você precisará de um computador com Linux e instalar o Docker.

Execute o comando a seguir para instalar o Docker em um Ubuntu:

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

E o comando abaixo para verificar a instalação:

sudo docker run hello-world

Uma execução bem-sucedida no terminal se parece com isto:

sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

Puxar a Imagem Docker

Para cada versão, uma imagem Docker é construída e publicada. Ela contém todas as dependências que um nó Tanssi exige e o próprio binário.

A imagem combina o binário da versão estável mais recente do nó cliente com o arquivo de especificações do orquestrador Tanssi.

Execute o comando abaixo para puxar a imagem Docker:

docker pull moondancelabs/starlight
docker pull moondancelabs/starlight

O comando fará download/extrair a imagem e exibirá o status após a execução:

docker pull moondancelabs/starlight

Using default tag: latest
latest: Pulling from moondancelabs/starlight
e1caac4eb9d2: Pull complete
1d4409959e6d: Pull complete
b8beed19c122: Pull complete
c0fab1f18601: Pull complete
Digest: sha256:0f717d6cf247bbb1b082f5f9e5761b23c44a0be8b704492a57fdbf8c63c0a91c
Status: Downloaded newer image for moondancelabs/starlight
docker.io/moondancelabs/starlight

Configure o diretório de dados

Executar um nó requer sincronizar com a cadeia Tanssi e armazenar seu estado.

Crie o diretório onde o nó armazenará os bancos de dados contendo blocos e estados de cadeia:

mkdir /var/lib/tanssi-data
mkdir /var/lib/dancelight-data

Set the folder's ownership to the account that will run the Docker image to ensure writing permission:

chown INSERT_DOCKER_USER /var/lib/tanssi-data
chown INSERT_DOCKER_USER /var/lib/dancelight-data

Ou execute o comando a seguir se quiser rodar o nó com o usuário atualmente logado:

sudo chown -R $(id -u):$(id -g) /var/lib/tanssi-data
sudo chown -R $(id -u):$(id -g) /var/lib/dancelight-data

Note

O diretório é um parâmetro no comando de inicialização do Docker. Se decidir criá-lo em outro lugar, ajuste o comando.

Gerar a Chave do Nó

Para gerar e armazenar em disco as chaves de sessão referenciadas no comando de inicialização, execute:

docker run --network="host" -v "/var/lib/tanssi-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moondancelabs/starlight key generate-node-key --file /data/node-key
docker run --network="host" -v "/var/lib/dancelight-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moondancelabs/starlight key generate-node-key --file /data/node-key

Note

Esta etapa poderia ser evitada usando o parâmetro --unsafe-force-node-key-generation no comando de inicialização, embora essa não seja a prática recomendada.

Inicie Seu Nó

Para iniciar seu nó, execute a imagem Docker com docker run.

Substitua INSERT_YOUR_TANSSI_NODE_NAME por um nome legível e defina INSERT_YOUR_IP_ADDRESS com seu IP público.

Note

Recomenda-se usar as versões binárias otimizadas para as arquiteturas Skylake da Intel ou Zen3 da AMD para melhor desempenho.

docker run --network="host" -v "/var/lib/tanssi-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moondancelabs/starlight \
--chain=tanssi \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'
docker run --network="host" -v "/var/lib/tanssi-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
--entrypoint "/tanssi-relay/tanssi-relay-skylake" \
moondancelabs/starlight \
--chain=tanssi \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'
docker run --network="host" -v "/var/lib/tanssi-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
--entrypoint "/tanssi-relay/tanssi-relay-znver3" \
moondancelabs/starlight \
--chain=tanssi \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'
docker run --network="host" -v "/var/lib/dancelight-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moondancelabs/starlight \
--chain=dancelight \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'
docker run --network="host" -v "/var/lib/dancelight-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
--entrypoint "/tanssi-relay/tanssi-relay-skylake" \
moondancelabs/starlight \
--chain=dancelight \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'
docker run --network="host" -v "/var/lib/dancelight-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
--entrypoint "/tanssi-relay/tanssi-relay-znver3" \
moondancelabs/starlight \
--chain=dancelight \
--base-path /data \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /data/node-key \
--database paritydb \
--rpc-port 9944 \
--prometheus-port 9615 \
--prometheus-external \
--listen-addr /ip4/0.0.0.0/tcp/30333 \
--public-addr /ip4/INSERT_YOUR_IP_ADDRESS/tcp/30333 \
--state-pruning archive \
--blocks-pruning archive \
--rpc-cors=all \
--unsafe-rpc-external \
--rpc-methods=safe \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0'

Executar Flags

As flags do docker run podem ser ajustadas conforme suas preferências e hardware. Algumas das principais:

  • --state-pruning=archive - mantém todos os dados de estado (necessário para consultas históricas)
  • --blocks-pruning=archive - mantém todos os blocos (necessário para dados históricos de blocos)
  • --database=paritydb - usa ParityDB como backend otimizado para desempenho de nó RPC
  • --unsafe-rpc-external - permite conexões externas ao RPC; exige medidas adicionais de segurança em produção (proxy reverso, autenticação, firewall)

Atenção

A flag --unsafe-rpc-external expõe seu nó RPC externamente. Em produção, proteja com firewall, proxy reverso, autenticação e limitação de taxa.

Você pode visualizar todas as flags disponíveis executando:

docker run -ti moondancelabs/starlight --help
docker run -ti moondancelabs/starlight --help

Sincronizando Seu Nó

Na primeira execução, o processo de sincronização exibirá muitos logs do nó e da cadeia. Alguns erros iniciais são esperados e desaparecem quando a cadeia alcança o último bloco.

docker run ....
2024-02-08 18:30:04.093 INFO tokio-runtime-worker substrate: [Parachain] 💤 Idle (0 peers), best: #0 (0x4a2b…7de3), finalized #0 (0x4a2b…7de3), ⬇ 0 ⬆ 0
2024-02-08 18:30:06.368 INFO tokio-runtime-worker substrate: [Relaychain] ✨ Imported #14139635 (0x8c41…8df6)
2024-02-08 18:30:08.809 INFO tokio-runtime-worker substrate: [Relaychain] 💤 Idle (8 peers), best: #14139635 (0x8c41…8df6), finalized #14139632 (0xa9a8…cab9), ⬇ 32.7kiB/s ⬆

Testando Seu Nó

Depois de sincronizado, teste o endpoint RPC com uma solicitação simples, por exemplo:

curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method":"chain_getHeader", "params":[]}' http://localhost:9944

Se estiver funcionando, você receberá uma resposta JSON com o cabeçalho do bloco mais recente.

Última atualização: 9 de dezembro de 2025
| Criada: 9 de dezembro de 2025