3
respostas

[Dúvida] Aplicação não sobe por falta do aquivo compilado main na ec2 da AWS

Amigos, alguém pode me ajudar?

Há algo de errado na implementação deste projeto! Neste curso, foram corrigidas todas as actions que estavam obsoletas, todas as invocações do docker compose com hífen e a declaração de um volume do postgres (# - /postgres-data:/var/lib/postgresql/data) que estava obsoleto e pertencia ao arquivo Docker-compose.yml.

Todos os passos Test, Build_main, Docker e Deploy_EC2 rodam perfeitamente – sem erro algum – até o final, porém, inspecionando a máquina virtual ec2, nota-se que o arquivo compilado main não está presente! Razão pela qual a aplicação não sobe!

Ao longo do processo, o arquivo main é corretamente criado. Vê-se o main na instrução Upload a Buid Artifact do passo Build_main. Consigo fazer o download do artefato, abrir o arquivo do projeto e ver o main dentro dele.
No final do processo não é possível encontrá-lo dentro da máquina virtual ec2 da AWS!
Há algo de errado que não consigo visualizar entre o final do Build_main e o Deploy_EC2!
Os arquivos podem ser examinados em: https://github.com/jnadyr/Curso_CI_3.git.

Infelizmente, não consigo anexar aqui os logs da execução. Não há espaço para anexar estes logs neste fórum. Posso enviá-los via e-mail. Meu e-mail: jnadyr@gmail.com

De antemão agradeço a gentileza!

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
3 respostas

Olá amigo.
A AWS está passando por uma instabilidade na data de hoje.
Não sei se este é seu caso mas dê uma pesquisada sobre...
Vou analisar seu projeto e assim que possível retorno um feedback.
Bons estudos.

Prezado Ronaldo, muito grato pela sua atenção! Quanto a instabilidade de ontem, terça-feira, 18/11/2025, provavelmente não é a causa do problema. Eu venho "brigando" com este problema desde segunda-feira. Até o momento não consegui entender ou sequer pescar o que está ocorrendo!

Repensando o problema:

  • Encontrei na ec2 a seguinte mensagem no arquivo nohup.err: nohup: failed to run command './main': No such file or directory.

  • Estão presentes na ec2 os seguintes arquivos: Dockerfile, docker-compose.yml, go.sum, main_test.go, nohup.err, go.mod, main.go, nohup.out.

Reitero meus agradecimentos meu caro amigo! José Nadyr.

Olá meu amigo.
Eu que agradeço seu feedback.
Não tive tempo de analisar seu código ainda mas até sabado lhe dou um retorno.
Abaixo uma sugestão para analisar sobre o problema:
O problema descrito indica que o pipeline está compilando o binário corretamente, o artefato é gerado e pode ser baixado, mas ele não aparece na instância EC2 após o deploy. A mensagem do arquivo nohup.err na EC2 confirma a causa: o comando “./main” não pode ser executado porque o arquivo simplesmente não está presente na máquina.
Os arquivos encontrados na instância são apenas os do repositório, sem o binário compilado.
Isso mostra que o pipeline faz o build e armazena o artefato, mas o job responsável pelo deploy nunca baixa esse artefato nem o copia para a EC2.
Em GitHub Actions, cada job é executado em uma máquina separada. Isso significa que o artefato gerado no job Build_main não existe automaticamente no job Deploy_EC2.
É obrigatório fazer o download explícito do artifact antes de enviá-lo para a instância.
Sem isso, o deploy está apenas puxando o repositório ou copiando arquivos que já estão no código-fonte, mas não o binário.
Para corrigir, é necessário incluir um passo no job Deploy_EC2 que faça o download do artefato gerado pelo Build_main utilizando actions/download-artifact. Depois disso, é necessário enviar o binário para a EC2 através de scp ou rsync.
Exemplo:

- name: Download build artifact
  uses: actions/download-artifact@v4
  with:
    name: build-main
    path: .

Em seguida, um passo copiando o arquivo para a EC2:

- name: Copy files to EC2
  run: |
    scp -o StrictHostKeyChecking=no -i ${{ secrets.SSH_KEY }} main ubuntu@${{ secrets.EC2_HOST }}:/home/ubuntu/main

E, na EC2, garantir que ele seja marcado como executável e executado:

ssh -o StrictHostKeyChecking=no -i ${{ secrets.SSH_KEY }} ubuntu@${{ secrets.EC2_HOST }} \
'chmod +x main && nohup ./main > nohup.out 2> nohup.err < /dev/null &'

Também é recomendável garantir que o binário seja compilado com a configuração correta para o ambiente da EC2 usando GOOS=linux e GOARCH=amd64, embora no seu caso o principal problema seja simplesmente a ausência do arquivo.
Em resumo: o pipeline constrói o binário, mas o job de deploy não faz download nem envia o artefato para a EC2.
A solução é garantir que o job Deploy_EC2 baixe explicitamente o artefato e o transfira para a máquina remota antes de tentar executá-lo.
Analisa o texto acima e faça as modificações sugeridas.
Envia um feedback com o resultado.
Bons estudos.