Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Aplicativos MEAN Stack sem servidor com Cloud Run e MongoDB Atlas

Abirami Sukumaran, Stanimira Vlaeva8 min read • Published Jun 13, 2022 • Updated Apr 02, 2024
DockerGoogle cloudAtlasJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Plea and the Pledge: Verdadeiramente sem servidor

Como desenvolvedores de aplicativos modernos, estamos lidando com muitas prioridades: desempenho, flexibilidade, usabilidade, segurança, confiabilidade e facilidade de manutenção. Além disso, estamos lidando com dependências, configuração e implantação de vários componentes em vários ambientes e, às vezes, também em vários repositórios. E então temos que manter as coisas seguras e simples. Ah, o pesadelo!
Essa é a razão pela qual usamos computação sem servidor. O Serverless permite que os desenvolvedores se concentrem no que mais gostam de fazer - o desenvolvimento - e deixem o restante dos atributos, incluindo infraestrutura e manutenção, para as ofertas de plataforma.
Nesta leitura, vamos ver como o Cloud Run e o MongoDB se unem para permitir uma experiência de desenvolvimento de aplicativos de pilha MEAN completamente sem servidor. Aprenderemos como criar um aplicativo MEAN sem servidor com Cloud Run e MongoDB Atlas, a plataforma de dados para desenvolvedores de várias nuvens do MongoDB.

Implementações em contêineres com Cloud Run

Todas as plataformas sem servidor oferecem recursos interessantes:
  • Função orientada a eventos (embora não seja um requisito rígido)
  • Manutenção sem infraestrutura
  • Preços com base no uso
  • Recursos de auto-scaling
Cloud Run se destaca por nos permitir:
  • Código do pacote em vários contêineres sem estado que reconhecem solicitações e o invocam por meio de solicitações HTTP
  • Só seja cobrado pelos recursos exatos que usar
  • Suporta qualquer linguagem de programação ou qualquer biblioteca de sistema operacional de sua escolha, ou qualquer binário
Confira este link para mais funcionalidades no contextocompleto.
No entanto, muitos modelos sem servidor ignoram o fato de que os bancos de dados tradicionais não são gerenciados. Você precisa provisionar manualmente a infraestrutura (dimensionamento vertical) ou adicionar mais servidores (dimensionamento horizontal) para dimensionar o banco de dados. Isso introduz um gargalo em sua arquitetura sem servidor e pode levar a problemas de desempenho.

Implementar um banco de dados sem servidor com o MongoDB Atlas

O MongoDB lançou instâncias sem servidor, uma nova implantação de banco de dados sem servidor totalmente gerenciada no Atlas para resolver esse problema. Com instâncias sem servidor, você nunca precisa pensar em infraestrutura — basta implantar seu banco de dados e ele aumentará e diminuirá de acordo com a demanda — sem exigir gerenciamento prático. E a melhor parte, você só será cobrado pelas operações que executar. Para tornar nossa arquitetura verdadeiramente sem servidor, combinaremos os recursos do Cloud Run e do MongoDB Atlas.

O que é a pilha MEAN?

A pilha MEAN é uma pilha de tecnologia para construir aplicações web full-stack inteiramente com JavaScript e JSON. A pilha MEAN é composta por quatro componentes principais – MongoDB, Express, Angular e Node.js.
  • O MongoDB é responsável pelo armazenamento de dados.
  • Express.js é uma estrutura de aplicativos da Web do Node.js para a criação de APIs.
  • Angular é uma plataforma JavaScript do lado do cliente.
  • O Node.js é um ambiente de tempo de execução JavaScript no lado do servidor. O servidor usa o driver MongoDB Node.js para se conectar ao banco de dados e recuperar e armazenar dados.
Pilha MEAN

Etapas para implantar aplicativos MEAN Stack verdadeiramente sem servidor com Cloud Run e MongoDB

Nas seções a seguir, provisionaremos uma nova instância sem servidor do MongoDB, conectaremos um aplicativo web MEAN stack a ela e, finalmente, implantaremos o aplicativo no Cloud Run.

1. Criar o banco de dados

