Как развернуть приложение 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.
Прежде всего, спасибо за чтение, и я надеюсь, что этот небольшой урок поможет вам.
С наилучшими пожеланиями.