DEV Community

Eduardo Rabelo
Eduardo Rabelo

Posted on

4

AWS Fargate: Criando um servidor Node.js com Express e Docker

Meu primeiro projeto com o Node.js - que é uma engine de execução JavaScript assíncrono orientado a eventos, projetado para criar aplicativos de rede escaláveis ​​- estava construindo uma plataforma de negociação on-line em 2013. Desde então, o Node.js. é uma das minhas tecnologias favoritas. Irei mostrar nesse artigo, como utilizar Docker no seu aplicativo Node.js com Express - um framework minimalista, rápido e sem opiniões fortes - para executá-lo no AWS Fargate. O AWS Fargate deixa a execução de contêineres na nuvem muito mais fácil.

Esse artigo é um trecho do livro Rapid Docker na AWS.

Veja abaixo como criar uma imagem do Docker para um aplicativo Node.js.

Construindo a imagem do Docker

O Dockerfile é baseado na imagem oficial Node.js em Docker: node:10.16.2-stretch. Arquivos estáticos (pastas img e css) são exibidos pelo Express, bem como suas partes dinâmicas. Os seguintes detalhes são necessários para entender o Dockerfile:

  • envsubst - é usado para gerar o arquivo de configuração a partir de variáveis ​​de ambiente
  • npm ci --only=production - instala as dependências declaradas em package.json (utilizando package-lock.json, para ser mais preciso)
  • O aplicativo Express escuta na porta 8080
  • O ponto de entrada do aplicativo Express é server.js e pode ser iniciado com node server.js

Usaremos um server.js simples, um aplicativo mais completo, com certeza contém mais componentes.

No server.js:


const express = require('express');

const app = express();
app.use('/css', express.static('css'));
app.use('/img', express.static('img'));

app.get('/health-check', (req, res, next) => {
  res.sendStatus(200);
});

app.listen(8080, '0.0.0.0');

Personalização: Provavelmente, sua estrutura de pastas é diferente. Portanto, adapte as seções COPY no Dockerfile a seguir às suas necessidades.

No Dockerfile:

FROM node:10.16.2-stretch

WORKDIR /usr/src/app

ENV NODE_ENV production

# Instala o envsubst
RUN apt-get update && apt-get install -y gettext
COPY docker/custom-entrypoint /usr/local/bin/
RUN chmod u+x /usr/local/bin/custom-entrypoint
ENTRYPOINT ["custom-entrypoint"]
RUN mkdir /usr/src/app/config/

# Copia os arquivos de configuração
COPY config/*.tmp /tmp/config/

# Instala as dependências do projeto
COPY package*.json /usr/src/app/
RUN npm ci --only=production

# Copia os arquivos do projeto
COPY css /usr/src/app/css
COPY img /usr/src/app/img
COPY views /usr/src/app/views
COPY server.js /usr/src/app/

# Expõe a porta 8080 e inicia o servidor
EXPOSE 8080
CMD ["node", "server.js"]

O ponto de entrada personalizado é usado para gerar o arquivo de configuração a partir de variáveis ​​de ambiente envsubst.

Dentro de custom-entrypoint:

#!/bin/bash
set -e

echo "generating configuration files"
FILES=/tmp/config/*
for f in $FILES
do
  c=$(basename $f .tmp)
  echo "... $c"
  envsubst < $f > /usr/src/app/config/${c}
done

echo "starting $@"
exec "$@"

Em seguida, você aprenderá como testar seus contêineres e aplicativos localmente.

Testando localmente

Use o Docker Compose para executar seu aplicativo localmente. O seguinte arquivo docker-compose.yml configura o Docker Compose e inicia dois contêineres: um para Node.js e um banco de dados MySQL.


Para continuar lendo, consulte o livro Rapid Docker na AWS.

Créditos

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay