Как развернуть приложение Express.js?

How to Deploy a ExpressJS Application_
How to Deploy a ExpressJS Application_

Выбор правильного варианта развертывания очень важен для того, чтобы ваше приложение могло легко масштабироваться по мере его роста. В этой статье рассматриваются различные варианты развертывания, доступные для приложений Express.js. В частности, она посвящена тому, как развернуть приложения Express.js в контейнере Back4app.

Contents

Что такое Express.js?

Express – это непилотируемый легкий фреймворк, построенный на базе Node.js, который упрощает процесс создания сложных веб- и мобильных API.

Она предлагает простую систему маршрутизации, которая позволяет легко определять конечные точки для маршрутов API и привязывать их к функциям-обработчикам.

Он также поддерживает промежуточное ПО, позволяющее добавлять такие функции, как ведение журнала, аутентификация и обработка ошибок в цикле “запрос – ответ”.

Преимущества использования Express.js

Среди преимуществ использования Express можно назвать следующие:

  • Минимализм и простота в использовании: Express.js абстрагирует сложность некоторых функций Node.js, таких как маршрутизация. Он обеспечивает простой способ обработки запросов и ответов API.
  • Высокая расширяемость: Express.js имеет большое сообщество, что привело к созданию обширной экосистемы пакетов NPM и расширений, которые вы можете легко интегрировать в приложения.
  • Высокая производительность: благодаря минимальному дизайну и использованию неблокирующей, событийно-ориентированной архитектуры Node, Express обладает высокой производительностью.
  • Сильная поддержка сообщества: Express.js существует с 2010 года. За это время многие разработчики перешли на него. Поэтому существует большое сообщество разработчиков Express, которое может помочь вам, если вы застрянете. Кроме того, существует множество статей, учебников и хорошо написанных документов, которые объясняют, как работает Express.

Недостатки Express.js

Ниже перечислены некоторые недостатки Express.js:

  • Нетерпимость: По сравнению с такими фреймворками, как Nest.js, Express.js не имеет своего мнения. Отсутствие мнений означает, что вам нужно принимать решения о структуре и организации проекта, что может быть утомительным, особенно когда у вас есть несколько способов сделать что-то.
  • Отсутствие встроенных функций: Express.js не поставляется с готовой конфигурацией, и для большинства продвинутых функций, таких как ведение логов, вам нужно установить дополнительные зависимости.

Варианты развертывания Express.js

Инфраструктура как услуга (IaaS)

Инфраструктура как услуга – это услуга облачных вычислений, которая предоставляет вычислительные, сетевые ресурсы и ресурсы хранения данных через Интернет по запросу.

При использовании IaaS вы отвечаете за предоставление и настройку ресурсов для вашего приложения, а поставщик IaaS поддерживает базовую физическую инфраструктуру. Например, если вы хотите развернуть приложение Express, вы можете создать и настроить виртуальную машину у выбранного вами поставщика IaaS.

На ВМ нужно установить необходимые зависимости, такие как Node и npm, а затем добавить код Express на ВМ. Затем вы можете запустить свое приложение Express на ВМ, и оно будет доступно через Интернет.

Одно из главных преимуществ IaaS – это уровень контроля, который он обеспечивает. Вы можете настроить ресурсы процессора, памяти и хранилища виртуальной машины в соответствии с потребностями вашего приложения.

Однако важно учитывать и некоторые минусы такого подхода.

Управление инфраструктурой и ресурсами по мере масштабирования приложений и изменения потребностей может быть сложным и отнимать много времени.

Среди популярных поставщиков IaaS можно назвать следующих:

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

Контейнер как услуга (CaaS)

Container as a Service (CaaS) – это модуль облачного сервиса, который абстрагируется от базовой инфраструктуры, позволяя быстро развертывать и запускать контейнерные приложения.

Чтобы развернуть приложение Express у поставщика услуг CaaS, вы упаковываете код, зависимости и среду выполнения, необходимую для запуска приложения, в контейнер с помощью инструмента контейнеризации, например Docker. Создав контейнер, вы развертываете его. CaaS-провайдер предоставляет и управляет инфраструктурой, необходимой для запуска контейнера.

Основное преимущество использования CaaS заключается в том, что высокий уровень абстракции упрощает развертывание, поскольку вам не нужно беспокоиться о настройке низкоуровневой инфраструктуры. Вместо этого вы можете сосредоточиться на создании логики приложения. Кроме того, контейнеризация обеспечивает стабильную работу приложения в различных средах.

Среди популярных поставщиков CaaS можно назвать следующих:

  • Back4app Containers
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKE)

Как развернуть Express-приложение в контейнере Back4app

Пререквизиты

Чтобы следовать этому руководству, убедитесь, что у вас есть следующее:

  • На вашей машине установлен Node.js.
  • Учетная запись на GitHub.
  • На вашей машине установлен Docker. Если его нет, посетите сайт Docker и установите Docker desktop.
  • Рабочие знания Express.js.

