Wdrażanie aplikacji internetowej Node.js i MongoDB na platformie Azure

Azure App Service zapewnia wysoce skalowalną, samonastosowywną usługę hostingu internetowego przy użyciu systemu operacyjnego Linux. W tym samouczku pokazano, jak utworzyć bezpieczną aplikację Node.js w usłudze Azure App Service połączonej z bazą danych Usługi Azure Cosmos DB dla bazy danych MongoDB. Po zakończeniu będziesz mieć aplikację Express.js działającą w Azure App Service w systemie Linux.

Diagram przedstawiający sposób wdrażania aplikacji Express.js w Azure App Service, a dane bazy danych MongoDB będą hostowane w usłudze Azure Cosmos DB.

W tym artykule założono, że wiesz już ,Node.js programowania i masz zainstalowany lokalnie węzeł i bazę danych MongoDB. Będziesz również potrzebować konta platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.

Przykładowa aplikacja

Aby skorzystać z tego samouczka, sklonuj lub pobierz przykładową aplikację z repozytorium 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

Jeśli chcesz uruchomić aplikację lokalnie, wykonaj następujące czynności:

  • Zainstaluj zależności pakietów, uruchamiając polecenie npm install.
  • .env.sample Skopiuj plik do .env i wypełnij wartość DATABASE_URL adresem URL bazy danych MongoDB (na przykład mongodb://localhost:27017/).
  • Uruchom aplikację przy użyciu polecenia npm start.
  • Aby wyświetlić aplikację, przejdź do strony http://localhost:3000.

1. Tworzenie App Service i usługi Azure Cosmos DB

W tym kroku utworzysz zasoby platformy Azure. Kroki używane w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących App Service i usługę Azure Cosmos DB dla bazy danych MongoDB. W przypadku procesu tworzenia określisz następujące elementy:

  • Nazwa aplikacji internetowej. Jest to nazwa używana jako część nazwy DNS aplikacji internetowej w postaci https://<app-name>.azurewebsites.net.
  • Region do fizycznego uruchamiania aplikacji na świecie.
  • Stos środowiska uruchomieniowego dla aplikacji. W tym miejscu wybierasz wersję środowiska Node, która ma być używana dla aplikacji.
  • Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
  • Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.

Zaloguj się do Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby Azure App Service.

Krok 1: W Azure Portal:

  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części Azure Portal.
  2. Wybierz element z etykietą Web App + Database pod nagłówkiem Marketplace . Możesz również przejść bezpośrednio do kreatora tworzenia .

Zrzut ekranu przedstawiający sposób użycia pola wyszukiwania na górnym pasku narzędzi w celu znalezienia kreatora tworzenia aplikacji internetowej i bazy danych.

Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.

  1. Grupa zasobów → wybierz pozycję Utwórz nową i użyj nazwy msdocs-expressjs-mongodb-tutorial.
  2. Region → dowolny region świadczenia usługi Azure w pobliżu.
  3. Nazwamsdocs-expressjs-mongodb-XYZ , gdzie XYZ to dowolne trzy losowe znaki. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
  4. Stos środowiska uruchomieniowegoNode 16 LTS.
  5. Plan hostinguPodstawowa. Gdy wszystko będzie gotowe, możesz później przeprowadzić skalowanie w górę do produkcyjnej warstwy cenowej.
  6. Usługa Azure Cosmos DB dla bazy danych MongoDB jest domyślnie wybierana jako aparat bazy danych. Usługa Azure Cosmos DB to natywna dla chmury baza danych oferująca 100% interfejs API zgodny z bazą danych MongoDB. Zanotuj nazwę bazy danych, która jest generowana dla Ciebie (<app-name-database>). Będzie on potrzebny później.
  7. Wybierz pozycję Przejrzyj i utwórz.
  8. Po zakończeniu walidacji wybierz pozycję Utwórz.

Zrzut ekranu przedstawiający sposób konfigurowania nowej aplikacji i bazy danych w kreatorze aplikacji internetowej i bazy danych.

Krok 3. Wdrożenie trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Następuje przekierowanie bezpośrednio do aplikacji App Service, ale tworzone są następujące zasoby:

  • Grupa zasobów → Kontener dla wszystkich utworzonych zasobów.
  • App Service plan → Definiuje zasoby obliczeniowe dla App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa .
  • App Service → reprezentuje aplikację i działa w planie App Service.
  • Sieć wirtualna → zintegrowana z aplikacją App Service izoluje ruch sieciowy zaplecza.
  • Prywatny punkt końcowy → punkt końcowy programu Access dla zasobu bazy danych w sieci wirtualnej.
  • Interfejs sieciowy → reprezentuje prywatny adres IP prywatnego punktu końcowego.
  • Usługa Azure Cosmos DB dla bazy danych MongoDB → dostępna tylko zza prywatnego punktu końcowego. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Prywatna strefa DNS strefy → umożliwia rozpoznawanie nazw DNS serwera usługi Azure Cosmos DB w sieci wirtualnej.

Zrzut ekranu przedstawiający ukończony proces wdrażania.

2. Konfigurowanie łączności z bazą danych

Kreator tworzenia wygenerował już identyfikator URI bazy danych MongoDB, ale aplikacja wymaga DATABASE_URL zmiennej i zmiennej DATABASE_NAME . W tym kroku utworzysz ustawienia aplikacji z formatem wymaganym przez aplikację.

Krok 1: Na stronie App Service w menu po lewej stronie wybierz pozycję Konfiguracja.

Zrzut ekranu przedstawiający sposób otwierania strony konfiguracji w App Service.

Krok 2. Na karcie Ustawienia aplikacji na stronie Konfiguracja utwórz DATABASE_NAME ustawienie:

  1. Wybierz pozycję Nowe ustawienie aplikacji.
  2. W polu Nazwa wprowadź DATABASE_NAME.
  3. W polu Wartość wprowadź automatycznie wygenerowaną nazwę bazy danych z kreatora tworzenia, który wygląda następująco: msdocs-expressjs-mongodb-XYZ-database.
  4. Wybierz przycisk OK.

Zrzut ekranu przedstawiający sposób wyświetlania automatycznie wygenerowanych parametrów połączenia.

Krok 3.

  1. Przewiń do dołu strony i wybierz parametry połączenia MONGODB_URI. Został on wygenerowany przez kreatora tworzenia.
  2. W polu Wartość wybierz przycisk Kopiuj i wklej wartość w pliku tekstowym na potrzeby następnego kroku. Jest on w formacie identyfikatora URI parametrów połączenia bazy danych MongoDB.
  3. Wybierz pozycję Anuluj.

Zrzut ekranu przedstawiający sposób tworzenia ustawienia aplikacji.

Krok 4.

  1. Korzystając z tych samych kroków w kroku 2, utwórz ustawienie aplikacji o nazwie DATABASE_URL i ustaw wartość na wartość skopiowaną z MONGODB_URI parametrów połączenia (tj. mongodb://...).
  2. Na pasku menu u góry wybierz pozycję Zapisz.
  3. Po wyświetleniu monitu wybierz pozycję Kontynuuj.

Zrzut ekranu przedstawiający sposób zapisywania ustawień na stronie konfiguracji.

3. Wdrażanie przykładowego kodu

W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push z repozytorium GitHub rozpocznie akcję kompilacji i wdrożenia.

Krok 1: W nowym oknie przeglądarki:

  1. Zaloguj się do konta usługi GitHub.
  2. Przejdź do adresu https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
  3. Wybierz pozycję Rozwidlenie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Zrzut ekranu przedstawiający sposób tworzenia rozwidlenia przykładowego repozytorium GitHub.

Krok 2. Na stronie GitHub otwórz Visual Studio Code w przeglądarce, naciskając . klawisz .

Zrzut ekranu przedstawiający sposób otwierania środowiska przeglądarki Visual Studio Code w usłudze GitHub.

Krok 3. W Visual Studio Code w przeglądarce otwórz plik config/connection.js w eksploratorze. getConnectionInfo W funkcji sprawdź, czy ustawienia aplikacji utworzone wcześniej dla połączenia z bazą danych MongoDB są używane (DATABASE_URL i DATABASE_NAME).

Zrzut ekranu przedstawiający Visual Studio Code w przeglądarce i otwarty plik.

Krok 4. Po powrocie do strony App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania.

Zrzut ekranu przedstawiający sposób otwierania centrum wdrażania w App Service.

Krok 5. Na stronie Centrum wdrażania:

  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie GitHub Actions jest wybierana jako dostawca kompilacji.
  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
  3. W obszarze Organizacja wybierz swoje konto.
  4. W obszarze Repozytorium wybierz pozycję msdocs-nodejs-mongodb-azure-sample-app.
  5. W obszarze Gałąź wybierz pozycję main.
  6. W górnym menu wybierz pozycję Zapisz. App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w .github/workflows katalogu .

Zrzut ekranu przedstawiający sposób konfigurowania ciągłej integracji/ciągłego wdrażania przy użyciu GitHub Actions.

Krok 6. Na stronie Centrum wdrażania:

  1. Wybierz pozycję Dzienniki. Przebieg wdrożenia został już uruchomiony.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.

Zrzut ekranu przedstawiający sposób otwierania dzienników wdrażania w centrum wdrażania.

Krok 7: Zostaniesz przeniesiony do repozytorium GitHub i zobaczysz, że akcja usługi GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Zaczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Ukończono. Trwa to około 15 minut.

Zrzut ekranu przedstawiający przebieg usługi GitHub w toku.

4. Przejdź do aplikacji

Krok 1: Na stronie App Service:

  1. W menu po lewej stronie wybierz pozycję Przegląd.
  2. Wybierz adres URL aplikacji. Możesz również przejść bezpośrednio do adresu https://<app-name>.azurewebsites.net.

Zrzut ekranu przedstawiający sposób uruchamiania App Service z Azure Portal.

Krok 2. Dodaj kilka zadań do listy. Gratulacje, korzystasz z bezpiecznej aplikacji Node.js opartej na danych w Azure App Service.

Zrzut ekranu przedstawiający aplikację Express.js działającą w App Service.

5. Przesyłanie strumieniowe dzienników diagnostycznych

Azure App Service przechwytuje wszystkie komunikaty zarejestrowane w konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja generuje komunikaty dziennika konsoli w każdym z jego punktów końcowych, aby zademonstrować tę możliwość. Na przykład get punkt końcowy zwraca komunikat o liczbie zadań pobranych z bazy danych i pojawia się komunikat o błędzie, jeśli coś pójdzie nie tak.

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.');
    });
});

