В Inato все наши веб-приложения содержатся в одном монорепозитории (интерфейсные приложения, API и т. Д.). Мы используем рабочие области пряжи для управления всеми этими пакетами.
Для размещения и запуска наших приложений мы используем Heroku.
Стандартная установка Heroku работает только для варианта использования 1-app-1-repo.
Итак, вот краткое руководство о том, как размещать и запускать несколько приложений из нескольких рабочих областей пряжи, содержащихся в одном репозитории Git на Heroku.
Отказ от ответственности: это руководство предполагает базовые знания Heroku (см. Начало работы).
Допустим, у вас есть один репозиторий Git, содержащий несколько приложений в рабочих областях пряжи, например:
. ├── package.json ├── packages │ ├── web-client │ │ └── package.json │ └── api │ └── package.json └── scripts └── heroku.build
И web-client
, и api
- это веб-приложения, которые должны быть доступны в сети.
Использование одного Procfile для открытия нескольких веб-процессов в Heroku невозможно. Вы не сможете иметь api
и web
в файле Procfile, открывающем веб-приложения. Т.е. это не работает:
web:
yarn workspace web-client startapi:
yarn workspace api start
Тип веб-процесса является особенным, поскольку это единственный тип процесса, который будет получать HTTP-трафик от маршрутизаторов Heroku. Другие типы процессов можно называть произвольно.
Правильный способ сделать это:
- Создайте по одному дино для каждого приложения (рабочего пространства), которое вы хотите запустить.
- Используйте пакет сборки с несколькими процессами
- При желании используйте переменные среды, чтобы настроить шаг сборки
Вот подробности:
1. Создайте по одному дино для каждого приложения (рабочего пространства), которое вы хотите запустить.
Создайте одно приложение Heroku с именем для каждого веб-приложения с помощью интерфейса командной строки Heroku и привяжите его к удаленному Git.
$ heroku create web-client --remote heroku-web-client
$ heroku create api --remote heroku-api
Здесь web-client
- это имя приложения Heroku, которое сделает приложение доступным по адресу http://web-client.herokuapp.com, а heroku-web-client
- это имя git remote. указывая на это приложение heroku и позволяет развернуть ваш код в одном или другом приложении следующим образом:
$ git push heroku-web-client master
2. Используйте многопроцессорный сборочный пакет.
Вам нужно указать Heroku, как запускать каждое из ваших приложений. Команда Heroku предоставила для этого сборочный пакет: Сборочный пакет Heroku Multi Procfile.
Представьте, что у вас есть единая кодовая база, в которой есть несколько разных приложений ... или, по крайней мере, возможность запускать несколько разных приложений. Или, может быть, вы используете Google со своим моно-репо?
В любом случае, как вам это удается на Heroku? Вы этого не сделаете. Приложения Heroku предполагают наличие одного репозитория для одного приложения.
Войдите в пакет сборки Multi Procfile, в котором каждое приложение получает Procfile!
- Напишите кучу Procfiles и разбросайте их по своей кодовой базе.
- Создайте кучу приложений Heroku.
- Для каждого приложения установите
PROCFILE=relative/path/to/Procfile/in/your/codebase
и, конечно же:heroku buildpacks:add -a <app> https://github.com/heroku/heroku-buildpack-multi-procfile
- Для каждого приложения
git push [email protected]:<app> master
В нашем примере у нас будет один файл Procfile для каждой рабочей области:
. ├── package.json ├── packages │ ├── web-client │ │ ├── Procfile │ │ └── package.json │ └── api │ ├── Procfile │ └── package.json └── scripts └── heroku.build
содержащий, например:
web: yarn workspace api start
3. При необходимости используйте переменные среды, чтобы настроить шаг сборки.
По умолчанию Heroku устанавливает только Node и запускает yarn install
(так называемый этап сборки). Если вам действительно нужно что-то построить (например, ваш интерфейсный пакет), вы можете использовать heroku-postbuild
для задач, специфичных для Heroku (документация), которая находится в разделе scripts
вашего package.json
верхнего уровня.
Используя переменные среды, вы можете заставить этот скрипт выполнять разные задачи в зависимости от приложения.
Пример:
Вот и все !
С помощью этих шагов вы можете создавать и запускать различные приложения из вашего монорепозитория.