Обзор контейнеров Back4app

Контейнеры Back4app – это платформа, которая автоматизирует развертывание, управляя инфраструктурой на стороне сервера за вас.

Среди особенностей контейнеров Back4app можно выделить следующие:

  • Интеграция с GitHub: Вы можете подключить свои репозитории GitHub к Back4app, что позволит автоматически развертывать ваше приложение при изменении кодовой базы.
  • Развертывание с помощью Docker: Вы можете использовать Docker, популярный инструмент контейнеризации, для упаковки кода приложения в контейнер. Это обеспечивает предсказуемую работу приложения в разных средах.
  • Автоматическое развертывание: Как только вы подключите репозиторий GitHub к Back4app, каждое обновление кода в ветке по умолчанию будет вызывать развертывание.
  • Отслеживание развертывания в режиме реального времени: Вы можете просматривать состояние и ход развертывания.
  • Мониторинг приложений в режиме реального времени
  • Обновления без простоев

Введение в проект

В этом руководстве мы рассмотрим процесс развертывания Express-приложения на Back4app. Сначала мы создадим простой Express REST API с одной конечной точкой, докеризуем его с помощью Docker и разместим на GitHub. Затем мы развернем его в контейнере Back4app.

Создайте простой Express API

Чтобы создать приложение Express, выполните следующие действия:

  1. Выполните следующую команду в терминале, чтобы инициализировать новый проект Node.js.
npm init

Эта команда предложит вам ввести данные о вашем приложении: название пакета, версию, описание, точку входа, автора и лицензию. Как только вы ответите, будет создан файл package.json с этими конфигурациями.

Чтобы использовать конфигурации по умолчанию, используйте флаг -y, как показано ниже:

npm init -y
  • Установите Express в качестве зависимого компонента, выполнив эту команду.
npm install express
  • В корневой папке проекта создайте файл index.js. Если вы указали другое имя для файла точки входа, используйте его.
  • Откройте файл index.js и создайте экземпляр приложения Express.
const express = require('express');
const app = express();
  • Добавьте обработчик маршрутов для обработки GET-запросов к конечной точке “/”.
app.get("/", (req, res) => {
  res.json({
    message: "Success",
  });
});

Эта конечная точка отправляет в качестве ответа сообщение в формате JSON.

  • Определите номер порта и прослушивайте входящие запросы на указанном порту.
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`App listening at <http://localhost>:${port}`);
});

Обратите внимание, что process.env.PORT ссылается на переменную окружения с именем PORT. Если это значение не определено в файле .env, приложение будет использовать значение 3000.

  • Выполните следующую команду, чтобы запустить сервер Express.
node index.js

Если вы посетите сайт http://localhost:3000/api в своем браузере, вы получите следующий ответ.

{
  "message": "Success!"
}

Это очень базовый пример Express API, реальное приложение будет более сложным, с большим количеством конечных точек, внешних данных, промежуточного ПО и т. д.

Для целей данной статьи этого достаточно, чтобы продемонстрировать, как можно развернуть докеризованное приложение Express.

Докеризация приложения Express

Докеризация приложения Express.js – это создание для него контейнера Docker, чтобы упростить запуск приложения в различных средах.

Что такое Docker?

Docker – это инструмент с открытым исходным кодом, позволяющий упаковать приложение, среду выполнения, библиотеки и зависимости в изолированную и переносимую контейнерную среду.

Заключая приложение в контейнер, Docker обеспечивает согласованную среду для его работы независимо от базовой хост-системы.

Это устраняет проблему “это работает на моей машине”. Вы можете работать над своим приложением Express в локальной среде, контейнеризировать его и развертывать в нескольких средах, не беспокоясь о проблемах совместимости.

Установите Docker

Docker может работать на различных платформах, включая macOS, Windows и Linux. Вы можете загрузить и установить Docker для своей ОС с официального сайта.

Как докеризировать приложение Express.js

После установки Docker вам нужно докеризировать ваше приложение, то есть упаковать его в контейнер Docker.

Выполните следующие действия:

  • В корне проекта создайте файл с именем Dockerfile. Этот файл содержит инструкции по сборке образа Docker для приложения Express.
  • Обычно при создании Dockerfile первым делом указывается базовый образ. Базовый образ – это предварительно созданный образ, который служит отправной точкой для образа вашего приложения и обычно содержит минимальные инструкции для запуска приложения.
  • В Dockerfile вы можете указать инструкции и конфигурации, которые будут работать поверх этого образа. Вы можете создать свой собственный базовый образ, но у Docker есть официальные образы, которых достаточно в большинстве случаев.
  • В этом руководстве мы будем использовать базовый образ node, в частности, вариант alpine, который имеет небольшой размер. Давайте укажем этот базовый образ в Dockerfile, добавив следующее.
FROM node:20-alpine

Здесь node:20-alpine поставляется с предустановленной версией Node.js 20.

  • Добавьте следующую строку, чтобы задать рабочий каталог внутри контейнера.
WORKDIR /usr/src/app
  • Скопируйте package.json и package-lock.json в рабочий каталог. В них перечислены все зависимости, которые должен установить Docker.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./
  • Добавьте команду для установки зависимостей.
RUN npm install
  • Скопируйте остальную часть кода в рабочий каталог контейнера.
COPY . .
  • Укажите номер порта, к которому прислушивается приложение Express. В данном случае это порт 3000.
expose 3000
  • Добавьте команду для запуска приложения.
CMD["node", "index.js"]

В целом, ваш DockerFile должен выглядеть следующим образом:

FROM node:20-alpine

WORKDIR /usr/src/app

COPY package*.json  ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "index.js" ]

Добавьте файл .dockerignore

Файл .dockerignore определяет файлы, которые Docker должен игнорировать. Он помогает уменьшить размер образа Docker, позволяя игнорировать ненужные файлы. Он также помогает скрыть из образа конфиденциальные файлы.

Чтобы добавить его в свой проект, создайте файл в основании проекта и назовите его.dockerignore. Добавьте в него следующее содержимое.

.git
.gitignore
.env
README.md
Dockerfile
node_modules/
.github
.vscode
npm-debug.log
npm-debug.log.*

Приведенный выше файл предотвращает копирование файлов git, модулей node, журналов и переменных env в образ Docker.

Создайте образ Docker локально

В каталоге проекта выполните следующую команду, чтобы собрать образ Docker.

docker build -t docker-express-api .

Флаг -t означает tag и позволяет дать образу докера осмысленное имя. Точка (.) в конце указывает Docker на поиск Dockerfile в текущем каталоге и выполнение инструкций в нем.

Запустите образ Docker локально

После создания образа Docker используйте его для запуска приложения Express с помощью следующей команды:

docker run -p 3000:3000 docker-express-api

Здесь -p 3000:3000 сопоставляет порт 3000 на localhost с портом 3000 в контейнере. Вы должны иметь возможность получить доступ к приложению, зайдя на сайт http://localhost:3000 в браузере.

Чтобы просмотреть запущенный экземпляр Docker, выполните следующую команду:

docker ps

Чтобы остановить экземпляр, выполните команду:

docker stop docker-express-api

Развертывание докеризованного приложения Express в контейнере Back4app

Теперь, когда мы убедились, что образ Docker работает локально, нам нужно развернуть его на Back4app.

Поместите Express-приложение на GitHub

Backapp развертывает ваше приложение с GitHub. Поэтому вам необходимо выложить репозиторий приложения на GitHub, выполнив следующие действия:

  • Перейдите на сайт GitHub и войдите в свою учетную запись.
  • После входа в систему найдите значок “+” в правом верхнем углу страницы и нажмите на него. В раскрывающемся меню выберите “Новое хранилище”.
  • На странице “Создать новый репозиторий” дайте репозиторию имя. В этом руководстве мы будем использовать “express-api”. Нажмите кнопку “Создать имя репозитория”. Запомните URL-адрес репозитория на следующей странице, так как он понадобится вам для отправки локального репозитория на GitHub.

На локальной машине перейдите в папку с проектом и выполните следующую команду, чтобы перенести приложение в удаленный репозиторий на GitHub.

git remote add origin <https://github.com/remigathoni/express-api.git>
git branch -M main
git push -u origin main

Вы должны иметь возможность просматривать файлы вашего приложения в репозитории GitHub.

Развертывание Express-приложения

Выполните следующие шаги, чтобы развернуть приложение на Back4app:

  • Перейдите на сайт Back4app и зарегистрируйте аккаунт. Если у вас уже есть учетная запись, войдите в нее. Back4app перенаправит вас на приборную панель после аутентификации.
  • На приборной панели нажмите на кнопку Build a new app. Вам будет предложено два варианта – Backend as a Service и Container as a Service. BaaS позаботится о бэкенде от вашего имени, а CaaS позволит вам развернуть приложение в контейнерной среде. Учитывая, что мы хотим развернуть только приложение, выберите пункт Containers as a Service.
Создайте новый контейнер в качестве сервисного приложения
  • В появившемся окне предоставьте Back4app доступ к вашей учетной записи GitHub и выберите репозиторий Express.
Выберите докеризованное приложение Express
  • Дайте развернутому приложению имя. В этом руководстве мы используем “Deployed Express API”. Вы также можете задать дополнительные параметры развертывания, такие как ветвь по умолчанию, корневой каталог, статус авторазвертывания – да или нет, а также переменные окружения.
