Как развернуть приложение NestJS в Heroku с помощью конвейеров GitLab CI/CD

Введение

В предыдущие дни я написал небольшой учебник, объясняющий, как создать приложение NestJS Создание API Rest с помощью NestJS и PostgreSQL, а теперь я объясню, как его развернуть с помощью GitLab Pipelines.

Предпосылки

Нам нужно создать учетную запись в Heroku и GitLab.

Убедитесь, что в вашей операционной системе установлен Node.js (›= 10.13.0).

Установка

NestJS

После установки NodeJS мы устанавливаем NestJS CLI, интерфейс командной строки, который помогает нам поддерживать наше приложение.

После установки мы собираемся выполнить следующую команду для создания нашего проекта.

$ nest new project-name

Вы можете найти основные файлы в каталоге src.

  • app.controller.ts: базовый контроллер с простым маршрутом.
  • app.service.ts: простой сервис.
  • app.module.ts: корневой модуль приложения.
  • main.ts: файл входа приложения, которое использует основную функцию NestFactory для создания экземпляра приложения Nest.

Для запуска приложения введите следующие команды.

$ cd project-name
$ npm run start

Теперь вы можете открыть браузер и перейти по адресу http://localhost:3000.

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

$ nest g service configuration/configuration

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

В файле main.ts добавьте конфигурацию порта

Это все настройки, которые нам нужны для развертывания нашего приложения.

Героку

Пришло время установить Heroku, вы можете найти, как его установить https://devcenter.heroku.com/articles/heroku-cli#download-and-install.

После установки войдите в свой аккаунт.

$ heroku login
$ heroku create application-name

Теперь нам нужно настроить переменную среды с именем NPM_CONFIG_PRODUCTION в false, потому что наш конвейер должен сгенерировать сборку нашего проекта перед запуском сервера, а PORT его порт которые приложение использует для развертывания.

GitLab

Пришло время создать учетную запись в GitLab, как только учетная запись будет создана, мы собираемся создать новый репозиторий.

Теперь добрались до проекта NestJS, добавили первый коммит и отправили изменения в новый репозиторий.

$ cd projectname
$ git add -A .
$ git commit -m"First commit"
$ git remote add origin [email protected]:groupname/projectname-api.git
$ git push -u origin — all

Теперь перейдите в Настройки/CI/CD/Переменные, добавьте переменные APP и HEROKU_API_KEY.

Чтобы получить ключ API Heroku, перейдите в «Настройки учетной записи» и внизу вы можете найти значение, а APP — это имя приложения.

Теперь в проекте создайте файл .gitlab-ci.yml, в этом файле мы будем настраивать наши пайплайны.

В нашем пайплайне у нас есть 4 спецификации.

  • изображение: указание версии NodeJS.
  • before_script: переопределяет набор команд, которые выполняются перед заданием.
  • этапы:определяет этап задания.
  • staging: это наша среда для развертывания.

Мы устанавливаем dplзависимость, dpl — это инструмент развертывания, предназначенный для непрерывного развертывания, который разработан и используется Travis CI, но также может использоваться с GitLab CI/CD, вы можете найти больше информации об этом в https ://docs.gitlab.com/ee/ci/examples/deployment/.

В разделе staging мы указываем тип задачи «Deploy», образ, который мы используем, определяем этап работы и скрипт, который мы используем для развертывания.

dpl --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY

В скрипте указываем провайдера, в нашем случае это Heroku, имя нашего приложения и ключ API.

Теперь создайте Procfile и добавьте следующую строку:

web: npm run start:prod

Эта команда запускает проект в рабочем режиме.

В package.json добавляем новые скрипты.

"postinstall": "npm run prestart:prod"
"prestart:prod": "rimraf dist && npm run build"

После завершения команды install следующей командой будет prestart:prod, потому что нам нужно создать сборку нашего проекта перед выполнением start:prod. .

Конфигурация завершена, теперь мы фиксируем все изменения и создаем новую ветку с именем staging и отправляем ее в GitLab.

GitLab распознает наш пайплайн и начнет развертывание нашего приложения в Heroku.

После завершения процесса развертывания мы можем открыть приложение, нажав кнопку «Открыть приложение».

Вы можете найти проект в https://gitlab.com/speakchron/speakchron-api.

Вывод

Давайте посмотрим, что мы узнали.

  • Как создать простое приложение с NestJS CLI.
  • Настройте переменные среды в нашем приложении.
  • Настройте сценарии нашего проекта для развертывания.
  • Конфигурации среды на Heroku и GitLab.

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

С наилучшими пожеланиями.