Krok 1: Na stronie App Service:

  1. W menu po lewej stronie wybierz pozycję App Service dzienniki.
  2. W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.

Zrzut ekranu przedstawiający sposób włączania dzienników natywnych w App Service w Azure Portal.

Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.

Zrzut ekranu przedstawiający sposób wyświetlania strumienia dziennika w Azure Portal.

6. Sprawdzanie wdrożonych plików przy użyciu narzędzia Kudu

Azure App Service udostępnia internetową konsolę diagnostyki o nazwie Kudu, która umożliwia badanie środowiska hostingu serwera dla aplikacji internetowej. Za pomocą narzędzia Kudu można wyświetlać pliki wdrożone na platformie Azure, przeglądać historię wdrażania aplikacji, a nawet otwierać sesję SSH w środowisku hostingu.

Krok 1: Na stronie App Service:

  1. W menu po lewej stronie wybierz pozycję Narzędzia zaawansowane.
  2. Wybierz pozycję Przejdź. Możesz również przejść bezpośrednio do adresu https://<app-name>.scm.azurewebsites.net.

Zrzut ekranu przedstawiający sposób przechodzenia do strony App Service Kudu.

Krok 2. Na stronie Kudu wybierz pozycję Wdrożenia.

Zrzut ekranu przedstawiający stronę główną w aplikacji Kudu SCM z różnymi informacjami dostępnymi w środowisku hostingu.

