Українська

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

Як задеплоїти застосунок на 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 повертає версію, що була перед поточною, а ваша машина зберігає три версії перед нею. Усе це може зробити за вас AI-агент через 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 €/міс