Antes de começar, comece a usar o MongoDB Atlas no Google Cloud.
Página de assinatura do MongoDB Atlas no Google Cloud
Depois de se inscrever, clique no botão "Build a Database " para criar uma nova instância sem servidor. Selecione a seguinte configuração:
Criar nova instância sem servidor na página de configuração do MongoDB Atlas
Depois que sua instância sem servidor estiver provisionada, você deverá vê-la instalada e em execução.
Página de implantações de banco de dados no MongoDB Atlas
Clique no botão "Connect " para adicionar um endereço IP de conexão e um usuário do banco de dados.
Para esta publicação do blog, usaremos a configuração "Allow Access from Anywhere ". O MongoDB Atlas vem com um conjunto de recursos de segurança e acesso. Você pode saber mais sobre eles no artigo de documentação de recursos de segurança.
Use as credenciais de sua escolha para o nome de usuário e a senha do banco de dados. Depois que essas etapas forem concluídas, você verá o seguinte:
Tela mostrando "Você está pronto para se conectar" no MongoDB Atlas
Continue clicando no botão "Choose a connection method " e, em seguida, selecionando "Connect your application ".
Tela mostrando a connection string para o MongoDB Atlas
Copie a string de conexão que você vê e substitua a senha pela sua. Usaremos essa string para conectar-se ao nosso banco de dados nas seções a seguir.

2. Configurar um projeto do Cloud Run

Primeiro, faça login no Console do Cloud, crie um novo projeto ou reutilize um existente.
Lembre-se da ID do projeto para o projeto que você criou. Abaixo está uma imagem de https://codeLabs.developers.google.com/codeLabs/cloud-run-hello#1 que mostra como criar um novo projeto no Google Cloud.
Página de configuração "Criar um novo projeto" no Google Cloud. A ID do projeto está destacada.
Em seguida, ative a API Cloud Run no Cloud Shell:
  • Ative o Cloud Shell no Console do Cloud. Basta clicar em Ativar Cloud Shell.
Página de carregamento do editor do Google Cloud Shell
  • Use o comando abaixo:
gcloud services enable run.googleapis.com
Usaremos o Cloud Shell e o Cloud Shell Editor para referências de código. Para acessar o Cloud Shell Editor, clique em Abrir editor no Terminal do Cloud Shell:
Editor de código do Google Cloud Shell
Finalmente, precisamos clonar o projeto MEAN stack que implantaremos.
Implementaremos um aplicativo da web de gerenciamento de funcionários. A REST API foi construída com Express e Node.js; a interface web, com Angular; e os dados serão armazenados na instância do MongoDB Atlas que criamos anteriormente.
Clone o repositório do projeto executando o seguinte comando no Terminal do Cloud Shell:
git clone https://github.com/mongodb-developer/mean-stack-example.git
Nas seções a seguir, implantaremos alguns serviços — um para o Express REST API e outro para o Angular web application.

3. Implemente a API REST Express e Node.js

Primeiro, implementaremos um serviço cloud Run para a Express REST API.
O arquivo mais importante para nossa implantação é o arquivo de configuração do Docker. Vamos dar uma olhada:
exemplo de MEAN/servidor/Dockerfile
1FROM node:17-slim
2
3WORKDIR /usr/app
4COPY ./ /usr/app
5
6# Install dependencies and build the project.
7RUN npm install
8RUN npm run build
9
10# Run the web service on container startup.
11CMD ["node", "dist/server.js"]
A configuração define o Node.js, copia e cria o projeto. Quando o container inicia, o comando "node dist/server.js " inicia o serviço.
Para iniciar uma nova implantação do Cloud Run, clique no ícone do Cloud Run na barra lateral esquerda:
Selecione o ícone 'Cloud Run' na barra lateral esquerda.
Em seguida, clique no ícone Implementar no Cloud Run:
Selecione o ícone "Implantar no Cloud Run" no painel aberto
Preencha a configuração do serviço da seguinte forma:
  • Nome do serviço: node-express-api
  • Plataforma de implantação: Cloud Run (totalmente gerenciado)
  • Região: Selecione uma região próxima à região de seu banco de dados para reduzir a latência
  • Autenticação: permitir invocações não autenticadas
Em Revision Settings (Configurações de revisão), clique em Show Advanced Settings (Mostrar configurações avançadas) para expandi-las:
  • Porta do contêiner: 5200
  • Variáveis de ambiente. Adicione o seguinte par de chave-valor e certifique-se de adicionar a string de conexão para sua própria implantação do MongoDB Atlas:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
