Как деплоить React приложение: от сборки до продакшена
30 марта 2026 г.
После того как вы написали React-приложение, наступает ключевой этап — деплой (развертывание) на сервер, чтобы оно стало доступно пользователям. В этом гайде мы подробно разберем, как подготовить приложение к продакшену, настроить веб-сервер и автоматизировать процесс. Вы научитесь создавать оптимизированную сборку, настраивать Nginx для корректной работы клиентской маршрутизации и интегрировать деплой в CI/CD пайплайн.
1. Подготовка React приложения к деплою
Перед тем как выкладывать приложение в публичный доступ, необходимо собрать его production-версию. В этом процессе React-код транспилируется, минифицируется и оптимизируется для лучшей производительности.
Создание production-сборки
Если вы использовали create-react-app, сборка выполняется одной командой:
npm run build
Эта команда создаст папку build (или dist для Vite), содержащую статические файлы: HTML, CSS, JavaScript и медиа. Именно содержимое этой папки нужно будет скопировать на сервер.
Если вы используете Vite, команда будет:
npm run build
Результат сборки по умолчанию находится в папке dist. Убедитесь, что в вашем package.json скрипт build настроен корректно.
Анализ сборки и оптимизация
Перед деплоем полезно проанализировать размер бандла, чтобы избежать медленной загрузки. Для этого можно использовать инструменты:
- Source Map Explorer:
npx source-map-explorer build/static/js/*.js - Vite Bundle Visualizer:
npm run build -- --report(требует настройки плагина)
Основные рекомендации по оптимизации:
- Используйте lazy loading для маршрутов с помощью
React.lazy()иSuspense. - Настройте code splitting (по умолчанию работает в CRA и Vite).
- Убедитесь, что неиспользуемые зависимости удалены из проекта.
Что такое деплой React приложения и как выбрать инфраструктуру
Деплой React приложения — это процесс размещения собранных статических файлов на сервере, доступном по сети. Поскольку React-приложение после сборки представляет собой набор статики, вы можете выбрать различные варианты хостинга:
- Статический хостинг: Netlify, Vercel, GitHub Pages. Самый простой и быстрый способ, часто с бесплатным тарифом и автоматическим деплоем из Git.
- Облачные хранилища: AWS S3, Google Cloud Storage. Требуют настройки, но дают полный контроль.
- Виртуальный выделенный сервер (VPS): Selectel, DigitalOcean, Hetzner. Максимальная гибкость: вы сами управляете веб-сервером (Nginx, Apache) и окружением.
- Платформенный хостинг (PaaS): Heroku, Render. Подходят, если нужно быстро запустить приложение без низкоуровневой настройки, но для статики часто менее удобны, чем специализированные решения.
Для большинства проектов статического хостинга или VPS будет достаточно. Выбор зависит от потребностей: если вам нужны серверные вычисления, прокси или кастомизированная конфигурация, лучше выбрать VPS. Например, хостинг сайтов Selectel предлагает виртуальные серверы с широкими возможностями настройки.
Настройка веб-сервера для React приложения
Если вы выбрали VPS, вам потребуется установить и настроить веб-сервер. Самый популярный выбор — Nginx благодаря производительности и гибкости.
Настройка Nginx для одностраничного приложения (SPA)
Главная особенность SPA — клиентская маршрутизация. При обновлении страницы или прямом переходе по URL сервер должен всегда отдавать index.html, иначе вы получите ошибку 404. Вот базовая конфигурация Nginx, которая решает эту проблему:
server {
listen 80;
server_name example.com;
root /var/www/my-react-app/build;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
Разберем ключевые моменты:
try_files $uri $uri/ /index.html— если запрошенный файл не найден, отдаетсяindex.html, что позволяет React Router корректно обработать маршрут.- Для статических ресурсов (js, css, изображения) установлена максимальная продолжительность кеширования (
expires max), так как в production-сборке имена файлов содержат хэши содержимого.
Управление кешированием
Правильное кеширование критически важно для производительности. Для файлов с хэшами (обычно в build/static) мы устанавливаем долгосрочное кеширование. Для index.html рекомендуется отключить кеширование или установить короткое время, чтобы пользователи всегда получали актуальную версию приложения:
location = /index.html {
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
Автоматизация деплоя с помощью CI/CD
Ручное копирование файлов на сервер после каждого обновления — процесс, чреватый ошибками. Настройка CI/CD позволяет автоматизировать сборку и деплой при пуше в репозиторий.
Пример GitHub Actions для деплоя на VPS
Предположим, вы используете GitHub и VPS. Вот пример workflow, который собирает приложение и загружает его на сервер через SSH:
name: Deploy React App
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run build
- name: Deploy to VPS
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-rlgoDzvc -i"
SOURCE: "build/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
Не забудьте добавить секреты в настройках репозитория: закрытый SSH-ключ, хост, пользователя и путь к целевой папке. После каждого пуша в main новый код будет автоматически развернут.
Для статического хостинга (Netlify, Vercel) процесс еще проще: достаточно связать репозиторий, и каждый пуш в указанную ветку автоматически запускает сборку и деплой.
Распространенные ошибки при деплое React приложений
Даже при правильной настройке могут возникать проблемы. Рассмотрим самые частые и способы их решения.
- Ошибка 404 при перезагрузке страницы — сервер не настроен на отдачу
index.htmlдля всех маршрутов. Решение: добавитьtry_files $uri $uri/ /index.htmlв конфигурации Nginx или аналогичную настройку для Apache. - Пустая страница или ошибки CORS — возможно, в сборке указаны неверные пути. Проверьте
homepageвpackage.jsonдля CRA илиbaseв конфигурации Vite. Если приложение размещено в подпапке, это обязательно нужно указать. - Устаревший контент после обновления — проблема кеширования. Убедитесь, что
index.htmlне кешируется браузером и CDN. ИспользуйтеCache-Control: no-cacheдля этого файла. - Медленная загрузка первого экрана — бандл слишком большой. Используйте code splitting, сжатие gzip или brotli на сервере, а также оптимизируйте изображения.
Заключение
Деплой React приложения — это не просто копирование файлов на сервер. Правильный подход включает оптимизированную сборку, грамотную настройку веб-сервера с учетом особенностей SPA и автоматизацию процесса. Независимо от того, выберете вы статический хостинг или VPS, соблюдение этих принципов обеспечит быструю загрузку и надежную работу вашего приложения.
Если вы планируете использовать VPS для размещения, обратите внимание на надежного провайдера. хостинг сайтов Selectel предлагает гибкие тарифы и удобную панель управления, что упрощает настройку серверов под ваши задачи.
Что почитать дальше
Дополнительные материалы из архива, которые могут быть полезны после этой статьи.
Production-ready запуск React-приложения: от сборки до деплоя
Полное руководство по подготовке React-приложения к production: оптимизация сборки, настройка сервера, управление конфи…
Читать далее
Полное руководство по CI/CD для Next.js в GitLab: от базовой настройки до продакшн-пайплайна
Подробное руководство по настройке CI/CD для Next.js приложений с GitLab CI. Разбираем каждый этап пайплайна, кэширован…
Читать далее
Самые популярные вопросы по Next.js на собеседовании: разбор с примерами
Собрали 30+ самых частых вопросов по Next.js для подготовки к собеседованию. Разбираем App Router, Server Components, р…
Читать далее