Русский

Блог · Гайды по деплою

Как задеплоить приложение на TanStack Start в 2026: Nitro, скрипт start и одна команда

Команда Pethost · · Обновлено · 8 мин чтения

У вас есть приложение на TanStack Start, и вы хотите запустить его на Node-сервере по адресу с HTTPS. Руководство TanStack по хостингу требует для этого от приложения двух вещей: плагина Nitro и скрипта start. Когда оба на месте, pethost deploy пишет Dockerfile, собирает приложение и печатает его адрес. Приложение, которое создает TanStack CLI, в первый раз собралось и запустилось за 29 секунд.

Коротко
  • Две вещи в приложении: плагин Nitro, который добавляет --deployment nitro при создании приложения, и "start": "node .output/server/index.mjs" в package.json.
  • Одна команда: pethost deploy в папке, где лежит package.json. Она пишет Dockerfile, который запускает npm run build, а затем npm run start.
  • Порт: сервер Nitro слушает 3000. Pethost сам это находит и направляет туда адрес по HTTPS.
  • Неудачная сборка ничего не меняет: предыдущая версия продолжает работать, а на экране видна ошибка сборки.
  • Цена: 9,99 € в месяц за 2 vCPU, 3 GB и 30 GB — для этого приложения и всех остальных ваших проектов. Бесплатного тарифа нет.

Что нужно, чтобы задеплоить приложение на TanStack Start в 2026 году

Три вещи: само приложение, команда pethost и аккаунт Pethost.

Приложение здесь — то, которое создает TanStack CLI, с Nitro в качестве цели деплоя:

npx @tanstack/cli@latest create my-app --deployment nitro

Флаг добавляет плагин Nitro в vite.config.ts. В уже существующее приложение добавьте его так, как написано в разделе о Nitro руководства по хостингу:

import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import { defineConfig } from 'vite'
import { nitro } from 'nitro/vite'
import viteReact from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [tanstackStart(), nitro(), viteReact()],
})

Затем добавьте в package.json скрипт, который запускает результат сборки. CLI оставляет там build, а start — нет:

"scripts": {
  "dev": "vite dev --port 3000",
  "build": "vite build",
  "start": "node .output/server/index.mjs"
}

Команда — это одна программа, которая ставится одной строкой. Все ее команды есть в справочнике CLI.

curl -fsSL https://pethost.dev/install.sh | sh      # macOS, Linux
irm https://pethost.dev/install.ps1 | iex           # Windows, in PowerShell

Аккаунту нужен тариф. Если вы не вошли, pethost deploy откроет браузер, и вы войдете. Если тарифа еще нет, команда покажет, где его выбрать, и подождет.

Деплой приложения на TanStack Start одной командой

Перейдите в папку, где лежит package.json, и запустите pethost deploy. Вот весь экран для приложения, которое создал CLI:

$ cd my-app
$ pethost deploy
Name it [my-app]:    it will live at https://my-app.sam.pethost.app
✓ Packed 18 files, 183 KB   (left out node_modules)
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Node.js project detected, wrote Dockerfile.
✓ Packed 19 files, 184 KB   (left out node_modules)
✓ Uploaded straight to your machine
✓ Built and started in 29 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env
✓ app listens on 3000 → https://my-app.sam.pethost.app
  It answers 200.

https://my-app.sam.pethost.app

Wrote .pethost (commit it). Next:   pethost logs -f   ·   pethost open
  1. Она спрашивает одно Имя проекта — первое слово его адреса. Enter берет имя папки.
  2. Машина не находит, что запускать Папка уходит прямо на вашу машину, без node_modules. Строка с крестиком — ответ машины: проект запускается из Dockerfile или Compose-файла, а в папке пока нет ни того, ни другого.
  3. pethost пишет Dockerfile Он прочитал скрипты build и start в package.json и загружает папку снова.
  4. Машина собирает и запускает приложение Она видит, что сервер слушает 3000, и направляет туда адрес. Затем pethost сам открывает адрес и печатает, что тот ответил: 200.

Мы открыли задеплоенное приложение так, как его открывает посетитель. Главная страница и /about ответили 200 с HTML, отрендеренным на сервере, а адрес без маршрута ответил 404. Работающий сервер занял 43 MB памяти.

Dockerfile, который pethost пишет для TanStack Start

Вот файл целиком, как он был записан в папку приложения:

# Written by pethost deploy for this Node.js project: Node 24 (no .nvmrc names another),
# npm installs it (package-lock.json), package.json builds it with "vite build",
# package.json starts it with "node .output/server/index.mjs".
# It is yours now: change it as you like. pethost does not write it again.

FROM node:24
WORKDIR /app

COPY . .

# Every dependency: what builds the project, and may start it, is among the ones for
# development.
RUN --mount=type=cache,target=/root/.npm \
    npm install

RUN npm run build

ENV NODE_ENV=production
CMD ["npm", "run", "start"]

Его первые строки говорят, что pethost прочитал в вашей папке. Менеджер пакетов — тот, который называет ваш lockfile, а версия Node — та, которую называет .nvmrc или .node-version, или Node 24, если нет ни того, ни другого. Сборка и запуск — ваши два скрипта, в том виде, в каком вы их написали.

Без скрипта start

Приложение на TanStack Start можно собрать для разных видов хостинга, поэтому pethost не угадывает, как запускается ваше. Без скрипта start он не пишет файл и объясняет почему:

$ pethost deploy
Name it [my-app]:    it will live at https://my-app.sam.pethost.app
✓ Packed 13 files, 177 KB
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
  package.json builds the project and names nothing that starts it (no start script), and what it builds is no site of a kind pethost has a row for.
  Your coding agent writes one in a minute: "Write a Dockerfile for this app".
  Then run pethost deploy again.     How Pethost runs a folder: https://pethost.dev/docs/api/#CreateProject

