WEB3DEV

Cover image for Como Executar um Nó Ethereum Privado usando o Geth no EC2 da AWS
Fatima Lima
Fatima Lima

Posted on • Atualizado em

Como Executar um Nó Ethereum Privado usando o Geth no EC2 da AWS

Sumário
  1. Ativando uma instância de EC2
  2. Configuração do nó Geth
  3. Geração da Conta
  4. Configuração inicial do Geth
  5. Habilite o Acesso HTTPS para o Nó Geth usando NGINX
  6. Conclusão

Ethereum

O ecossistema de desenvolvimento Ethereum continua evoluindo e crescendo e sua recente migração de Prova de Trabalho (Proof-Of-Work) para o mecanismo de consenso de Prova de Participação (Proof-Of-Stake) tem sido um sucesso total.

Entretanto, o desenvolvimento de um Aplicativo Descentralizado (DApps) na Ethereum pode ser caro, dado que serviços de terceiros como Infura ou Alchemy, que oferecem acesso à blockchain, estão se tornando caros para fins de desenvolvimento e a maioria das plataformas faucet não aloca tokens da testnet suficientes, uma vez que eles têm que atender a todos os pedidos.

Devido às várias razões mencionadas acima, administrar seu nó privado da Ethereum para desenvolvimento pode ser prático e econômico.

Para aproveitar ao máximo este tutorial, inscreva-se em uma conta gratuita AWS (Amazon Web Services) usando este link.

Ativando uma instância de EC2

Faça o login na sua conta AWS, procure por AWS EC2 em seu console e clique na instância de lançamento. Selecione o servidor Ubuntu e clique em next.

AWS EC2

Prossiga com o nível gratuito selecionado.

Típo de instância

Mantenha a seguinte configuração como padrão e clique em next.

Configurando detalhes da instância

Atualize as regras de segurança, permitindo o tráfego de entrada para a porta 30303 do TCP e UDPe também abra as portas 80 e 443 do TCPpara acesso externo ao nó JSON-RPC API.

Regras de segurança

Antes de lançar nossa instância, vamos criar e baixar nosso par de chaves de instância. Uma vez baixado, coloque-o sob as portas do diretório ~/.ssh.

Par de chaves da instância

Abra seu terminal e execute o seguinte comando:

chmod 400 <YOUR KEY PAIR PATH>
chmod 400 ~/.ssh/my-ec2-rsa.pem
Enter fullscreen mode Exit fullscreen mode

Depois disso, execute o próximo comando para se conectar ao servidor localmente.

ssh -i "<YOUR KEY PAIR PATH>" <YOUR EC2 INSTANCE PUBLIC IPv4 DNS>
ssh -i "~/.ssh/my-ec2-rsa.pem" [email protected]
Enter fullscreen mode Exit fullscreen mode

Configuração do nó Geth

Vamos instalar o Geth a partir do repositório oficial, executando os seguintes comandos:

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
Enter fullscreen mode Exit fullscreen mode

Execute o seguinte comando mkdir -p dev-node/private sob o diretório raiz da instância EC2 para criar uma pasta que será usada como banco de dados para armazenar configurações de nós e contas geradas.

Crie um arquivo no diretório dev-node/private chamado genesis.json e adicione o seguinte conteúdo:

O arquivo genesis.json contém um conjunto de configurações em que o chainId é usado para prevenir ataques de repetição através de canais, nonce para inicializar a blockchain, timestampdetermina quando o bloco foi gerado , difficulty define quão difícil é extrair um novo bloco (sempre defini-lo baixo a fim de evitar longas esperas na mineração), gasLimit define o limite do custo do gas por bloco, coinbaseé usado como endereço para coletar recompensas de mineração e alocar contas Ether pré-alocadas. Você pode ler mais sobre outros parâmetros aqui.

Uma vez que a genesis.json é criada e configurada como acima, execute o comando abaixo a fim de inicializar a configuração. Certifique-se de que você está executando o comando no diretório dev-node/private.

geth --datadir . init genesis.json
Enter fullscreen mode Exit fullscreen mode

Após uma execução bem sucedida, dois arquivos (get & keystore) serão gerados no diretório dev-node/private.

Geração da Conta

Vamos gerar uma conta que irá recolher as recompensas da mineração. Execute o comando abaixo no diretório dev-node/private e defina a senha após ter sido solicitado a fazê-lo.

geth --datadir . account new
Enter fullscreen mode Exit fullscreen mode

Você pode listar as contas geradas executando este comando:

geth --datadir . account list
Enter fullscreen mode Exit fullscreen mode