Jeśli kod został wdrożony w celu App Service przy użyciu narzędzia Git lub wdrożenia zip, zobaczysz historię wdrożeń aplikacji internetowej.

Zrzut ekranu przedstawiający historię wdrażania aplikacji App Service w formacie JSON.

Krok 3. Wstecz do strony głównej Kudu i wybierz pozycję Witryna wwwroot.

Zrzut ekranu przedstawiający wybraną witrynę wwwroot.

Możesz wyświetlić wdrożona strukturę folderów i kliknąć, aby przeglądać i wyświetlać pliki.

Zrzut ekranu przedstawiający wdrożone pliki w katalogu wwwroot.

7. Czyszczenie zasobów

Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.

Krok 1: Na pasku wyszukiwania w górnej części Azure Portal:

  1. Wpisz nazwę grupy zasobów.
  2. Wybierz odpowiednią grupę zasobów.

Zrzut ekranu przedstawiający wyszukiwanie i przechodzenie do grupy zasobów w Azure Portal.

Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.

Zrzut ekranu przedstawiający lokalizację przycisku Usuń grupę zasobów w Azure Portal.

Krok 3.

  1. Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
  2. Wybierz pozycję Usuń.

Zrzut ekranu przedstawiający okno dialogowe potwierdzenia dotyczące usuwania grupy zasobów w Azure Portal:

