Implementar uma aplicação Web Node.js + MongoDB no Azure
O Serviço de Aplicações do Azure fornece um serviço de alojamento Na Web altamente dimensionável e com correção automática com o sistema operativo Linux. Este tutorial mostra como criar uma aplicação de Node.js segura no Serviço de Aplicações do Azure que está ligada a uma base de dados do Azure Cosmos DB para MongoDB . Quando tiver terminado, terá uma aplicação Express.js em execução no Serviço de Aplicações do Azure no Linux.
Este artigo pressupõe que já está familiarizado com Node.js desenvolvimento e tem o Node e o MongoDB instalados localmente. Também precisará de uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
Aplicação de exemplo
Para acompanhar este tutorial, clone ou transfira a aplicação de exemplo a partir do repositório https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
git clone https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.git
Se quiser executar a aplicação localmente, faça o seguinte:
- Instale as dependências do pacote ao executar
npm install
. - Copie o
.env.sample
ficheiro para.env
e preencha o valor DATABASE_URL com o URL do MongoDB (por exemplo , mongodb://localhost:27017/). - Inicie a aplicação com
npm start
. - Para ver a aplicação, navegue até
http://localhost:3000
.
1. Criar o Serviço de Aplicações e o Azure Cosmos DB
Neste passo, vai criar os recursos do Azure. Os passos utilizados neste tutorial criam um conjunto de recursos seguros por predefinição que incluem o Serviço de Aplicações e o Azure Cosmos DB para MongoDB. Para o processo de criação, irá especificar:
- O Nome da aplicação Web. É o nome utilizado como parte do nome DNS da sua aplicação Web sob a forma de
https://<app-name>.azurewebsites.net
. - A Região para executar a aplicação fisicamente no mundo.
- A pilha de Runtime para a aplicação. É onde seleciona a versão do Node a utilizar para a sua aplicação.
- O Plano de alojamento da aplicação. É o escalão de preço que inclui o conjunto de funcionalidades e a capacidade de dimensionamento da sua aplicação.
- O Grupo de Recursos da aplicação. Um grupo de recursos permite-lhe agrupar (num contentor lógico) todos os recursos do Azure necessários para a aplicação.
Inicie sessão no portal do Azure e siga estes passos para criar os recursos do Serviço de Aplicações do Azure.
Passo 1: No portal do Azure:
- Introduza "base de dados de aplicações Web" na barra de pesquisa na parte superior do portal do Azure.
- Selecione o item com o nome Aplicação Web + Base de Dados no cabeçalho Marketplace . Também pode navegar diretamente para o assistente de criação .
Passo 2: Na página Criar Aplicação Web + Base de Dados , preencha o formulário da seguinte forma.
- Grupo de Recursos → Selecione Criar novo e utilize um nome de msdocs-expressjs-mongodb-tutorial.
- Região → qualquer região do Azure perto de si.
- Nome → msdocs-expressjs-mongodb-XYZ em que XYZ é qualquer um dos três carateres aleatórios. Este nome tem de ser exclusivo em todo o Azure.
- Pilha de runtime → Node 16 LTS.
- Plano de alojamento → Básico. Quando estiver pronto, pode aumentar verticalmente para um escalão de preço de produção mais tarde.
- O Azure Cosmos DB para MongoDB está selecionado por predefinição como motor de base de dados. O Azure Cosmos DB é uma base de dados nativa da cloud que oferece uma API compatível com MongoDB a 100%. Tenha em atenção o nome da base de dados que é gerado automaticamente (<app-name-database>). Precisará dela mais tarde.
- Selecione Rever + criar.
- Após a conclusão da validação, selecione Criar.
Passo 3: A implementação demora alguns minutos a ser concluída. Quando a implementação estiver concluída, selecione o botão Ir para recurso . É direcionado diretamente para a aplicação do Serviço de Aplicações, mas são criados os seguintes recursos:
- Grupo de recursos → O contentor para todos os recursos criados.
- Plano do Serviço de Aplicações → Define os recursos de computação do Serviço de Aplicações. É criado um plano do Linux no escalão Básico .
- Serviço de Aplicações → Representa a sua aplicação e é executada no plano do Serviço de Aplicações.
- A rede virtual → Integrada com a aplicação do Serviço de Aplicações e isola o tráfego de rede de back-end.
- Ponto final privado → ponto final do Access para o recurso de base de dados na rede virtual.
- Interface de rede → Representa um endereço IP privado para o ponto final privado.
- O Azure Cosmos DB para MongoDB → Acessível apenas a partir do ponto final privado. É criada uma base de dados e um utilizador no servidor.
- Zona DNS privada → Ativa a resolução de DNS do servidor do Azure Cosmos DB na rede virtual.
2. Configurar a conectividade da base de dados
O assistente de criação já gerou o URI do MongoDB para si, mas a sua aplicação precisa de uma DATABASE_URL
variável e de uma DATABASE_NAME
variável. Neste passo, vai criar definições de aplicação com o formato de que a sua aplicação precisa.
Passo 1: Na página Serviço de Aplicações, no menu esquerdo, selecione Configuração.
Passo 2: No separador Definições da aplicação da página Configuração , crie uma DATABASE_NAME
definição:
- Selecione Nova definição da aplicação.
- No campo Nome , introduza DATABASE_NAME.
- No campo Valor , introduza o nome da base de dados gerada automaticamente a partir do assistente de criação, que se assemelha a msdocs-expressjs-mongodb-XYZ-database.
- Selecione OK.
Passo 3:
- Desloque-se para a parte inferior da página e selecione a cadeia de ligação MONGODB_URI. Foi gerado pelo assistente de criação.
- No campo Valor , selecione o botão Copiar e cole o valor num ficheiro de texto para o passo seguinte. Está no formato URI da cadeia de ligação do MongoDB.
- Selecione Cancelar.
Passo 4:
- Com os mesmos passos no Passo 2, crie uma definição de aplicação com o nome DATABASE_URL e defina o valor para o que copiou da
MONGODB_URI
cadeia de ligação (ou seja,mongodb://...
). - Na barra de menus na parte superior, selecione Guardar.
- Quando lhe for pedido, selecione Continuar.
3. Implementar código de exemplo
Neste passo, irá configurar a implementação do GitHub com o GitHub Actions. É apenas uma das muitas formas de implementar no Serviço de Aplicações, mas também uma excelente forma de ter uma integração contínua no seu processo de implementação. Por predefinição, todos os git push
utilizadores do seu repositório do GitHub iniciarão a ação de compilação e implementação.
Passo 1: Numa nova janela do browser:
- Inicie sessão na sua conta do GitHub.
- Navegue para https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
- Selecione Fork.
- Selecione Criar fork.
Passo 2: Na página do GitHub, abra o Visual Studio Code no browser ao premir a .
tecla .
Passo 3: No Visual Studio Code no browser, abra a configuração/connection.js no explorador.
getConnectionInfo
Na função, veja que as definições da aplicação que criou anteriormente para a ligação mongoDB são utilizadas (DATABASE_URL
e DATABASE_NAME
).
Passo 4: Novamente na página Serviço de Aplicações, no menu esquerdo, selecione Centro de Implementação.
Passo 5: Na página Centro de Implementação:
- Em Origem, selecione GitHub. Por predefinição, o GitHub Actions está selecionado como o fornecedor de compilação.
- Inicie sessão na sua conta do GitHub e siga o pedido para autorizar o Azure.
- Na Organização, selecione a sua conta.
- No Repositório, selecione msdocs-nodejs-mongodb-azure-sample-app.
- Em Ramo, selecione principal.
- No menu superior, selecione Guardar. O Serviço de Aplicações consolida um ficheiro de fluxo de trabalho no repositório do GitHub escolhido, no
.github/workflows
diretório.
Passo 6: Na página Centro de Implementação:
- Selecionar Registos. Já foi iniciada uma execução de implementação.
- No item de registo da execução da implementação, selecione Compilar/Implementar Registos.
Passo 7: É levado para o seu repositório do GitHub e vê que a ação do GitHub está em execução. O ficheiro de fluxo de trabalho define duas fases separadas, compilar e implementar. Aguarde pela execução do GitHub para mostrar o estado Concluído. Demora cerca de 15 minutos.
4. Navegue para a aplicação
Passo 1: Na página Serviço de Aplicações:
- No menu esquerdo, selecione Descrição Geral.
- Selecione o URL da sua aplicação. Também pode navegar diretamente para
https://<app-name>.azurewebsites.net
.
Passo 2: Adicione algumas tarefas à lista. Parabéns, está a executar uma aplicação de Node.js baseada em dados segura no Serviço de Aplicações do Azure.
5. Transmitir registos de diagnóstico
O Serviço de Aplicações do Azure captura todas as mensagens registadas na consola do para o ajudar a diagnosticar problemas com a sua aplicação. A aplicação de exemplo produz mensagens de registo da consola em cada um dos respetivos pontos finais para demonstrar esta capacidade. Por exemplo, o get
ponto final produz uma mensagem sobre o número de tarefas obtidas a partir da base de dados e é apresentada uma mensagem de erro se algo correr mal.
router.get('/', function(req, res, next) {
Task.find()
.then((tasks) => {
const currentTasks = tasks.filter(task => !task.completed);
const completedTasks = tasks.filter(task => task.completed === true);
console.log(`Total tasks: ${tasks.length} Current tasks: ${currentTasks.length} Completed tasks: ${completedTasks.length}`)
res.render('index', { currentTasks: currentTasks, completedTasks: completedTasks });
})
.catch((err) => {
console.log(err);
res.send('Sorry! Something went wrong.');
});
});
Passo 1: Na página Serviço de Aplicações:
- No menu esquerdo, selecione Registos do Serviço de Aplicações.
- Em Registo de aplicações, selecione Sistema de Ficheiros.
Passo 2: No menu esquerdo, selecione Fluxo de registos. Verá os registos da sua aplicação, incluindo registos e registos da plataforma a partir do contentor.
6. Inspecionar ficheiros implementados com o Kudu
O Serviço de Aplicações do Azure fornece uma consola de diagnóstico baseada na Web com o nome Kudu que lhe permite examinar o ambiente de alojamento do servidor para a sua aplicação Web. Com o Kudu, pode ver os ficheiros implementados no Azure, rever o histórico de implementações da aplicação e até abrir uma sessão SSH no ambiente de alojamento.
Passo 1: Na página Serviço de Aplicações:
- No menu esquerdo, selecione Ferramentas Avançadas.
- Selecione Ir. Também pode navegar diretamente para
https://<app-name>.scm.azurewebsites.net
.
Passo 2: Na página Kudu, selecione Implementações.
Se tiver implementado código no Serviço de Aplicações com o Git ou a implementação zip, verá um histórico de implementações da sua aplicação Web.
Passo 3: Go back para a home page do Kudu e selecione Site wwwroot.
Pode ver a estrutura da pasta implementada e clicar para procurar e ver os ficheiros.
7. Limpar recursos
Quando terminar, pode eliminar todos os recursos da sua subscrição do Azure ao eliminar o grupo de recursos.
Passo 1: Na barra de pesquisa na parte superior do portal do Azure:
- Introduza o nome do grupo de recursos.
- Selecione o grupo de recursos.
Passo 2: Na página do grupo de recursos, selecione Eliminar grupo de recursos.
Passo 3:
- Introduza o nome do grupo de recursos para confirmar a eliminação.
- Selecione Eliminar.
Perguntas mais frequentes
- Quanto custa esta configuração?
- Como posso ligar ao servidor do Azure Cosmos DB protegido por trás da rede virtual com outras ferramentas?
- Como funciona o desenvolvimento de aplicações locais com o GitHub Actions?
- Porque é que a implementação do GitHub Actions é tão lenta?
Quanto custa esta configuração?
Os preços dos recursos de criação são os seguintes:
- O plano do Serviço de Aplicações é criado no escalão Básico e pode ser aumentado ou reduzido verticalmente. Veja Preços do Serviço de Aplicações.
- O servidor do Azure Cosmos DB é criado numa única região e pode ser distribuído por outras regiões. Veja Preços do Azure Cosmos DB.
- A rede virtual não incorre num custo, a menos que configure funcionalidades adicionais, como o peering. Veja Preços da Rede Virtual do Azure.
- A zona DNS privada incorre numa pequena carga. Veja Preços do DNS do Azure.
Como posso ligar ao servidor do Azure Cosmos DB protegido por trás da rede virtual com outras ferramentas?
- Para obter acesso básico a partir de uma ferramenta de linha de comandos, pode executar
mongosh
a partir do terminal SSH da aplicação. O contentor da aplicação não é fornecido commongosh
, pelo que tem de instalá-lo manualmente. Lembre-se de que o cliente instalado não persiste nos reinícios da aplicação. - Para ligar a partir de um cliente GUI do MongoDB, o computador tem de estar na rede virtual. Por exemplo, pode ser uma VM do Azure ligada a uma das sub-redes ou uma máquina numa rede no local que tenha uma ligação VPN site a site com a rede virtual do Azure.
- Para ligar a partir da shell do MongoDB a partir da página de gestão do Azure Cosmos DB no portal, o computador também tem de estar na rede virtual. Em vez disso, pode abrir a firewall do servidor do Azure Cosmos DB para o endereço IP do computador local, mas aumenta a superfície de ataque da configuração.
Como funciona o desenvolvimento de aplicações locais com o GitHub Actions?
Veja o ficheiro de fluxo de trabalho gerado automaticamente a partir do Serviço de Aplicações como exemplo, cada git push
um inicia uma nova compilação e execução de implementação. A partir de um clone local do repositório do GitHub, faz com que as atualizações pretendidas o enviem para o GitHub. Por exemplo:
git add .
git commit -m "<some-message>"
git push origin main
Por que motivo a implementação do GitHub Actions é tão lenta?
O ficheiro de fluxo de trabalho gerado automaticamente a partir do Serviço de Aplicações define build-then-deploy, execução de dois trabalhos. Uma vez que cada tarefa é executada no seu próprio ambiente limpo, o ficheiro de fluxo de trabalho garante que a deploy
tarefa tem acesso aos ficheiros a build
partir da tarefa:
- No final da
build
tarefa, carregue ficheiros como artefactos. - No início da
deploy
tarefa, transfira os artefactos.
A maior parte do tempo despendido pelo processo de dois trabalhos é gasto a carregar e transferir artefactos. Se quiser, pode simplificar o ficheiro de fluxo de trabalho ao combinar as duas tarefas numa só, o que elimina a necessidade dos passos de carregamento e transferência.