Пример Express.js-приложения для деплоя можно найти на Гитхабе.
Сборка приложения
При сборке приложения используется следующая среда:
- Node.js: 16, 18, 20 или 22
- npm
- yarn
- PM2 (последняя версия)
Сборка приложения всегда выполняется в корне репозитория, поэтому файл package.json должен быть размещён именно там. Если он находится в подкаталоге (например, landing), команду сборки необходимо изменить. Например:
npm run --prefix landing build
Во время сборки будут выполнены следующие команды:
apt install -y nodejs --fix-missing
npm install pm2@latest -g
npm install express
Если в проекте есть файл package.json и используется yarn, дополнительно будет выполнено:
apt-get remove -y cmdtest yarn
npm install --global yarn
cd /<DIRECTORY> && yarn install --check-files
В остальных случаях при наличии package.json:
cd /<DIRECTORY> && npm install
<DIRECTORY> — путь к каталогу, в котором находится package.json. В большинстве случаев это корень проекта.
Для запуска используется менеджер процессов PM2. Команда по умолчанию:
pm2 start --no-daemon файл.js
Вместо файл.js может использоваться один из следующих файлов :
app.jsserver.jsmain.jsindex.js
Устранение неполадок
Не удается выполнить развертывание
Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.
Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с pm2. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле package.json.
Please add build instruction to your script section in package.json
Проблема связана с тем, что команда сборки yarn build обращается к файлу package.json, и если значение директивы build не указано, возникает ошибка.
Чтобы устранить ее, необходимо добавить необходимые директивы в секцию scripts файла package.json. Подробнее об использовании scripts — здесь.
Хочется иметь возможность выбрать файл запуска, потому что у меня, к примеру, index.js лежит не в корне репозитория, а в папке ./dist, куда билдится проект.