Para o ambiente de compilação, selecione Cloud Build.
Por fim, na seção Configurações de compilação, selecione:
  • Construtor: Docker
  • Docker: média-stack-example/server/Dockerfile
Clique no botão Deploy (Implementar) e depois em Show Detailed Logs (Mostrar registros detalhados) para acompanhar a implementação do seu primeiro serviço Cloud Run!
Após a conclusão da compilação, você deverá ver a URL do serviço implementado:
Captura de tela exibindo a mensagem 'Implantação concluída com êxito!' e a URL de implantação.
Abra o URL e acrescente "/emploees" ao final. Você deve ver uma array vazia porque, atualmente, não há documentos no banco de dados. Vamos distribuir a interface do usuário para que possamos adicionar algumas!

4. Distribua o aplicativo web Angular

Nosso aplicativo Angular está no diretório do cliente. Para implementá-lo, usaremos o servidor Nginx e o Docker.
Só há uma opção para usar o Firebase Hosting para o sistema deaplicativo Angular, pois você pode servir seu conteúdo diretamente a uma CDN (rede de distribuição de conteúdo).
Vamos dar uma olhada nos arquivos de configuração:
MEAN-stack-example/client/nginx.conf
1events{}
2
3http {
4
5 include /etc/nginx/mime.types;
6
7 server {
8 listen 8080;
9 server_name 0.0.0.0;
10 root /usr/share/nginx/html;
11 index index.html;
12
13 location / {
14 try_files $uri $uri/ /index.html;
15 }
16 }
17}
Na configuração do Nginx, especificamos a porta padrão-8080 e o arquivo inicial-index.html.
exemplo de MEAN/cliente/Dockerfile
1FROM node:17-slim AS build
2
3WORKDIR /usr/src/app
4COPY package.json package-lock.json ./
5
6# Install dependencies and copy them to the container
7RUN npm install
8COPY . .
9
10# Build the Angular application for production
11RUN npm run build --prod
12
13# Configure the nginx web server
14FROM nginx:1.17.1-alpine
15COPY nginx.conf /etc/nginx/nginx.conf
16COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
17
18# Run the web service on container startup.
19CMD ["nginx", "-g", "daemon off;"]
Na configuração do Docker, instalamos as dependências do Node.js e construímos o projeto. Em seguida, copiamos os arquivos criados para o container, configuramos e iniciamos o serviço Nginx.
Por fim, precisamos configurar a URL para a REST API para que nosso aplicativo cliente possa enviar solicitações para ela. Como estamos usando a URL em um único arquivo no projeto, codificaremos a URL. Alternativamente, você pode anexar a variável de ambiente ao objeto de janela e acessá-la de lá.
MEAN-stack-example/client/src/app/employee.service.ts
1@Injectable({
2 providedIn: 'root'
3})
4export class EmployeeService {
5 // Replace with the URL of your REST API
6 private url = 'https://node-express-api-vsktparjta-uc.a.run.app';
7
Estamos prontos para implantar no Cloud Run. Inicie uma nova implantação com as seguintes definições de configuração:
  • Configurações do serviço: criar um serviço
  • Nome do serviço: Angular-web-app
  • Plataforma de implantação: Cloud Run (totalmente gerenciado)
  • Autenticação: permitir invocações não autenticadas
Para o ambiente de compilação, selecione Cloud Build.
Por fim, na seção Configurações de compilação, selecione:
  • Construtor: Docker
  • Docker: média-stack-example/client/Dockerfile
Clique no botão Implementar novamente e observe os registros conforme seu aplicativo é enviado para a cloud! Quando a implantação estiver concluída, você deverá visualizar a URL do aplicativo cliente:
Captura de tela exibindo a mensagem "Implementação concluída com sucesso!' e o URL de implantação do serviço Angular.
Abra o URL e jogue com seu aplicativo!

Alternativa ao shell de comando para compilação e implantação

As etapas abordadas acima podem ser implementadas a partir do Command Shell, conforme abaixo:
Etapa 1: crie o novo diretório de projeto chamado "mean-stack-example " a partir do Editor de código ou do Cloud Shell Command ( Terminal):
mkdir mean-stack-demo cd mean-stack-demo
Etapa 2: Clone o repositório do projeto e faça as alterações necessárias na configuração e nas variáveis, da mesma forma mencionada na seção anterior.
Etapa 3: Crie sua imagem de container usando o cloud build executando o comando no shell cloud:
gcloud builds enviar --tag gcr.io/$GOOGLECLOUDPROJECT/mean-stack-demo
$GOOGLE_CLOUD_PROJECT é uma variável de ambiente que contém seu ID de projeto do Google Cloud ao ser executado no Cloud Shell.
Etapa 4: teste localmente executando: docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/mean-stack-demo e clicando em Visualização da Web, Visualização na porta 8080.
Etapa 5: execute o comando a seguir para implantar seu aplicativo em contêiner no Cloud Run:
gcloud run deploy mean-stack-demo --image gcr.io/$googleCloudProject/mean-stack-demo --platform managed --region us-central1 --allow-unauthenticated --update-env-vars DBHOST=$DB_HOST
a. –allow-unauthenticated permitirá que o serviço seja acessado sem autenticação.
b. –platform-managed significa que você está solicitando o ambiente totalmente gerenciado e não o do Kubernetes por meio do Anthos.
c. –update-env-vars espera que a cadeia de conexão do MongoDB seja passada para a variável de ambiente DBHOST. Aguarde até a seção sobre variável Env e Docker para implantação contínua para gerenciamento de Secrets e URIs de conexão.
d. Quando a implementação estiver concluída, você deverá ver a URL do serviço implementado na linha de comando.
e. Ao acessar o URL do serviço, você deve ver sua página da web no navegador e os registros na página do Cloud Logging Logs Explorer.
Registros de serviço exibidos na página do Cloud Logging Logs Explorer

5. Variáveis de ambiente e Docker para implementação contínua

Se você deseja automatizar o processo de criação e implementação em vários containers, serviços ou componentes, armazenar essas configurações no repositório não é apenas complicado, mas também uma ameaça à segurança.
  1. Para facilitar a implantação contínua entre ambientes e evitar vulnerabilidades de segurança causadas pelo vazamento de informações de credenciais, podemos optar por passar variáveis no momento da compilação/implantação/ativação.
    --update-env-vars permite definir a variável de ambiente para um valor que é passado somente no tempo de execução. Em nosso exemplo, a variável DBHOST recebe o valor de $DB_HOST. que é definido como DB_HOST = '<
    >’
    .
    Observe que símbolos não codificados no URI de conexão (nome de usuário, senha) resultarão em problemas de conexão com o MongoDB. Por exemplo, se você tiver um $ na senha ou no nome de usuário, substitua-o por %24 no URI de conexão codificado.
  2. Como alternativa, você também pode passar variáveis de configuração como variáveis de env no momento da compilação para docker-compose (docker-compose.yml). Ao passar variáveis de configuração e credenciais, evitamos o vazamento de credenciais e automatizamos a implantação de forma segura e contínua em vários ambientes, usuários e aplicativos.

Conclusão

O MongoDB Atlas com Cloud Run cria uma solução de pilha MEAN verdadeiramente sem servidor e, para aqueles que procuram criar um aplicativo com uma opção sem servidor para executar em um container sem estado, o Cloud Run é sua melhor opção.

Antes de ir...

Agora que você aprendeu a implantar um aplicativo MEAN Stack simples no Cloud Run e no MongoDB Atlas, por que não dá um passo adiante com seu caso de uso cliente-servidor favorito? Consulte os recursos abaixo para obter mais inspiração:
Se você tiver quaisquer comentários ou perguntas, fique à vontade para nos procurar online: Abirami Sukumaran e Standimira Vlaeva.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Soluções de sincronização eficientes: Cluster-to-Cluster Sync e migração em produção para o Atlas


May 10, 2024 | 5 min read
Podcast

Série de automação de banco de dados – Índices automatizados


Oct 01, 2024 | 23 min
Tutorial

Using Golang for AI


Nov 07, 2024 | 19 min read
Tutorial

Otimizando a relevância usando MongoDB Atlas e LlamaIndex


Oct 02, 2024 | 13 min read
Sumário