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.

Image for post
Image for post

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:

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 COPYno Dockerfile a seguir às suas necessidades.

No Dockerfile:

FROM node:10.16.2-stretchWORKDIR /usr/src/appENV 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.ymlconfigura 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

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store