1. Введение
В этой статье мы рассмотрим, как Cloud Run и MongoDB объединяются, чтобы обеспечить полностью бессерверную разработку приложений на основе стека MEAN. Мы узнаем, как создать бессерверное приложение MEAN с помощью Cloud Run и MongoDB Atlas , платформы для работы с данными приложений в мультиоблачной среде от MongoDB.
Что такое Cloud Run?
Cloud Run позволяет создавать и развертывать масштабируемые контейнерные приложения, написанные на любом языке (включая Go, Python, Java, Node.js, .NET и Ruby), на полностью управляемой платформе. Cloud Run выделяется среди конкурентов тем, что позволяет нам:
- Упакуйте код в несколько контейнеров без сохранения состояния, которые поддерживают запросы и вызывают его посредством HTTP-запросов.
- С вас будет взиматься плата только за фактически использованные ресурсы.
- Поддерживается любой язык программирования, любая библиотека операционной системы на ваш выбор или любой бинарный файл.
Для получения более подробной информации о функциях в полном контексте перейдите по этой ссылке .
Бессерверная база данных с использованием MongoDB Atlas
MongoDB запустила бессерверные экземпляры — новое полностью управляемое развертывание бессерверных баз данных в Atlas, призванное решить эту проблему. С бессерверными экземплярами вам никогда не придется думать об инфраструктуре — просто разверните свою базу данных, и она будет беспрепятственно масштабироваться в зависимости от спроса, не требуя ручного управления. И самое главное, с вас будет взиматься плата только за выполняемые операции. Чтобы сделать нашу архитектуру по-настоящему бессерверной, мы объединим возможности Cloud Run и MongoDB Atlas.
MEAN Stack
MEAN-стек — это технологический стек для создания полнофункциональных веб-приложений, полностью использующих JavaScript и JSON. MEAN-стек состоит из четырех основных компонентов: MongoDB, Express, Angular и Node.js.
- MongoDB отвечает за хранение данных.
- Express.js — это фреймворк для веб-приложений на Node.js, предназначенный для создания API.
- Angular — это клиентская JavaScript-платформа.
- Node.js — это серверная среда выполнения JavaScript. Сервер использует драйвер MongoDB для Node.js для подключения к базе данных, а также для получения и сохранения данных.
Что вы построите
Вам предстоит разработать полнофункциональное приложение для управления должностными ролями сотрудников с использованием MongoDB, Express JS, Angular JS и Node JS. Оно будет включать в себя:
- Серверное приложение на Node.js и Express.js, контейнеризированное
- Клиентское приложение, разработанное на AngularJS и контейнеризированное.
- Оба приложения развернуты в Cloud Run.
- Серверное приложение подключается к бессерверному экземпляру MongoDB с помощью драйвера MongoDB для NodeJS.
- API сервера осуществляет операции чтения и записи с базой данных.
- Клиентское приложение — это пользовательский интерфейс для приложения «Сотрудник — Должностная роль».
Что вы узнаете
- Как создать бессерверные экземпляры MongoDB
- Как настроить проект Cloud Run
- Как развернуть веб-приложения в Google Cloud Run
- Как создать и развернуть приложение на основе MEAN Stack
2. Требования
3. Создайте бессерверный экземпляр MongoDB и базу данных.
- Для начала ознакомьтесь с MongoDB Atlas в Google Cloud.

- После регистрации нажмите кнопку «Создать базу данных», чтобы создать новый бессерверный экземпляр. Выберите следующую конфигурацию:

- После того, как ваш бессерверный экземпляр будет создан, вы увидите, что он запущен и работает.

- Нажмите кнопку «Подключиться», чтобы добавить IP-адрес подключения и пользователя базы данных.
- Для этого практического занятия мы будем использовать настройку "Разрешить доступ из любого места". MongoDB Atlas поставляется с набором функций безопасности и управления доступом. Вы можете узнать о них больше в статье документации по функциям безопасности.
- Используйте в качестве имени пользователя и пароля базы данных любые учетные данные по вашему выбору. После выполнения этих шагов вы должны увидеть следующее:

- Для продолжения нажмите кнопку «Выберите способ подключения», а затем выберите «Подключить ваше приложение».

- Скопируйте строку подключения, которую вы видите, и замените пароль своим собственным. Мы будем использовать эту строку для подключения к нашей базе данных в следующих разделах.
4. Настройте проект Cloud Run.
- Сначала войдите в Cloud Console , создайте новый проект или используйте существующий.
- Запомните идентификатор проекта, который вы создали.
- Ниже представлено изображение, демонстрирующее страницу создания нового проекта, где вы можете увидеть идентификатор своего проекта в момент его создания.

- Затем включите API Cloud Run из Cloud Shell:
- Активируйте Cloud Shell из консоли Cloud. Просто нажмите «Активировать Cloud Shell».
- После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш идентификатор проекта (PROJECT ID). Если по какой-либо причине проект не настроен, просто выполните следующую команду:
gcloud config set project PROJECT_ID

- Воспользуйтесь следующей командой:
gcloud services enable run.googleapis.com
- Для работы с кодом мы будем использовать Cloud Shell и Cloud Shell Editor . Чтобы получить доступ к Cloud Shell Editor, нажмите «Открыть редактор» в терминале Cloud Shell:

