Бессерверное приложение MEAN Stack на MongoDB Atlas и Cloud Run

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 — это технологический стек для создания полнофункциональных веб-приложений, полностью использующих 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. Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud Platform, содержащий ваш экземпляр Cloud Run и MongoDB Atlas.
  • В следующем разделе приведен список шагов по созданию приложения MEAN Stack.

3. Создайте бессерверный экземпляр MongoDB и базу данных.

e5cc775a49f2fb0.png

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

fca10bf6f031af7a.png

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

d13c4b8bdd9569fd.png

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

bffeef16de1d1cd2.png

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

75771e64427acd5e.png

  • Скопируйте строку подключения, которую вы видите, и замените пароль своим собственным. Мы будем использовать эту строку для подключения к нашей базе данных в следующих разделах.

4. Настройте проект Cloud Run

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

f32dbd4eb2b7501e.png

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

3da173210a016316.png

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

83793a577f08e4d4.png

5. Клонировать проект стека MEAN

  • Мы развернем веб-приложение для управления сотрудниками. REST API создан на основе Express и Node.js; веб-интерфейс с Angular; и данные будут храниться в экземпляре MongoDB Atlas, который мы создали ранее.
  • Клонируйте репозиторий проекта, выполнив следующую команду в терминале Cloud Shell:
git clone https://github.com/mongodb-developer/mean-stack-example.git

6. Разверните Express и Node.js REST API.

Файл конфигурации Docker

  • Сначала мы развернем службу Cloud Run для Express REST API. Самый важный файл для нашего развертывания — это файл конфигурации 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 на левой боковой панели:

48c73bda3aa4ea02.png

  • Затем нажмите значок «Развертывание в облаке».

cde124ba8ec23b34.png

  • Заполните конфигурацию службы следующим образом:
  • Имя службы: 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.
  • Наконец, в разделе «Настройки сборки» выберите:
  • Разработчик: Докер
  • Докер: средний-стек-пример/сервер/Dockerfile
  • Нажмите кнопку «Развернуть», а затем «Показать подробные журналы», чтобы следить за развертыванием вашей первой службы Cloud Run!
  • После завершения сборки вы должны увидеть URL-адрес развернутого сервиса:

759c69ba52a85b10.png

  • Откройте URL-адрес и добавьте в конец «/employees».
  • Вы должны увидеть пустой массив, поскольку на данный момент в базе данных нет документов.

Давайте развернем пользовательский интерфейс, чтобы можно было его добавить!

7. Развертывание веб-приложения Angular

Наше приложение Angular находится в каталоге клиента. Для его развертывания мы будем использовать сервер Nginx и Docker. Просто мысль: есть также возможность использовать хостинг Firebase для развертывания приложения 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-адрес только в одном файле проекта, мы жестко закодируем URL-адрес. Альтернативно вы можете прикрепить переменную среды к объекту окна и получить к ней доступ оттуда.

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.
  • Наконец, в разделе «Настройки сборки» выберите:
  • Разработчик: Докер
  • Докер: средний-стек-пример/клиент/Dockerfile
  • Нажмите кнопку «Развернуть» еще раз и просматривайте журналы, пока ваше приложение отправляется в облако! После завершения развертывания вы должны увидеть URL-адрес клиентского приложения.

5da1d7defc1082fc.png

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

db154f1cd57e38f0.png

8. Очистка

Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия.

Завершить экземпляры MongoDB

  1. Перейдите к кластерам экземпляров MongoDB.
  2. Выберите кластер, экземпляр, который вы создали.
  3. Нажмите многоточие рядом с именем кластера и выберите «Завершить» из списка.

Удаление развертываний Cloud Run

  1. Перейдите на страницу Cloud Run в Google Cloud Console.
  2. Выберите службу Cloud Run, которую хотите удалить.
  3. Нажмите значок удаления в верхней части консоли.

9. Поздравления

Поздравляем, вы успешно создали веб-приложение MEAN Stack в Cloud Run!