Em termos gerais, Sails.js é um gerador de códigos JavaScript que entrega, em poucos minutos, um protótipo executável de uma Aplicação WEB do tipo backend robusta, segura e escalável. Diz-se backend porque todo o processamento ocorre do lado do servidor e depois disso é retornado ao navegador páginas HTML5 + CSS + JavaScript dinâmicas ao Cliente Web.
A versão final de sua Aplicação WEB precisará ser lançada em um servidor especial (ambiente de
produção)
que garanta sua execução com segurança e desempenho dignos. Uma forma de fazer isso é o lançamento Em
container Docker.
Docker é uma plataforma de software de código aberto que
permite implantar aplicativos dentro de containers virtuais. A conteinerização permite que vários aplicativos
funcionem em diferentes ambientes complexos. Por exemplo, o Docker permite executar o WordPress em sistemas
Windows, Linux e macOS, sem problemas. A tecnologia de container do Docker é mais leve e portátil do que as
máquinas virtuais. Embora o Docker e as máquinas virtuais tenham um propósito semelhante, seu desempenho,
portabilidade e suporte a sistemas operacionais diferem significativamente. O Docker é uma das
plataformas de containers mais populares sendo usada por muitas empresas para implantar aplicativos em
diferentes
sistemas.
Este passo-a-passo demonstra como utilizar o Docker como solução de Container em sincronia com as funcionalidades do Sails.js no backend.
Se esta é sua primeira vez aqui, recomendamos a leitura dos conteúdos abaixo antes de continuar:
O Dockerfile é um arquivo de texto simples que contém todas as instruções necessárias para criar uma imagem Docker. Com ele, você pode criar imagens personalizadas que contêm tudo o que seu aplicativo precisa para ser executado, incluindo o sistema operacional, bibliotecas, dependências e código do aplicativo. O Dockerfile é uma parte crucial do processo de criação de imagens Docker. É usado para automatizar a construção de imagens e garantir que as imagens resultantes sejam consistentes e facilmente replicáveis. Ou seja, trata-se de uma ferramenta poderosa que permite aos desenvolvedores criar e gerenciar imagens personalizadas do Docker de forma fácil e eficiente.
Dockerfile, sem nenhuma
extensão.
# Este arquivo Dockerfile foi preparado para construcao de
# uma imagem de container Docker (https://docs.docker.com/guides/get-started/)
# pronta para execucao de uma aplicacao Sails.js (https://www.sails.js)
# em ambiente de producao.
# Atenção! Estamos considerando que tu tens conhecimento minimo para:
# a) Instalar um servico Docker no computador;
# b) Executar o comando docker pull node:versao
# c) Executar o comando $docker build -t .
# d) Executar o comando $docker run -d -p 80:80 --ip localhost [image_id da imagem gerada]
# Antes de executar este Dockerfile, certifique-se de que:
# 1) no arquivo config/env/production.js do Protótipo Sails criado, já foi autorizado o acesso:
# onlyAllowOrigins: [
# 'http://localhost', <-- endereco final do app em producao
# ],
#
# 2) no arquivo config/env/production.js, já foi definida a porta 80:
#
# port: 80,
#
# 3) no arquivo config/env/production.js ou no config/custom.js, já foi definido
# explicitamente o endereco base:
# custom: {
# baseUrl: 'http://localhost', <-- endereco final do app em producao
# internalEmailAddress: 'support@example.com',
# ...
#
#
# A escolha da imagem Docker deve ser feita de acordo com a versao
# do Node.js que o desenvolvedor utilizou quando o app foi criado,
# pois toda a definicao de bibliotecas constante do aquivo package.json
# durante a criacao do prototipo dependeu disso.
# Para saber qual versao do Node.js foi utilizada pelo 'motor gerador'
# do codigo, localize, no arquivo package.json, a seguinte entrada:
# "engines": {
# "node": "^16.15" <-- versao do Node.js utilizada para instalacao
# }
#
# Para instalar a imagem mais atualizada...
# FROM registry.ccarj.intraer/mirror/library/node:lts-alpine AS build
# Para instalar a imagem compativel com a versao de 'geracao' do app
# FROM node:16.15.1 AS build
FROM node:16.15.1 AS build
# Definicao do diretorio de trabalho
WORKDIR /usr/local/app
# Transferencia do codigo fonte para a imagem
COPY ./ /usr/local/app/
# Instalacao de todas as dependencias
RUN npm install
# Atribuicao de permissoes de execucao
USER node
COPY . .
COPY --chown=node:node . .
# Exposicao da porta 80
EXPOSE 80:80
# Execucao em ambiente de producao
ENV NODE_ENV=production
CMD [ "node", "./app.js" ]
docker build -t sails .docker images. Tú deves visualizar algo
como:
sails latest ece424c79462 About a minute ago 1.28GB
<none> <none> 013a26c1f25a 36 minutes ago 1.28GB
<none> <none> c8155314f684 2 hours ago 1.28GB
<none> <none> 2d0b6c440655 2 hours ago 1.28GB
<none> <none> f794fe671dc1 2 hours ago 1.28GB
<none> <none> 3a00a11c6562 3 hours ago 1.29GB
<none> <none> e7d9d17bbb88 3 hours ago 1.29GB
<none> <none> fa5014bfabe8 3 hours ago 1.29GB
<none> <none> 29dc685bd58b 3 hours ago 1.29GB
mongo latest 9b10bdf158d5 3 weeks ago 757MB
node 16.15.1 b9f398d30e45 18 months ago 907MB
docker run -d -p 80:80 [--ip meuendereco] <image_id da imagem gerada>docker run -d -p 1337:80 sails new
.http://localhost(ou o endereço final que você definiu no
arquivo production.js) citado acima
Execute o Docker na AWS
A AWS oferece suporte para soluções comerciais e de código aberto do Docker. Existem várias maneiras de executar contêineres na AWS, incluindo o Amazon Elastic Container Service (ECS), que é um serviço de gerenciamento de contêiner altamente escalável e de alta performance. Os clientes podem implantar facilmente as aplicações conteinerizadas a partir do ambiente local do Docker diretamente no Amazon ECS. O AWS Fargate é uma tecnologia para o Amazon ECS que permite executar contêineres em produção sem implantar ou gerenciar a infraestrutura. O Amazon Elastic Container Service for Kubernetes (EKS) facilita a execução do Kubernetes na AWS. O AWS Fargate é uma tecnologia para o Amazon ECS que permite executar contêineres sem provisionar ou gerenciar servidores. O Amazon Elastic Container Registry (ECR) é um repositório privado de contêineres altamente disponível e seguro que facilita o armazenamento e o gerenciamento de imagens do contêiner do Docker, criptografando e compactando imagens em repouso, para que sejam fáceis de capturar e proteger. O AWS Batch permite executar cargas de trabalho de processamento em lote altamente escaláveis usando contêineres do Docker.
Cloud Build
O Cloud Build é um serviço que executa suas versões no Google Cloud.
O Cloud Build pode importar o código-fonte de uma variedade de repositórios ou espaços do Cloud Storage,
executar uma versão para suas especificações e produzir artefatos como contêineres Docker ou
arquivos Java.
Serviço de Kubernet da Azure (AKS)
O Serviço de Kubernetes do Azure (AKS) oferece a maneira mais rápida de começar a desenvolver e implantar aplicativos nativos de nuvem no Azure, em datacenters ou na borda com pipelines internos do código para a nuvem e verificadores de integridade. Obtenha gerenciamento e governança unificados para clusters do Kubernetes locais, de borda e multinuvem. Interopere com os serviços de segurança, identidade, gerenciamento de custos e migração do Azure.
Heroku Sailsforce
O Serviço Heroku da Sailsforce oferece duas formas de realizar lançamento de software com Docker: