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

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

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

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

terminal
$ npm i -g skiffly && skiffly login
$ cd my-api && skiffly init
$ skiffly up
$ skiffly logs -f

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

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

  • package.json (start script or main)
  • lockfile: pnpm / npm / yarn
  • .nvmrc / engines.node
Сборщик
Railpack (по умолчанию)
Команда запуска
npm start

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

Порт и $PORT

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

Слушать $PORT
app.listen(process.env.PORT ?? 3000)
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, redis, service } from "@skiffly/config";

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

  const web = service("api", {
    source: github("acme/api"),
    start: "node server.js",
    port: 3000,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
      REDIS_URL: cache.env.REDIS_URL,
      NODE_ENV: "production",
    },
  });

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

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

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

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

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