Приложения на Node.js, Next.js и Nuxt.
Как определяются и запускаются проекты на Node.js: версия Node, менеджер пакетов, Next.js и Nuxt (сервер или статический сайт), SvelteKit, Astro, Express и другие, переменная PORT и миграции Prisma.
Репозиторий с 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 — как сервер |
| NestJS | dist/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). Другая папка того же репозитория может работать как отдельный веб-сервис — см. Сервисы проекта.