Często zadawane pytania

Ile kosztuje ta konfiguracja?

Cennik zasobów tworzenia jest następujący:

Jak mogę połączyć się z serwerem usługi Azure Cosmos DB zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, możesz uruchomić polecenie mongosh z poziomu terminalu SSH aplikacji. Kontener aplikacji nie jest dołączony do mongoshelementu , dlatego należy zainstalować go ręcznie. Należy pamiętać, że zainstalowany klient nie jest utrwalany podczas ponownego uruchamiania aplikacji.
  • Aby nawiązać połączenie z klienta graficznego interfejsu użytkownika bazy danych MongoDB, maszyna musi znajdować się w sieci wirtualnej. Może to być na przykład maszyna wirtualna platformy Azure połączona z jedną z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
  • Aby nawiązać połączenie z poziomu powłoki bazy danych MongoDB ze strony zarządzania usługi Azure Cosmos DB w portalu, maszyna musi również znajdować się w sieci wirtualnej. Zamiast tego można otworzyć zaporę serwera usługi Azure Cosmos DB dla adresu IP maszyny lokalnej, ale zwiększa obszar ataku na konfigurację.

Jak działa programowanie aplikacji lokalnych z GitHub Actions?

Weź plik automatycznie wygenerowanego przepływu pracy z App Service na przykład każdy git push rozpoczyna nowy przebieg kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub należy wypchnąć je do usługi GitHub. Na przykład:

git add .
git commit -m "<some-message>"
git push origin main

Dlaczego wdrożenie GitHub Actions jest tak powolne?

Automatycznie wygenerowany plik przepływu pracy z App Service definiuje polecenie build-then-deploy, dwa zadania uruchamiania. Ponieważ każde zadanie jest uruchamiane we własnym czystym środowisku, plik przepływu pracy zapewnia, że deploy zadanie ma dostęp do plików z build zadania:

Większość czasu potrzebnego przez proces dwuzdania jest poświęcana na przekazywanie i pobieranie artefaktów. Jeśli chcesz, możesz uprościć plik przepływu pracy, łącząc dwa zadania w jeden, co eliminuje konieczność wykonania kroków przekazywania i pobierania.

Następne kroki