Crie outro arquivo chamado password.txt em dev-node/private onde você pode adicionar a senha da conta.

Configuração inicial do Geth

Agora execute sudo vi /lib/systemd/system/geth.service e acrescente o seguinte conteúdo:

[Unit]

Description=Geth Full Node
After=network-online.target
Wants=network-online.target

[Service]

WorkingDirectory=/home/ubuntu
User=ubuntu
ExecStart=/usr/bin/geth --mine --miner.threads 2 --datadir ~/dev-node/private --http --http.api personal,eth,net,web3,txpool --networkid 1337 --port 30303 --http.corsdomain '*' --http.vhosts '*' --http.port 8545 --allow-insecure-unlock --unlock "add-your-generated-account-address" --ipcpath ~/.ethereum/geth.ipc --password /home/ubuntu/dev-node/private/password.txt
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Em resumo, habilitamos o processo de mineração usando duas threads (linhas), especificando a localização dos arquivos de configuração, definindo 1337 como o id da rede, etc... Você pode seguir este link para ler mais sobre as diferentes bandeiras (flags) especificadas neste comando inicial.

Agora você pode habilitar e iniciar o serviço Geth, executando:

sudo systemctl enable geth
sudo systemctl start geth
Enter fullscreen mode Exit fullscreen mode

E você pode ver o registro do processo de mineração executando isto:

sudo journalctl -f -u geth
Enter fullscreen mode Exit fullscreen mode

Você obtém o número de bloco atual executando este comando a partir de seu terminal de instância EC2

curl -X POST http://127.0.0.1:8545 \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0", "method":"eth_blockNumber", "id":1337}'
Enter fullscreen mode Exit fullscreen mode

Habilite o Acesso HTTPS para o Nó Geth usando NGINX

No momento, o nó só é acessível de dentro da instância EC2. Com a ajuda do Nginx, seremos capazes de expor, com segurança, o API ao público.

Você vai precisar de um domínio para implementar esta solução. Pode ser um domínio raiz ou um subdomínio. Você tem que adicionar um registro A DNS apontando para o IP de sua instância EC2.

Vamos instalar os pacotes necessários dentro da instância

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx
Enter fullscreen mode Exit fullscreen mode

Agora você pode gerar um certificado SSL e a configuração inicial do Nginx, executando:

sudo certbot --nginx -d your-domain-name.com
Enter fullscreen mode Exit fullscreen mode

O pacote certbot que instalamos também cuidará da renovação automática do certificado para nós, adicionando um timer de sistema que funcionará duas vezes por dia e renovará automaticamente qualquer certificado que esteja dentro do prazo de expiração de trinta dias.

Você pode consultar o status do timer com este comando:

sudo systemctl status certbot.timer
Enter fullscreen mode Exit fullscreen mode

Agora você precisa editar o arquivo de configuração Nginx /etc/nginx/sites-enabled/default:

A diretriz proxy_pass é utilizada para representar o tráfego de uma porta HTTPS criptografada 443 para a porta 8545 do nó Geth em nossa instância EC2, sem expô-lo publicamente.

Para verificar se a configuração está correta:

sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

E reinicie o processo Nginx para efetuar as mudanças:

sudo service nginx restart
Enter fullscreen mode Exit fullscreen mode

Podemos testar se tudo está funcionando como esperado, tentando obter o número do bloco

curl -X POST https://your-domain-name.com \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0", "method":"eth_blockNumber", "id":1337}'
Enter fullscreen mode Exit fullscreen mode

Você deve ser capaz de obter o número de bloco atual após executar o comando acima. Com o RPC https://your-domain-name.com e o identificador da cadeia 1337, podemos configurar nossa rede na MetaMask.

Conclusão

Devido às limitações ou às vezes ao custo associado ao uso de serviços de terceiros como Infura ou Alchemy, administrar seu nó privado pode ser a única opção, apesar dos desafios de sua configuração.

Neste artigo, conseguimos cobrir a maioria das configurações importantes que se pode precisar para executar um nó privado em uma instância do EC2.

Esse artigo foi escrito por Verdotte Aututu e traduzido por Fátima Lima. Seu original pode ser lido aqui.


Abrace a oportunidade de elevar sua jornada de desenvolvimento para um nível superior. Executar um nó privado no Ethereum é apenas o começo; os builds incríveis da WEB3DEV representam a chave de entrada para o emocionante cenário web3. 🚀🧑‍💻

Não perca tempo, 👉inscreva-se👈 agora mesmo e comece a desbravar o universo Blockchain!
 
Seja também WEB3DEV!

Top comments (0)