Развертывание веб-приложения Node.js и MongoDB в Azure
Служба приложений Azure — это высокомасштабируемая служба размещения с самостоятельной установкой исправлений на основе операционной системы Linux. В этом руководстве показано, как создать защищенное приложение Node.js в Служба приложений Azure, подключенное к базе данных Azure Cosmos DB для MongoDB. По завершении вы получите приложение Express.js, работающее в Службе приложений Azure в Linux.
В этой статье предполагается, что вы уже знакомы с разработкой Node.js, и что у вас установлены Node и MongoDB в локальной среде. Вам также потребуется учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
Пример приложения
Для работы с этим руководством клонируйте или скачайте пример приложения из репозитория 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
Если вы хотите запустить приложение локально, сделайте следующее:
- Установите зависимости пакета, выполнив команду
npm install
. - Скопируйте файл
.env.sample
в.env
и в качестве значения параметра DATABASE_URL укажите URL-адрес MongoDB (например, MongoDB://localhost:27017/). - Запустите приложение с помощью команды
npm start
. - Чтобы просмотреть приложение, перейдите по адресу
http://localhost:3000
.
1. Создание Служба приложений и Azure Cosmos DB
В этом шаге вы создадите ресурсы Azure. Шаги, используемые в этом руководстве, создают набор защищенных по умолчанию ресурсов, включая Служба приложений и Azure Cosmos DB для MongoDB. В процессе создания вы укажете следующее:
- Имя веб-приложения. Это имя используется в составе DNS-имени вашего веб-приложения в виде
https://<app-name>.azurewebsites.net
. - Регион для физического запуска приложения.
- Стек среды выполнения для приложения. Здесь следует выбрать версию Node, которая будет использоваться для приложения.
- План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице Создание веб-приложения и базы данных заполните форму следующим образом.
- Группа ресурсов — выберите Создать и используйте имя msdocs-expressjs-mongodb-tutorial.
- Регион → любой ближайший к вам регион Azure.
- Имя — используйте имя msdocs-expressjs-mongodb-XYZ, где XYZ представляет три произвольных символа. Это имя должно быть уникальным в Azure.
- Стек среды выполнения — Node 16 LTS.
- План размещения — Базовый. Позже, когда все будет готово, вы сможете вертикально увеличить масштаб до рабочей ценовой категории.
- Azure Cosmos DB для MongoDB выбрано по умолчанию в качестве ядра СУБД. Azure Cosmos DB — это облачная база данных, предлагающая API со 100 % совместимостью с MongoDB. Запишите созданное имя базы данных (<имя-приложения>-database). Он понадобится вам позднее.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов — Контейнер для всех созданных ресурсов.
- План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне Базовый.
- Служба приложений — представляет приложение и выполняется в плане службы приложений.
- Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
- Частная конечная точка — конечная точка доступа к ресурсу базы данных в виртуальной сети.
- Сетевой интерфейс — представляет частный IP-адрес для частной конечной точки.
- Azure Cosmos DB для MongoDB → доступно только за пределами частной конечной точки. База данных и пользователь создаются на этом сервере.
- Частная зона DNS → зоны включает разрешение DNS для сервера Azure Cosmos DB в виртуальной сети.
2. Настройка подключения к базе данных
Мастер создания уже создал универсальный код ресурса (URI) MongoDB, но приложению требуются переменные DATABASE_URL
и DATABASE_NAME
. На этом шаге вы создадите параметры приложения с нужным форматом.
Шаг 1. На странице Служба приложений в меню слева выберите Конфигурация.
Шаг 2. На вкладке Параметры приложения на странице Конфигурация создайте DATABASE_NAME
параметр:
- Выберите Новый параметр приложения.
- В поле Имя введите DATABASE_NAME.
- В поле Значение введите автоматически созданное имя базы данных из мастера создания, которое имеет вид msdocs-expressjs-mongodb-XYZ-database.
- Щелкните ОК.
Шаг 3.
- Прокрутите страницу вниз и выберите строку подключения MONGODB_URI. Она была создана мастером создания.
- В поле Значение нажмите кнопку Копировать и вставьте значение в текстовый файл для следующего шага. Для него используется формат URI строки подключения MongoDB.
- Нажмите кнопку Отмена.
Шаг 4.
- Используя те же действия, что и в шаге 2, создайте параметр приложения с именем DATABASE_URL и присвойте ему значение, скопированное из строки подключения
MONGODB_URI
(т. е.mongodb://...
). - В строке меню вверху выберите Сохранить.
- При появлении запроса выберите Далее.
3. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждая команда git push
из репозитория GitHub запускает действие сборки и развертывания.
Шаг 1. В новом окне браузера:
- Войдите в учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
- Нажмите Fork.
- Щелкните Создать вилку.
Шаг 2. На странице GitHub откройте Visual Studio Code в браузере.
, нажав клавишу .
Шаг 3. В Visual Studio Code в браузере откройте конфигурацию или connection.js в обозревателе.
В функции getConnectionInfo
вы увидите, что используются параметры приложения, созданные вами ранее для подключения MongoDB (DATABASE_URL
и DATABASE_NAME
).
Шаг 4. На странице Служба приложений в меню слева выберите Центр развертывания.
Шаг 5. На странице Центр развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите msdocs-nodejs-mongodb-azure-sample-app.
- В поле Ветвь выберите main.
- В меню сверху выберите Сохранить. Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
.
Шаг 6. На странице Центр развертывания:
- Выберите Журналы. Прогон развертывания уже запущен.
- В элементе журнала для прогона развертывания выберите Журналы сборки и развертывания.
Шаг 7. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь, пока в выполнении действия GitHub не будет показано состояние Завершено. Это занимает около 15 минут.
4. Переход в приложение
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения. Также можно перейти непосредственно по адресу
https://<app-name>.azurewebsites.net
.
Шаг 2. Добавьте в список несколько задач. Вы запустили безопасное управляемое данными приложение Node.js в Службе приложений Azure.
5. Потоковая передача журналов диагностики
Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем приложения. Пример приложения выводит сообщения журнала консоли в каждой из своих конечных точек для демонстрации этой возможности. Например, конечная точка get
выводит сообщение о количестве задач, полученных из базы данных, и если что-то идет не так, появляется сообщение об ошибке.
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.');
});
});
Шаг 1. На странице Служба приложений:
- В меню слева выберите Журналы службы приложений.
- Под элементом Ведение журнала приложения выберите Файловая система.
Шаг 2. В меню слева выберите Поток журнала. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
6. Проверка развернутых файлов с помощью Kudu
Служба приложений Azure предоставляет веб-консоль диагностики с именем Kudu, которая позволяет проверять среду размещения сервера для веб-приложения. С помощью Kudu можно просматривать файлы, развернутые в Azure, проверять журнал развертывания приложения и даже открыть сеанс SSH в среде размещения.
Шаг 1. На странице Служба приложений:
- В меню слева выберите Дополнительные инструменты.
- Выберите Перейти. Также можно перейти непосредственно по адресу
https://<app-name>.scm.azurewebsites.net
.
Шаг 2. На странице Kudu выберите Развертывания.
Если вы развернули код в Службе приложений с помощью Git или ZIP-развертывания, вы увидите журнал развертываний веб-приложения.
Шаг 3. Назад на домашнюю страницу Kudu и выберите Сайт wwwroot.
Будете показана развернутая структура папок. Вы можете переходить по ней и просматривать файлы.
7. Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите Удалить группу ресурсов.
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
Часто задаваемые вопросы
- Сколько стоит такая конфигурация?
- Разделы справки подключиться к серверу Azure Cosmos DB, защищенному за виртуальной сетью, с помощью других средств?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Почему развертывание GitHub Actions идет так медленно?
Сколько стоит такая конфигурация?
Цены на создание ресурсов приведены ниже:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- Сервер Azure Cosmos DB создается в одном регионе и может быть распределен по другим регионам. См. страницу цен на Azure Cosmos DB.
- Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
- За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.
Разделы справки подключиться к серверу Azure Cosmos DB, защищенному за виртуальной сетью, с помощью других средств?
- Для базового доступа из программы командной строки можно запустить
mongosh
из терминала SSH приложения. Контейнер приложения не предоставляется вместе сmongosh
, поэтому его необходимо установить вручную. Помните, что установленный клиент не сохраняется во время перезапуска приложения. - Чтобы подключиться из клиента MongoDB с графическим пользовательским интерфейсом, компьютер должен находиться в соответствующей виртуальной сети. Например, это может быть виртуальная машина Azure, подключенная к одной из подсетей, или компьютер в локальной сети с VPN-подключением типа "сеть — сеть" к виртуальной сети Azure.
- Чтобы подключиться из оболочки MongoDB со страницы управления Azure Cosmos DB на портале, компьютер также должен находиться в виртуальной сети. Вместо этого можно открыть брандмауэр сервера Azure Cosmos DB для IP-адреса локального компьютера, но это увеличивает уязвимую зону для вашей конфигурации.
Как осуществляется разработка локальных приложений с использованием GitHub Actions?
Возьмем автоматически созданный файл рабочего процесса из Службы приложений в качестве примера, где каждый git push
запускает новый прогон сборки и развертывания. Из локального клона репозитория GitHub вы вносите необходимые обновления в GitHub. Пример:
git add .
git commit -m "<some-message>"
git push origin main
Почему развертывание GitHub Actions идет так медленно?
Автоматически созданный файл рабочего процесса из Службы приложений определяет прогон из двух заданий — сначала сборка, потом развертывание. Так как каждое задание выполняется в собственной чистой среде, файл рабочего процесса гарантирует, что задание deploy
имеет доступ к файлам из задания build
:
- В конце задания
build
отправьте файлы в виде артефактов. - В начале задания
deploy
скачайте эти артефакты.
Большая часть времени, затрачиваемого процессом из двух заданий, уходит на отправку и скачивание артефактов. При желании файл рабочего процесса можно упростить, объединив два задания в одно, что устраняет необходимость в шагах отправки и скачивания.
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по