Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Projeto Node/Express com Docker Compose 🚀

Aplicação Node.js (Express) que insere e lista nomes em um banco MySQL, containerizada com Docker Compose. O projeto inclui:

  • Serviço app (Express) rodando na porta 3000
  • Serviço database (MySQL)
  • Serviço nginx (proxy reverso) exposto na porta 8080

🧩 O que o projeto faz

  • Ao acessar / a aplicação insere um nome humano aleatório (gerado com unique-names-generator) no MySQL e retorna a lista de nomes com a escrita Full Cycle Rocks !.
  • A aplicação aguarda o banco ficar pronto usando um mecanismo de retry (waitForDb) e há healthchecks configurados para database e app.

🧰 Tecnologias

  • Node.js + Express
  • MySQL
  • Docker, Docker Compose
  • unique-names-generator (para gerar nomes)

🚀 Como rodar (local com Docker Compose)

  1. Reconstruir sem cache (recomendado após alterações em package.json):
docker-compose build --no-cache --progress=plain
  1. Subir os serviços:
docker-compose up --build
  1. Verificar logs e health:
docker-compose logs -f app
docker-compose logs -f database
docker-compose ps   # mostra estado de health (healthy/unhealthy)
  1. Testar a aplicação:
curl http://localhost:3000
# ou via nginx
curl http://localhost:8080

🔌 Portas

  • 3000 — exposto pelo serviço app (mapeado para o host)
  • 8080 — exposto pelo nginx
  • 3306 — não é exposto por padrão (não é necessário para comunicação entre containers). Exponha apenas se precisar acessar o DB a partir do host.

🛠️ Observações importantes

  • Conexão com o banco: use host: 'database' dentro do container (nome do serviço do Compose). Não use localhost.
  • Inicialização resiliente: o app tem waitForDb() que faz retries; o Compose tem healthchecks configurados para melhorar a ordem de inicialização.
  • Se a instalação de dependências não acontecer no build, reconstrua sem cache (--no-cache) para forçar npm install.

✅ Testes e depuração

  • Verifique se app está healthy em docker-compose ps.
  • Se o app não conectar ao DB, veja docker-compose logs -f database e docker-compose logs -f app.
  • Para testar conectividade TCP do container app ao database:
docker-compose exec app node -e "require('net').createConnection(3306,'database').on('connect',()=>console.log('ok')).on('error',e=>console.error(e))"

📦 Como adicionar dependência

  1. Atualize docker/app/package.json com a nova dependência (ex.: unique-names-generator).
  2. Rebuild da imagem para instalar a nova dependência:
docker-compose build --no-cache --progress=plain

💡 Dicas

  • Para builds mais rápidos: no docker/Dockerfile copie apenas package*.json, rode npm ci, depois copie o restante dos arquivos e rode build — isso permite aproveitar cache nas dependências.
  • Ajuste healthchecks/retries se estiver enfrentando tempo de inicialização variável.

🧩 Descrição do Projeto

A aplicação Node.js (Express) insere um nome humano aleatório no banco MySQL a cada acesso à rota / e retorna a lista de nomes (a saída inclui Full Cycle Rocks! no HTML). O projeto foi feito para ser executado com Docker Compose e inclui healthchecks e lógica de retry para esperar o banco ficar pronto.


📁 Estrutura Básica

.
├── docker-compose.yml
├── README.md
├── docker/
│   ├── Dockerfile            # Dockerfile principal para o serviço app
│   ├── scripts/
│   │   └── docker-entrypoint.sh
│   └── app/
│       ├── index.js         # código da aplicação
│       ├── package.json
│       └── healthcheck.js   # checagem de saúde usada pelo Compose
├── nginx/
│   ├── Dockerfile
│   └── nginx.conf
└── .git/

Obs: pequenos detalhes (arquivos extras) podem variar conforme o histórico do repositório.


▶️ Como executar (via Docker Compose)

  1. Reconstrua a imagem quando alterar dependências:
docker-compose build --no-cache --progress=plain
  1. Suba os serviços:
docker-compose up --build
  1. Teste a aplicação:
curl http://localhost:3000
# via nginx
curl http://localhost:8080

💻 Executar localmente (sem Docker) — opção desenvolvedor

  1. Instale dependências:
cd docker/app
npm install
  1. Ajuste variáveis de ambiente se necessário (p.ex., DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) e rode:
npm start

A aplicação assume que o MySQL está acessível em database (quando em Compose) ou no host configurado via variáveis de ambiente.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages