Перейти к содержимому

Гайд по деплою · Next.js

Разверните Next.js за считанные минуты.

Подключите репозиторий, Railpack соберёт его, сервис получит домен с TLS. Базы данных из шаблонов, потребление списывается поминутно с предоплаченного баланса, всё на нодах в ЕС.

terminal
$ npm i -g skiffly && skiffly login
$ cd my-next-app && skiffly init
$ skiffly up
$ skiffly domain

Что распознаёт Railpack

Railpack изучает репозиторий и подбирает сборку для Next.js; большинству проектов настройка не нужна. Dockerfile в репозитории всегда имеет приоритет.

  • package.json with next
  • next.config.*
  • lockfile: pnpm / npm / yarn / bun
Сборщик
Railpack (по умолчанию)
Команда запуска
npm run start

Определяется Railpack; переопределите её в Настройки → Деплой → Команда запуска.

Порт и $PORT

Skiffly прокидывает PORT в каждый сервис и направляет на него публичный домен. Укажите порт в настройках сервиса, если приложение слушает фиксированный; по умолчанию для Next.js это 3000, а если ничего не задано — 8080.

Слушать $PORT
next start -p $PORT   # Railpack passes PORT; Next.js reads it
PORT
3000
SKIFFLY_PUBLIC_DOMAIN
<service>.skiffly.cloud

Из терминала

Установите CLI, привяжите директорию, разверните. skiffly up собирает запушенный HEAD текущей ветки и стримит логи сборки; skiffly domain выдаёт сервису адрес *.skiffly.cloud.

Или опишите один раз

.skiffly/skiffly.ts объявляет сервис, его базы данных и ссылки между ними. skiffly config plan показывает diff, skiffly config apply применяет его. API повторяет railway/iac.

Config as code
.skiffly/skiffly.ts
// .skiffly/skiffly.ts
import { defineSkiffly, github, postgres, project, service } from "@skiffly/config";

export default defineSkiffly(() => {
  const db = postgres("db");

  const web = service("web", {
    source: github("acme/web"),
    build: "pnpm build",
    start: "pnpm start",
    port: 3000,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
      NODE_ENV: "production",
    },
  });

  return project("web", { resources: [web, db] });
});

Next.js на Skiffly: частые вопросы

Как задать переменные окружения для Next.js?
На вкладке «Переменные» сервиса, командой skiffly variables set KEY=value или в .skiffly/skiffly.ts. Ссылайтесь на другие сервисы через ${{Postgres.DATABASE_URL}}, а на общие значения окружения — через ${{shared.NAME}}. Секреты шифруются при хранении.
Можно ли изменить команду сборки или запуска?
Да. Настройки → Сборка → Команда сборки переопределяет шаг сборки Railpack; Настройки → Деплой → Команда запуска заменяет команду запуска. Для монорепозитория задаётся корневая директория, чтобы сборка шла внутри неё.
Как добавить Postgres или Redis?
Разверните шаблон в то же окружение. Он появится с томом, сгенерированными учётными данными и URL подключения, на который вы ссылаетесь из сервиса Next.js. Подключайтесь с ноутбука через skiffly connect postgres.
Будут ли preview-окружения для каждого pull request?
Включите PR-превью в проекте: каждый pull request получит собственную копию окружения на своём домене, которая удаляется, когда PR слит или закрыт. Форки игнорируются.
Сколько стоит небольшое приложение на Next.js?
Сервис 512 МБ / 0.25 vCPU обходится примерно в $7.75 в месяц, списание поминутно с баланса. Добавьте Postgres с 512 МБ / 0.25 vCPU и томом 10 ГБ примерно за $9 сверху. Бесплатный тариф запускает один сервис 512 МБ с App Sleeping без оплаты.
Может ли сервис Next.js засыпать при простое?
Включите App Sleeping: примерно через 10 минут без запросов сервис масштабируется до нуля и просыпается на следующем запросе (2–10 с). CPU и память во сне не тарифицируются; том — тарифицируется.

Разверните своё приложение на Next.js сегодня

Бесплатный тариф без карты. Hobby от $5, из них $5 потребления включено.