Добавьте скрипт и запустите команду снова.

Измените маршрут и задеплойте снова

Отредактируйте маршрут и запустите ту же команду. Второй деплой занял 7 секунд, потому что машина хранит слои сборки и кеш npm:

$ pethost deploy
my-app (.pethost)
✓ Packed 20 files · uploaded · built and started in 7 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env
  · kept the project's x-pethost
  It answers 200.
https://my-app.sam.pethost.app

Когда сборка падает

Чтобы это увидеть, мы сломали файл маршрута. На экране — лог сборки с ошибкой, а последняя строка говорит, что получают посетители. Вот этот экран, сокращенный до трех строк:

$ pethost deploy
my-app (.pethost)
✗ Deploy failed: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1
    #9 0.793 Error: Error transforming route file /app/src/routes/about.tsx: SyntaxError: Unexpected token, expected "," (4:19)
  Nothing changed: the version before still runs.

Чтобы деплоить каждый пуш, один раз подключите репозиторий командой pethost github sam/my-app. Pethost читает только те репозитории, которые вы дали его GitHub App. pethost rollback возвращает версию, предшествующую текущей, а ваша машина хранит три версии перед текущей. ИИ-агент может сделать все это за вас через MCP-сервер Pethost: как агент деплоит проект и следит за ним.

Переменные окружения и свой домен

Переменная, которую читает серверная функция, задается одной командой. Команда спрашивает значение, не показывая его, записывает его в файл .env проекта на машине, и следующие деплои его сохраняют:

pethost env set DATABASE_URL

Любое имя в домене вашего аккаунта сразу становится адресом с HTTPS. Для своего домена нужны одна команда и одна DNS-запись:

pethost domain add app.example.com

Команда печатает запись, которую нужно создать: CNAME с вашего имени на имя вашей машины. Сертификат появляется сам, как только имя начинает указывать на машину, и сам продлевается.

Что вы получаете за эти деньги

Pethost стоит 9,99 € в месяц за все, что вы хостите, на 2 vCPU, 3 GB памяти и 30 GB диска. Сервер приложения занял 43 MB этой памяти, так что на машине остается место для его базы данных, воркера и других ваших проектов — например, приложения на React Router рядом с ним. Платы за проект нет, и ничего не считается по счетчику: серверные функции не оплачиваются за каждый вызов.

Что уже сделано за вас: HTTPS с сертификатами, которые продлеваются сами, деплои из GitHub, ночные бэкапы, которые хранятся 14 дней, SSH в любой контейнер и учет каждого запроса — с самыми популярными путями и долей ошибок за последние 30 дней. Машина всегда включена, поэтому серверная функция никогда не ждет холодного старта. Тарифы — в разделе цен на главной странице.

Один проект, открытый на запросах. Сколько их пришло, как быстро на них ответили, и график за последние 15 минут.
Панель Pethost: проект, открытый на запросах, с их числом, временем ответа и графиком за последние 15 минут.

Pethost — лучший выбор для

  • Разработчиков с full-stack-приложением на React: сервер, его серверные функции и база данных на одной машине, с одним счетом
  • Разработчиков-одиночек с несколькими личными проектами, у каждого из которых свой адрес
  • Людей, за которых деплоит агент: Claude Code или Codex выкладывает приложение и читает его логи
  • Стартапов на ранней стадии, которым нужны фиксированные расходы в месяц, пока продукт небольшой

Ищите другое, если

  • Вашему приложению нужны несколько регионов или автомасштабирование

Вопросы

Как запустить TanStack Start на Node-сервере?

Добавьте плагин Nitro в vite.config.ts и скрипт "start": "node .output/server/index.mjs" в package.json, как сказано в руководстве TanStack по хостингу. Тогда npm run build пишет сервер в .output, а npm run start запускает его на порту 3000.

Нужен ли Dockerfile для деплоя приложения на TanStack Start?

На Pethost проект запускается из Dockerfile или Compose-файла, и писать его самому не нужно: как только в package.json есть скрипты build и start, pethost deploy пишет Dockerfile и деплоит его. Файл остается в вашей папке, и его можно менять.

Что будет, если сборка TanStack Start упадет при деплое?

Для посетителей ничего не изменится. Деплой останавливается, на экране — лог сборки с ошибкой, а версия, которая работала раньше, продолжает работать.

Можно ли деплоить приложение на TanStack Start из GitHub при каждом пуше?

Да. Один раз задеплойте папку командой pethost deploy, затем запустите pethost github owner/repository. С этого момента каждый пуш в репозиторий деплоится сам, а pethost rollback возвращает к более раннему коммиту.

Сколько стоит хостинг приложения на TanStack Start на Pethost?

9,99 € в месяц за Starter с 2 vCPU, 3 GB и 30 GB, без платы за проект и без оплаты за запросы: там же работают ваши другие приложения, сайты и базы данных. Бесплатного тарифа нет. Цены без НДС.

На экранах — деплои приложения, которое пишет npx @tanstack/cli@latest create --deployment nitro, с TanStack Start 1.168.61, Nitro 3.0.260610-beta и pethost 0.2.1 на нашей тестовой машине, которая до этого ничего не собирала. Аккаунт на них — пример, sam.

  1. TanStack Start: хостинг
  2. TanStack Start: быстрый старт
  3. pethost, командная строка Pethost

Запустите свои проекты уже сегодня

Деплойте приложения, ботов и базы данных из агента, с GitHub или в браузере, сколько поместится, по одной фиксированной цене. Ничего по счётчику, ничего сверху.

Разместить проекты за 9,99 €/мес