Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste tutorial, constróis uma aplicação web Node.js que se liga ao Azure DocumentDB. A pilha MongoDB, Express, React.js, Node.js (MERN) é um conjunto popular de tecnologias utilizadas para construir muitas aplicações web modernas. Com o Azure DocumentDB, pode criar uma nova aplicação web ou migrar uma aplicação existente usando drivers do MongoDB com os quais já está familiarizado. Neste tutorial, você:
- Configurar o ambiente
- Teste a aplicação MERN com um contentor MongoDB local
- Teste a aplicação MERN com um cluster
- Implemente a aplicação MERN no Azure App Service
Pré-requisitos
Para concluir este tutorial, você precisa dos seguintes recursos:
Uma assinatura do Azure
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita
Um cluster do Azure DocumentDB existente
- Se não tiver um cluster, crie um novo cluster
- Uma conta GitHub com direito a GitHub Codespaces
Configurar o ambiente de desenvolvimento
Está disponível um ambiente de contentor de desenvolvimento com todas as dependências necessárias para completar todos os exercícios deste projeto. Podes executar o contentor de desenvolvimento no GitHub Codespaces ou localmente usando o Visual Studio Code.
O GitHub Codespaces executa um contentor de desenvolvimento gerido pelo GitHub com Visual Studio Code for the Web como interface de utilizador. Para o ambiente de desenvolvimento mais direto, use o GitHub Codespaces para ter as ferramentas e dependências de desenvolvimento corretas pré-instaladas para completar este módulo de formação.
Importante
Todas as contas do GitHub podem usar Codespaces por até 60 horas gratuitas por mês com duas instâncias principais.
Inicie o processo para criar um novo Codespace do GitHub na ramificação
maindo repositório GitHubazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app.Na página Criar espaço de código, revise as definições de configuração do espaço de código e selecione Criar novo espaço de código
Captura de ecrã do ecrã de confirmação antes de criar um novo espaço de código.
Aguarde até que o codespace inicie. Este processo de arranque pode demorar alguns minutos.
Abra um novo terminal no espaço de códigos.
Consulta as versões das ferramentas que usas neste tutorial.
docker --version node --version npm --version az --versionObservação
Este tutorial requer as seguintes versões de cada ferramenta, que estão pré-instaladas no seu ambiente:
Tool Versão Docker ≥ 20.10.0 Node.js ≥ 18.0150 npm ≥ 9.5.0 Azure CLI (Interface de Linha de Comando da Azure) ≥ 2.46.0 Fecha o terminal.
Os passos restantes deste tutorial decorrem no contexto deste contentor de desenvolvimento.
Teste a API da aplicação MERN com o contentor MongoDB
Comece por correr a API da aplicação de exemplo com o contentor local do MongoDB para validar que a aplicação funciona.
Executa um contentor MongoDB usando Docker e publica a porta típica do MongoDB (
27017).docker pull mongo:6.0 docker run --detach --publish 27017:27017 mongo:6.0Na barra lateral, selecione a extensão MongoDB.
Adicione uma nova ligação à extensão do MongoDB usando a cadeia
mongodb://localhostde ligação .
Quando a ligação for bem-sucedida, abra o ficheiro de playground data/products.mongodb.
Selecione o ícone Executar tudo para executar o script.
A execução no ambiente de testes deve resultar em uma lista de documentos na coleção local do MongoDB. Aqui está um exemplo truncado do resultado.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Observação
Os identificadores de objeto (
_id) são gerados aleatoriamente e diferem deste exemplo truncado.No servidor/ diretório, cria um novo ficheiro .env .
No ficheiro server/.env , adicione uma variável de ambiente para este valor:
Variável de Ambiente Valor CONNECTION_STRINGA cadeia de ligação ao cluster Azure DocumentDB. Por agora, use mongodb://localhost:27017?directConnection=true.CONNECTION_STRING=mongodb://localhost:27017?directConnection=trueMuda o contexto do terminal para o servidor/ pasta.
cd serverInstale as dependências usando o npm.
npm installIniciar a aplicação Node.js e Express.
npm startA API abre automaticamente uma janela do navegador para verificar se devolve um conjunto de documentos de produto.
Fecha o separador/janela extra do navegador.
Fecha o terminal.
Teste a aplicação MERN com o cluster Azure DocumentDB
Agora, vamos validar que a aplicação funciona perfeitamente com o Azure DocumentDB. Para esta tarefa, preenche o cluster pré-existente com dados seed usando o shell MongoDB e depois atualiza a cadeia de ligação da API.
Entre no portal do Azure (https://portal.azure.com).
Navegue até à página existente do cluster Azure DocumentDB.
Na página do cluster Azure DocumentDB, selecione a opção de navegação cadeias de conexão.
Registe o valor do campo string de conexão.
Importante
A cadeia de ligação no portal não inclui os valores de nome de utilizador e palavra-passe. Deve substituir os marcadores de posição
<user>e<password>pelas credenciais que utilizou quando originalmente criou o cluster.Abra um novo terminal dentro do seu ambiente integrado de desenvolvimento (IDE).
Inicia o MongoDB Shell usando o
mongoshcomando e a string de ligação que gravaste anteriormente. Certifica-te de que substituis os<user>marcadores de lugar e<password>pelas credenciais que usaste quando criaste originalmente o cluster.mongosh "<mongodb-cluster-connection-string>"Observação
Pode ser necessário codificar valores específicos para a cadeia de ligação. Neste exemplo, o nome do cluster é
msdocs-azure-documentdb-tutorial, o nome de utilizador éclusteradmin, e a palavra-passe éP@ssw.rd. Na palavra-passe, o@carácter tem de ser codificado usando%40. Aqui é fornecida uma cadeia de ligação de exemplo com a codificação correta da palavra-passe.CONNECTION_STRING=mongodb+srv://clusteradmin:P%40ssw.rd@msdocs-azure-documentdb-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000Dentro do shell, execute os seguintes comandos para criar a sua base de dados, criar a sua coleção e semear dados iniciais.
use('cosmicworks'); db.products.drop(); db.products.insertMany([ { name: "Confira Watch", category: "watches", price: 105.00 }, { name: "Diannis Watch", category: "watches", price: 98.00, sale: true }, { name: "Sterse Gloves", category: "gloves", price: 42.00 }, { name: "Peache Sunglasses", category: "eyewear", price: 32.00, sale: false, sizes: [ "S", "M", "L" ] }, { name: "Icento Pack", category: "bags", price: 58.00 }, { name: "Iroowl Bracelet", category: "watches", price: 66.00 }, { name: "Glaark Bag", category: "bags", price: 56.00, sale: true }, { name: "Windry Mittens", category: "gloves", price: 35.00 }, { name: "Tuvila Hat", category: "hats", price: 120.00 }, { name: "Klinto Hat", category: "hats", subcategory: "hats-beanies", price: 65.00 } ]); db.products.find({});Os comandos devem resultar numa lista de documentos na coleção local do MongoDB. Aqui está um exemplo truncado da saída.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Observação
Os identificadores de objeto (
_id) são gerados aleatoriamente e diferem deste exemplo truncado.Saia do shell do MongoDB.
exitNo diretório cliente/ , crie um novo ficheiro .env .
No ficheiro cliente/.env , adicione uma variável de ambiente para este valor:
Variável de Ambiente Valor CONNECTION_STRINGA cadeia de ligação ao cluster Azure DocumentDB. Usa a mesma corda de ligação que usaste com a concha do mongo. CONNECTION_STRING=<your-connection-string>Valide que a aplicação está a usar o serviço de base de dados alterando o contexto do terminal para o servidor/ pasta, instalando dependências a partir do Node Package Manager (npm) e depois iniciando a aplicação.
cd server npm install npm startA API abre automaticamente uma janela do navegador para verificar se devolve um conjunto de documentos de produto.
Fecha o separador/janela extra do navegador. Depois, fecha o terminal.
Implemente a aplicação MERN no Azure App Service
Prove que a aplicação funciona de ponta a ponta implementando o serviço e o cliente no Azure App Service. Use segredos nas aplicações web para armazenar variáveis de ambiente com credenciais e endpoints da API.
No seu ambiente integrado de desenvolvimento (IDE), abra um novo terminal.
Crie uma variável shell para o nome do grupo de recursos pré-existente chamada resourceGroupName.
# Variable for resource group name resourceGroupName="<existing-resource-group>"Crie variáveis de shell para as duas aplicações web chamadas serverAppName e clientAppName.
# Variable for randomnly generated suffix let suffix=$RANDOM*$RANDOM # Variable for web app names with a randomnly generated suffix serverAppName="server-app-$suffix" clientAppName="client-app-$suffix"Se ainda não o fizeste, inicia sessão no Azure CLI usando o
az login --use-device-codecomando.Altera o diretório de trabalho atual para o caminho server/.
cd serverCrie uma nova aplicação web para o componente servidor da aplicação MERN com
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $serverAppName \ --sku F1 \ --runtime "NODE|18-lts"Crie uma nova definição de cadeia de ligação para a aplicação web do servidor denominada
CONNECTION_STRINGcomaz webapp config connection-string set. Use o mesmo valor para a string de ligação que usou com o shell do MongoDB e o ficheiro .env anteriormente neste tutorial.az webapp config connection-string set \ --resource-group $resourceGroupName \ --name $serverAppName \ --connection-string-type custom \ --settings "CONNECTION_STRING=<mongodb-connection-string>"Obtenha o URI da aplicação
az webapp showweb do servidor e guarde-o numa variável shell chamada d serverUri.serverUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $serverAppName \ --query hostNames[0] \ --output tsv)Use o
open-clipacote e o comando do NuGet comnpxpara abrir uma janela do navegador usando o URI da aplicação web do servidor. Valide que a aplicação do servidor está a devolver os dados do array JSON a partir do cluster.npx open-cli "https://$serverUri/products" --yesSugestão
Por vezes, as implementações podem terminar de forma assíncrona. Se não estiver a ver o que espera, espere mais um minuto e atualize a janela do navegador.
Altere o diretório de trabalho para o caminho cliente/.
cd ../clientCrie uma nova aplicação web para o componente cliente da aplicação MERN com
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $clientAppName \ --sku F1 \ --runtime "NODE|18-lts"Crie uma nova configuração de aplicação para a aplicação web cliente chamada
REACT_APP_API_ENDPOINTcomaz webapp config appsettings set. Utilize o endpoint da API do servidor armazenado na variável do shell serverUri.az webapp config appsettings set \ --resource-group $resourceGroupName \ --name $clientAppName \ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"Obtenha o URI da aplicação web de cliente com
az webapp showe guarde-o numa variável shell chamada clientUri.clientUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $clientAppName \ --query hostNames[0] \ --output tsv)Use o
open-clipacote e o comando do NuGet comnpxpara abrir uma janela do navegador usando o URI da aplicação web do cliente. Valide que a aplicação cliente está a renderizar dados da API da aplicação servidora.npx open-cli "https://$clientUri" --yesSugestão
Por vezes, as implementações podem terminar de forma assíncrona. Se não estiver a ver o que espera, espere mais um minuto e atualize a janela do navegador.
Fecha o terminal.
Limpeza de recursos
Quando estiver a trabalhar na sua própria subscrição, ao terminar um projeto, é uma boa ideia remover os recursos de que já não necessita. Os recursos deixados em funcionamento podem custar-lhe dinheiro. Você pode excluir recursos individualmente ou excluir o grupo de recursos para excluir todo o conjunto de recursos.
Para eliminar todo o grupo de recursos, use
az group delete.az group delete \ --name $resourceGroupName \ --yesValide que o grupo de recursos foi eliminado usando
az group list.az group list
Limpar o ambiente de desenvolvimento
Também pode querer limpar o seu ambiente de desenvolvimento ou devolvê-lo ao seu estado habitual.
Excluir o ambiente do GitHub Codespaces garante que possas maximizar a quantidade de horas gratuitas por núcleo a que tens direito na tua conta.
Entre no painel do GitHub Codespaces (https://github.com/codespaces).
Localize o seu contentor de desenvolvimento atualmente em execução, proveniente do
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-apprepositório do GitHub.
Abra o menu de contexto do espaço de código e selecione Excluir.
Captura de ecrã do menu de contexto para um único espaço de código com a opção de eliminação realçada.
Captura de ecrã da opção de menu para abrir um novo terminal.