Executar um Nó Tanssi Usando Systemd¶
Introdução¶
Neste guia, você aprenderá a iniciar um Nó Tanssi usando o binário estável mais recente e gerenciar o serviço com Systemd em sistemas Linux. Os nós fornecem endpoints de API essenciais para que aplicações e usuários interajam com a rede Tanssi.
O artigo segue a boa prática de executar o serviço com uma conta não-root e conceder a essa conta acesso de gravação a um diretório específico. Você pode adaptar as etapas à sua configuração, preferências e políticas de segurança.
Verificando Pré-requisitos¶
Para começar, você precisará de acesso a um computador executando Ubuntu Linux com Landlock habilitado e privilégios de root. Você também precisará de:
- Arquivos binários do Nó - um nó requer três binários:
tanssi-relay,tanssi-relay-execute-workeretanssi-relay-prepare-worker
As instruções executam a versão estável mais recente. Você pode compilar seu próprio arquivo a partir do código-fonte.
Verificar Suporte Landlock¶
Os nós Tanssi usam o recurso Landlock do kernel Linux como medida de segurança para restringir acesso a recursos do sistema, limitando danos caso o aplicativo seja comprometido.
Verifique o suporte Landlock executando:
sudo dmesg | grep landlock || journalctl -kg landlock
Saída esperada:
Se o Landlock estiver desabilitado, atualize o kernel para a versão 5.13 ou superior.
Baixar a Versão Mais Recente¶
Baixe o binário mais recente e torne-o executável:
Note
Recomenda-se usar as versões binárias otimizadas para as arquiteturas Skylake da Intel ou Zen3 da AMD para melhor desempenho.
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-execute-worker && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-prepare-worker && \
chmod +x ./tanssi-relay*
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-skylake -O tanssi-relay && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-execute-worker-skylake -O tanssi-relay-execute-worker && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-prepare-worker-skylake -O tanssi-relay-prepare-worker && \
chmod +x ./tanssi-relay*
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-znver3 -O tanssi-relay && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-execute-worker-znver3 -O tanssi-relay-execute-worker && \
wget https://github.com/moondance-labs/tanssi/releases/download/v0.15.0/tanssi-relay-prepare-worker-znver3 -O tanssi-relay-prepare-worker && \
chmod +x ./tanssi-relay*
Configure o serviço Systemd¶
O Systemd é um sistema de gerenciamento para Linux que controla serviços (daemons), iniciando-os automaticamente quando o computador liga ou reinicia, ou reiniciando-os em caso de falhas.
Os comandos a seguir criam uma nova conta, o diretório e movem os arquivos previamente baixados para o local correto.
-
Crie uma nova conta para executar o serviço:
adduser tanssi_service --system --no-create-homeadduser dancelight_service --system --no-create-home -
Crie um diretório para armazenar os arquivos e dados necessários:
mkdir /var/lib/tanssi-datamkdir /var/lib/dancelight-data -
Defina a propriedade da pasta para a conta que executará o serviço, garantindo permissão de escrita:
chown -R tanssi_service /var/lib/tanssi-datachown -R tanssi_service /var/lib/dancelight-data -
Mova os binários para a pasta:
mv ./tanssi-relay* /var/lib/tanssi-datamv ./tanssi-relay* /var/lib/dancelight-data
Gerar a chave do nó¶
Para gerar e armazenar em disco as chaves de sessão que serão referenciadas no comando de inicialização, execute:
/var/lib/tanssi-data/tanssi-relay key generate-node-key --file /var/lib/tanssi-data/node-key
/var/lib/dancelight-data/tanssi-relay key generate-node-key --file /var/lib/dancelight-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.
Criar o arquivo de configuração do Systemd¶
O próximo passo é criar o arquivo de configuração do Systemd.
Crie o arquivo executando o comando:
sudo touch /etc/systemd/system/tanssi.service
sudo touch /etc/systemd/system/dancelight.service
Agora abra o arquivo com seu editor favorito (vim, emacs, nano etc.) e adicione a configuração do serviço, substituindo a tag INSERT_YOUR_TANSSI_NODE_NAME por um nome legível e INSERT_YOUR_IP_ADDRESS pelo seu endereço IP público. Esse nome ajuda a relacionar entradas de log e métricas ao nó que as gera.
[Unit]
Description="Serviço systemd Tanssi"
After=network.target
StartLimitIntervalSec=0
[Service]
User=tanssi_service
Type=simple
Restart=always
RestartSec=10
SyslogIdentifier=tanssi
SyslogFacility=local7
KillSignal=SIGHUP
LimitNOFILE=100000
ExecStart=/var/lib/tanssi-data/tanssi-relay --chain=tanssi \
--base-path /var/lib/tanssi-data/ \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /var/lib/tanssi-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'
[Install]
WantedBy=multi-user.target
[Unit]
Description="Serviço systemd Dancelight"
After=network.target
StartLimitIntervalSec=0
[Service]
User=dancelight_service
Type=simple
Restart=always
RestartSec=10
SyslogIdentifier=dancelight
SyslogFacility=local7
KillSignal=SIGHUP
LimitNOFILE=100000
ExecStart=/var/lib/dancelight-data/tanssi-relay --chain=dancelight \
--base-path /var/lib/tanssi-data/ \
--name INSERT_YOUR_TANSSI_NODE_NAME \
--node-key-file /var/lib/tanssi-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'
[Install]
WantedBy=multi-user.target
Flags de Execução¶
As flags usadas no ExecStart 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 back-end otimizado para desempenho de nó RPC
- --unsafe-rpc-external - permite conexões externas ao RPC; requer medidas adicionais de segurança em produção (proxy reverso, autenticação, firewall)
Atenção
A flag --unsafe-rpc-external expõe o 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:
/var/lib/tanssi-data/tanssi-relay --help
/var/lib/dancelight-data/tanssi-relay --help
Execute o serviço¶
Por fim, habilite o serviço e inicie-o pela primeira vez:
systemctl enable tanssi.service && \
systemctl start tanssi.service
systemctl enable dancelight.service && \
systemctl start dancelight.service
Você pode verificar se o serviço está ativo e rodando corretamente executando:
systemctl status tanssi.service
systemctl status dancelight.service
● network.service - "Network systemd service"
Loaded: loaded (/etc/systemd/system/network.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-02-18 18:16:40 EST; 14min ago
Main PID: 4045278 (container-chain)
Tasks: 44 (limit: 9462)
Memory: 6.5G
CGroup: /system.slice/network.service
└─4045278 4045278 /var/lib/network-data/container-chain- ...
Verifique os logs, se necessário, com o comando a seguir:
journalctl -f -u tanssi.service
journalctl -f -u dancelight.service
Testando Seu Nó¶
Depois que seu nó estiver totalmente sincronizado, você pode verificar se o endpoint RPC está funcionando corretamente fazendo uma solicitação simples. Use curl para testar:
curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method":"chain_getHeader", "params":[]}' http://localhost:9944
Se o endpoint RPC estiver funcionando, você receberá uma resposta JSON contendo as informações do cabeçalho do bloco mais recente.
| Criada: 9 de dezembro de 2025