Блог · Гайды по деплою
Как задеплоить приложение на React Router в 2026: Dockerfile шаблона, одна команда и HTTPS
Вы создали приложение с помощью 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
- Она спрашивает одно Имя проекта — первое слово его адреса. Enter берет имя папки.
- Папка уходит на вашу машину Без
node_modules: сборка ставит их там, изpackage-lock.json. - Машина собирает Dockerfile Это собственный файл шаблона, без изменений. Строка под ним говорит о единственном, что добавила машина: Compose-файл вокруг Dockerfile с сервисом
app. - Приложение запускается и отвечает Машина видит, что сервер слушает 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:
- Ему нужен lockfile. Оба шага
npm ciчитаютpackage-lock.json, так что держите его и в папке, и в репозитории. - Порт не объявлен. В файле нет строки
EXPOSE, и она не нужна: машина сама находит порт, который слушает работающий сервер. - Работающее приложение занимает мало. В последнем этапе только зависимости для продакшена и результат сборки. Работающий шаблон занял 79 MB памяти.
Приложение без 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 этой памяти, так что на машине остается место для базы данных приложения, воркера и других ваших проектов. Платы за проект нет, и ничего не считается по счетчику: серверный рендеринг не оплачивается за каждый запрос, а загруженный месяц стоит столько же, сколько спокойный.
- 9,99 € в месяц за все ваши проекты, без счетчиков
- 11 с на сборку и запуск шаблона в первый раз
- 79 MB памяти на работающее приложение
Что уже сделано за вас: HTTPS с сертификатами, которые продлеваются сами, деплои из GitHub, ночные бэкапы, которые хранятся 14 дней, SSH в любой контейнер и учет каждого запроса — с самыми популярными путями и долей ошибок за последние 30 дней. Машина всегда включена, поэтому первый утренний запрос никогда не ждет холодного старта. Тарифы — в разделе цен на главной странице.
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.
- React Router: установка
- React Router: деплой
- React Router: официальные шаблоны
- pethost, командная строка Pethost
Запустите свои проекты уже сегодня
Деплойте приложения, ботов и базы данных из агента, с GitHub или в браузере, сколько поместится, по одной фиксированной цене. Ничего по счётчику, ничего сверху.