Разверните приложение Express.js на
  • Нажмите кнопку Create App (Создать приложение ), чтобы завершить процесс развертывания.

Теперь вы бесплатно развернули свое приложение Express на Back4app.

Как оптимизировать образ Docker

Оптимизация размера образа докера крайне важна по следующим причинам:

  • Улучшенная производительность: Маленькое изображение не содержит лишних слоев, которые необходимо выполнять. Это обеспечивает быстрое время запуска.
  • Более быстрое развертывание: Маленькие изображения разворачиваются быстрее.
  • Низкое потребление ресурсов: Маленькие изображения занимают меньше места на диске и памяти при работе.
  • Повышенная безопасность: Благодаря исключению ненужных библиотек и зависимостей уменьшенные образы сокращают площадь атаки на приложение.

Чтобы оптимизировать Docker-образ Express.js, мы можем использовать многоступенчатую сборку.

Многоступенчатые сборки позволяют отделить среду сборки от среды выполнения. Вы можете создать приложение на этапе сборки, а затем скопировать только необходимые файлы на финальный этап производства.

Возвращаясь к приложению Express, мы можем определить два этапа – этап сборки, на котором мы установим зависимости, и этап производства, на котором мы создадим образ времени выполнения.

Создание этапа сборки

Следуйте приведенным ниже инструкциям, чтобы определить этап сборки:

  • Удалите все содержимое Dockerfile и определите стадию сборки из базового образа.
FROM node:20-alpine AS build

Имя этапа присваивается путем добавления AS name of-stage к инструкции FROM. Также обратите внимание, что изображения альпийской базы намного меньше, чем изображения узла:.

  • Определите рабочий каталог.
WORKDIR /usr/src/app
  • Скопируйте файлы package.json и package-lock.json в контейнер.
COPY package*.json ./
  • Установите зависимости для разработки.
RUN npm install --only=development
  • Скопируйте код приложения на этап сборки.
COPY . .
  • Запустите приложение.
CMD ["node", "index.js"]

Команда, которую вы выполняете здесь, зависит от вашего проекта. Например, если вы использовали TypeScript для создания приложения, вам может потребоваться транспонировать приложение.

Создание сцены производства

На втором этапе вы скопируете только собранные файлы приложения с этапа сборки. Выполните следующие шаги:

  • Добавьте базовый образ Node.js и назовите его production.
# Production Stage
FROM node:20-alpine AS production
  • Установите рабочий каталог.
WORKDIR /usr/src/app
  • Скопируйте необходимые файлы из “Build Stage”, указав --from=build в инструкции COPY. Поскольку команды сборки нет, мы копируем все напрямую.
COPY --from=build /usr/src/app .
  • Укажите порт, который прослушивает ваше приложение Express.
EXPOSE 3000
  • Запустите приложение Express.
CMD ["node", "index.js"]

После создания Dockerfile отправьте изменения на GitHub, и Back4app автоматически переразвернет ваше приложение.

Если вы хотите посмотреть код для этой статьи, обратитесь к репозиторию GitHub приложения.

Заключение

Express.js – это легкий непилотируемый фреймворк Node.js. Он помогает разработчикам создавать быстрые и минимальные API для веб- и мобильных приложений.

Когда дело доходит до развертывания Express-приложений, у вас есть различные варианты, включая платформы Infrastructure as a Service (IaaS) и Container as a Service (CaaS).

Платформы IaaS лучше подходят для тех случаев, когда вы хотите получить максимальный контроль над базовой серверной инфраструктурой, а CaaS – для тех, когда вы хотите быстро перейти от разработки к производству без необходимости вручную управлять инфраструктурой.

Один из лучших поставщиков CaaS – контейнеры Back4app. Back4app управляет и контролирует развертывание приложения от вашего имени, оставляя вам возможность сосредоточиться на создании функций приложения.

В этом руководстве вы узнали, как выполнить докеризацию приложения Express.js и развернуть его в контейнере Back4app. Чтобы узнать больше, посетите документацию по контейнерам Back4app.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Что такое Express.js?

Express — это легковесный, не имеющий предвзятости фреймворк, построенный поверх Node.js, который упрощает процесс создания сложных веб- и мобильных API.

Какие есть варианты развертывания для приложений на Express.js?

– IaaS (AWS, GCP, Azure)
– CaaS (Back4app Containers, AWS ECS, Google Kubernetes Engine (GKE))

Как развернуть приложение Express.js в контейнере Back4app?

Создайте приложение на Express.js.
Dockerизируйте приложение на Express.js.
Загрузите docker-изображение приложения на GitHub.
Создайте учетную запись в Back4app.
Создайте контейнер в Back4app.
Предоставьте Back4app доступ к вашему GitHub.
Выберите репозиторий Express.js и разверните приложение.


Leave a reply

Your email address will not be published.