Приложения на Node.js, Next.js и Nuxt.

Как определяются и запускаются проекты на Node.js: версия Node, менеджер пакетов, Next.js и Nuxt (сервер или статический сайт), SvelteKit, Astro, Express и другие, переменная PORT и миграции Prisma.

3 МИН ЧТЕНИЯ

Репозиторий с package.json — это проект на Node.js. Мы выбираем фреймворк, менеджер пакетов и версию Node, собираем и запускаем проект — от вас нужен только push.

Версия Node и менеджер пакетов

  • Node.js — берётся из engines.node в package.json или из .nvmrc: самая новая из версий 24, 22, 20, 18 или 16, которая подходит. Если нет ни того, ни другого — Node.js 22.
  • Менеджер пакетов — по lock-файлу: pnpm-lock.yaml → pnpm, yarn.lock → yarn, иначе npm (npm ci, если есть package-lock.json).
  • Сборка — скрипт build, если он есть в package.json.

Фреймворки

ФреймворкКак запускается
Next.jsкак сервер (next start) — серверный рендеринг, API-маршруты и middleware работают как обычно
Next.js с output: 'export'как статический сайт из out
Nuxtкак сервер (.output/server/index.mjs)
Nuxt с ssr: false и скриптом generateкак статический сайт из .output/public
SvelteKitкак сервер с adapter-node; с adapter-static — как статический сайт
Astroкак статический сайт; с @astrojs/node — как сервер
NestJSdist/main.js после сборки
Express, Fastify, Koa, Hono и другие серверыфайл из scripts.start (node server.js), иначе main, иначе server.js, app.js, index.js или main.js

Проекты только с фронтендом — Vite, Create React App, Angular, Vue CLI и другие — обслуживаются как статические сайты; см. Статические сайты.

Слушайте порт из PORT

Сервер должен слушать порт из переменной PORT на всех интерфейсах:

const port = process.env.PORT || 3000
app.listen(port, '0.0.0.0')

Next.js и Nuxt делают это сами. Если ваше приложение слушает фиксированный порт, посетители до него не дойдут — тогда развёртывание остановится на проверке запуска, а предыдущая версия продолжит работать.

Значения на этапе сборки

Переменные с вкладки Переменные доступны работающему приложению, а не сборке. Значения, которые сборка встраивает в клиентский код, — например, NEXT_PUBLIC_… в Next.js или VITE_…, — берутся из вашего репозитория, например из закоммиченного файла .env.production. Серверный код читает вкладку Переменные как обычно.

Собственная команда запуска

Если определённый нами запуск вам не подходит, задайте Настройки → Настройки сборки → Команда запуска, например node dist/server.js или npm run start:prod. Там же можно изменить команды установки и сборки.

Базы данных и Prisma

Добавьте в проект PostgreSQL или MySQL и используйте DATABASE_URL — она задаётся за вас. Если среди зависимостей есть Prisma, рекомендуемая команда выпуска — npx prisma migrate deploy: она выполняется при каждом развёртывании до того, как новая версия начнёт принимать посетителей. См. Развёртывания.

Для очередей на BullMQ добавьте Valkey и используйте REDIS_URL. Запускайте обработчик очереди как фоновый процесс — на вкладке Процессы или отдельным сервисом со своими ресурсами. См. Сервисы проекта.

Файлы, которые сохраняются между развёртываниями

Каждое развёртывание начинается со свежей копии вашего репозитория. Файлы, которые приложение записывает в /data, сохраняются между развёртываниями и ежедневно попадают в резервные копии; всё, что записано в другие места, пропадает после следующего развёртывания. Для загрузок и медиафайлов обычно лучше подходит объектное хранилище.

Монорепозитории

Для репозитория с несколькими проектами укажите Папка проекта при создании приложения (например, apps/web). Другая папка того же репозитория может работать как отдельный веб-сервис — см. Сервисы проекта.

Всё ещё не можете разобраться?

Напишите живому инженеру — медианный ответ менее 3 минут в любое время суток.

Написать в поддержку