Русский

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

Как задеплоить приложение на React Router в 2026: Dockerfile шаблона, одна команда и HTTPS

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

Вы создали приложение с помощью create-react-router, оно рендерится на сервере, и вы хотите выложить его по адресу с HTTPS. В стандартном шаблоне уже есть Dockerfile, а на Pethost проекту больше ничего не нужно: запустите pethost deploy в папке приложения. В первый раз шаблон собрался и запустился за 11 секунд и ответил 200 по своему новому адресу.

Коротко
  • Одна команда: pethost deploy в папке, которую создал create-react-router. В приложение ничего не добавляется, и заполнять настройки сборки не нужно.
  • Что она делает: загружает папку, собирает собственный Dockerfile шаблона на вашей машине и запускает react-router-serve.
  • Порт: сервер слушает 3000. Pethost сам это находит и направляет туда адрес по HTTPS.
  • Адрес: https://my-app.yourname.pethost.app, сразу. Свой домен — одна DNS-запись.
  • Цена: 9,99 € в месяц за 2 vCPU, 3 GB и 30 GB — для этого приложения и всех остальных ваших проектов. Бесплатного тарифа нет.

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

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

Приложение здесь — стандартный шаблон, с рендерингом на сервере и Tailwind CSS:

npx create-react-router@latest my-app

Он оставляет package.json, package-lock.json, папку app/ и Dockerfile. Скрипты приложения — как раз те, которые запускает Dockerfile:

"scripts": {
  "build": "react-router build",
  "dev": "react-router dev",
  "start": "react-router-serve ./build/server/index.js",
  "typecheck": "react-router typegen && tsc"
}

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

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

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

Деплой приложения на React Router одной командой

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

$ cd my-app
$ pethost deploy
Name it [my-app]:    it will live at https://my-app.sam.pethost.app
✓ Packed 22 files, 174 KB   (left out node_modules)
✓ Uploaded straight to your machine
✓ Built and started in 11 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: сборка ставит их там, из package-lock.json.
  3. Машина собирает Dockerfile Это собственный файл шаблона, без изменений. Строка под ним говорит о единственном, что добавила машина: Compose-файл вокруг Dockerfile с сервисом app.
  4. Приложение запускается и отвечает Машина видит, что сервер слушает 3000, и направляет туда адрес. Затем pethost сам открывает адрес и печатает, что тот ответил: 200.

Мы открыли задеплоенный шаблон так, как его открывает посетитель. Главная страница ответила 200 с HTML, отрендеренным на сервере, /favicon.ico ответил 200, а адрес без маршрута ответил 404 со страницей ошибки самого React Router.

Файл .pethost говорит, какому проекту соответствует эта папка. Закоммитьте его, и следующий деплой ничего не спросит.

Dockerfile шаблона React Router

Вот файл, который написал create-react-router и который машина собрала как есть:

FROM node:24-alpine AS development-dependencies-env
COPY . /app
WORKDIR /app
RUN npm ci

FROM node:24-alpine AS production-dependencies-env
COPY ./package.json package-lock.json /app/
WORKDIR /app
RUN npm ci --omit=dev

FROM node:24-alpine AS build-env
COPY . /app/
COPY --from=development-dependencies-env /app/node_modules /app/node_modules
WORKDIR /app
RUN npm run build

FROM node:24-alpine
COPY ./package.json package-lock.json /app/
COPY --from=production-dependencies-env /app/node_modules /app/node_modules
COPY --from=build-env /app/build /app/build
WORKDIR /app
CMD ["npm", "run", "start"]

Три вещи, которые о нем стоит знать на Pethost:

Приложение без Dockerfile тоже не застрянет. В папке, где нет ни Dockerfile, ни Compose-файла, pethost deploy пишет Dockerfile для тех видов проектов, которые знает, — как для приложения на Nuxt, — а для любой другой папки объясняет, почему не написал его.

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

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

$ pethost deploy
my-app (.pethost)
✓ Packed 23 files · uploaded · built and started in 6 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 github sam/my-app          # from now on, every push deploys itself

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

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

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

pethost env set SESSION_SECRET

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

pethost domain add app.example.com

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

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

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

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

Каждый проект подписан. Семь проектов на одной машине Starter: приложения с их адресами и запросами за последние сутки, базы данных с приложениями, которые их используют.
Главная страница панели Pethost: CPU, память и диск машины и ее проекты в виде карточек.

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

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

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

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

Вопросы

Где захостить приложение на React Router с серверным рендерингом?

У любого хостинг-провайдера, который запускает Node-сервер или Docker-контейнер. На Pethost вы запускаете pethost deploy в папке приложения: машина собирает Dockerfile шаблона, запускает react-router-serve и отдает приложение по HTTPS.

Нужно ли менять Dockerfile, который пишет create-react-router?

Нет. Машина собрала Dockerfile стандартного шаблона как есть. В нем нет строки EXPOSE, и она не нужна: Pethost сам находит порт, который слушает сервер, — 3000.

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

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

Как задать переменные окружения для приложения на React Router?

Запустите pethost env set NAME в папке приложения. Команда спросит значение, не показывая его, и запишет его в файл .env проекта на машине, который читает сервер и сохраняет каждый следующий деплой.

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

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

На экранах — деплои стандартного шаблона, который пишет create-react-router, с React Router 8.4.0 и pethost 0.2.1 на нашей тестовой машине. Аккаунт на них — пример, sam.

  1. React Router: установка
  2. React Router: деплой
  3. React Router: официальные шаблоны
  4. pethost, командная строка Pethost

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

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

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