5. Клонируйте проект MEAN Stack.
- Мы развернем веб-приложение для управления персоналом. REST API создан с использованием Express и Node.js; веб-интерфейс — с помощью Angular; а данные будут храниться в экземпляре MongoDB Atlas, который мы создали ранее.
- Клонируйте репозиторий проекта, выполнив следующую команду в терминале Cloud Shell:
git clone https://github.com/mongodb-developer/mean-stack-example.git
6. Разверните REST API на Express и Node.js.
Файл конфигурации Docker
- Сначала мы развернем сервис Cloud Run для REST API Express. Самый важный файл для нашего развертывания — это конфигурационный файл Docker. Давайте посмотрим на него:
mean-stack-example/server/Dockerfile
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:17-slim
WORKDIR /usr/app
COPY ./ /usr/app
# Install dependencies and build the project.
RUN npm install
RUN npm run build
# Run the web service on container startup.
CMD ["node", "dist/server.js"]
- Конфигурация настраивает Node.js, копирует и собирает проект. После запуска контейнера следующая команда запускает службу.
node dist/server.js
- Чтобы начать новое развертывание Cloud Run, щелкните значок Cloud Run на левой боковой панели:

- Затем нажмите на значок «Развернуть в облаке»:

- Заполните конфигурацию сервиса следующим образом:
- Название сервиса: node-express-api
- Платформа развертывания: Cloud Run (полностью управляемая)
- Регион: Выберите регион, близкий к региону вашей базы данных, чтобы уменьшить задержку.
- Аутентификация: Разрешить вызовы без аутентификации.
- В разделе «Настройки ревизии» нажмите «Показать дополнительные настройки», чтобы развернуть их:
- Контейнерный порт: 5200
- Переменные среды. Добавьте следующую пару ключ-значение и убедитесь, что вы добавили строку подключения для вашего собственного развертывания MongoDB Atlas:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
- В качестве среды сборки выберите Cloud Build.
- Наконец, в разделе «Параметры сборки» выберите:
- Разработчик: Docker
- Docker: mean-stack-example/server/Dockerfile
- Нажмите кнопку «Развернуть», а затем «Показать подробные журналы», чтобы отследить развертывание вашей первой службы Cloud Run!
- После завершения сборки вы должны увидеть URL-адрес развернутой службы:

- Откройте URL-адрес и добавьте в конец '/employees'.
- Вы должны увидеть пустой массив, поскольку в данный момент в базе данных нет документов.
Давайте развернем пользовательский интерфейс, чтобы мы могли добавить несколько новых элементов!
7. Разверните веб-приложение Angular.
Наше Angular-приложение находится в директории клиента. Для его развертывания мы будем использовать сервер Nginx и Docker. Кстати, есть также вариант использования Firebase Hosting для развертывания Angular-приложения , поскольку вы можете напрямую предоставлять контент через CDN (сеть доставки контента).
Файлы конфигурации
Давайте посмотрим на конфигурационные файлы:
mean-stack-example/client/nginx.conf
events{}
http {
include /etc/nginx/mime.types;
server {
listen 8080;
server_name 0.0.0.0;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
}
- В конфигурации Nginx мы указываем порт по умолчанию — 8080, и начальный файл — index.html.
mean-stack-example/client/Dockerfile
FROM node:17-slim AS build
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
# Install dependencies and copy them to the container
RUN npm install
COPY . .
# Build the Angular application for production
RUN npm run build --prod
# Configure the nginx web server
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
# Run the web service on container startup.
CMD ["nginx", "-g", "daemon off;"]
- В конфигурации Docker мы устанавливаем зависимости Node.js и собираем проект. Затем копируем собранные файлы в контейнер, настраиваем и запускаем службу Nginx.
- Наконец, нам нужно настроить URL-адрес REST API, чтобы наше клиентское приложение могло отправлять к нему запросы. Поскольку мы используем URL-адрес только в одном файле проекта, мы пропишем его жестко. В качестве альтернативы вы можете прикрепить переменную окружения к объекту window и получить к нему доступ оттуда.
mean-stack-example/client/src/app/employee.service.ts
...
@Injectable({
providedIn: 'root'
})
export class EmployeeService {
// Replace with the URL of your REST API
private url = 'https://node-express-api-vsktparjta-uc.a.run.app';
...
- Мы готовы к развертыванию в Cloud Run! Начните новое развертывание со следующими параметрами конфигурации:
- Service Settings: Create a service - Название сервиса: angular-web-app
- Платформа развертывания: Cloud Run (полностью управляемая)
- Аутентификация: Разрешить вызовы без аутентификации.
- В качестве среды сборки выберите Cloud Build.
- Наконец, в разделе «Параметры сборки» выберите:
- Разработчик: Docker
- Docker: mean-stack-example/client/Dockerfile
- Нажмите кнопку «Развернуть» еще раз и следите за логами, пока ваше приложение отправляется в облако! После завершения развертывания вы должны увидеть URL-адрес клиентского приложения.

- Откройте URL-адрес и поэкспериментируйте со своим приложением!

8. Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия.
Завершить работу экземпляров MongoDB
- Перейдите к кластерам экземпляров MongoDB.
- Выберите созданный вами кластер или экземпляр.
- Щелкните многоточие рядом с именем кластера и выберите «Завершить» из списка.
Удалите развертывания Cloud Run.
- Перейдите на страницу Cloud Run в консоли Google Cloud.
- Выберите службу Cloud Run, которую хотите удалить.
- Нажмите на значок удаления в верхней части консоли.
9. Поздравляем!
Поздравляем, вы успешно создали веб-приложение на основе MEAN Stack в Cloud Run!