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.
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:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części Azure Portal.
- Wybierz element z etykietą Web App + Database pod nagłówkiem Marketplace . Możesz również przejść bezpośrednio do kreatora tworzenia .
Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.
- Grupa zasobów → wybierz pozycję Utwórz nową i użyj nazwy msdocs-expressjs-mongodb-tutorial.
- Region → dowolny region świadczenia usługi Azure w pobliżu.
- Nazwa → msdocs-expressjs-mongodb-XYZ , gdzie XYZ to dowolne trzy losowe znaki. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
- Stos środowiska uruchomieniowego → Node 16 LTS.
- Plan hostingu → Podstawowa. Gdy wszystko będzie gotowe, możesz później przeprowadzić skalowanie w górę do produkcyjnej warstwy cenowej.
- 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.
- Wybierz pozycję Przejrzyj i utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
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.
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.
Krok 2. Na karcie Ustawienia aplikacji na stronie Konfiguracja utwórz DATABASE_NAME
ustawienie:
- Wybierz pozycję Nowe ustawienie aplikacji.
- W polu Nazwa wprowadź DATABASE_NAME.
- W polu Wartość wprowadź automatycznie wygenerowaną nazwę bazy danych z kreatora tworzenia, który wygląda następująco: msdocs-expressjs-mongodb-XYZ-database.
- Wybierz przycisk OK.
Krok 3.
- Przewiń do dołu strony i wybierz parametry połączenia MONGODB_URI. Został on wygenerowany przez kreatora tworzenia.
- 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.
- Wybierz pozycję Anuluj.
Krok 4.
- 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://...
). - Na pasku menu u góry wybierz pozycję Zapisz.
- Po wyświetleniu monitu wybierz pozycję Kontynuuj.
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:
- Zaloguj się do konta usługi GitHub.
- Przejdź do adresu https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
- Wybierz pozycję Rozwidlenie.
- Wybierz pozycję Utwórz rozwidlenie.
Krok 2. Na stronie GitHub otwórz Visual Studio Code w przeglądarce, naciskając .
klawisz .
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
).
Krok 4. Po powrocie do strony App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania.
Krok 5. Na stronie Centrum wdrażania:
- W obszarze Źródło wybierz pozycję GitHub. Domyślnie GitHub Actions jest wybierana jako dostawca kompilacji.
- Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
- W obszarze Organizacja wybierz swoje konto.
- W obszarze Repozytorium wybierz pozycję msdocs-nodejs-mongodb-azure-sample-app.
- W obszarze Gałąź wybierz pozycję main.
- W górnym menu wybierz pozycję Zapisz. App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w
.github/workflows
katalogu .
Krok 6. Na stronie Centrum wdrażania:
- Wybierz pozycję Dzienniki. Przebieg wdrożenia został już uruchomiony.
- W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.
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.
4. Przejdź do aplikacji
Krok 1: Na stronie App Service:
- W menu po lewej stronie wybierz pozycję Przegląd.
- Wybierz adres URL aplikacji. Możesz również przejść bezpośrednio do adresu
https://<app-name>.azurewebsites.net
.
Krok 2. Dodaj kilka zadań do listy. Gratulacje, korzystasz z bezpiecznej aplikacji Node.js opartej na danych w Azure 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:
- W menu po lewej stronie wybierz pozycję App Service dzienniki.
- W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.
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:
- W menu po lewej stronie wybierz pozycję Narzędzia zaawansowane.
- Wybierz pozycję Przejdź. Możesz również przejść bezpośrednio do adresu
https://<app-name>.scm.azurewebsites.net
.
Krok 2. Na stronie Kudu wybierz pozycję Wdrożenia.
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.
Krok 3. Wstecz do strony głównej Kudu i wybierz pozycję Witryna wwwroot.
Możesz wyświetlić wdrożona strukturę folderów i kliknąć, aby przeglądać i wyświetlać pliki.
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:
- Wpisz nazwę grupy zasobów.
- Wybierz odpowiednią grupę zasobów.
Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.
Krok 3.
- Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
- Wybierz pozycję Usuń.
Często zadawane pytania
- Ile kosztuje ta konfiguracja?
- Jak mogę połączyć się z serwerem usługi Azure Cosmos DB zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?
- Jak działa programowanie aplikacji lokalnych z GitHub Actions?
- Dlaczego wdrożenie GitHub Actions jest tak powolne?
Ile kosztuje ta konfiguracja?
Cennik zasobów tworzenia jest następujący:
- Plan App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz App Service cennik.
- Serwer usługi Azure Cosmos DB jest tworzony w jednym regionie i może być dystrybuowany do innych regionów. Zobacz Cennik usługi Azure Cosmos DB.
- Sieć wirtualna nie ponosi opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak komunikacja równorzędna. Zobacz Cennik usługi Azure Virtual Network.
- Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.
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 domongosh
elementu , 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:
- Na końcu
build
zadania przekaż pliki jako artefakty. - Na początku
deploy
zadania pobierz artefakty.
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.