- Home »

Развёртывание React-приложения с помощью Nginx на Ubuntu
Попробуем разобраться, как быстро закинуть своё React-приложение на сервер с Ubuntu, чтобы оно бодро крутилось под Nginx. Эта статья для тех, кто устал от красоты локального npm start
и решил показать миру свой фронтенд — с SSL, красивым доменом и адекватной скоростью. Поговорим, как за 15 минут собрать, развернуть и запустить React под Nginx, не наступив на типовые грабли. Будет пара живых кейсов, советы по автоматизации и немного (но вкусно) про альтернативы.
Как это вообще работает?
- Собираем React-приложение: в папке
build
оказывается кучка статических файлов (HTML, JS, CSS, медиа). - Nginx выступает в роли прокси/веб-сервера: он раздаёт статику и умеет проксировать запросы на API.
- Ubuntu — просто надёжная ОС, которую легко настраивать и автоматизировать.
На пальцах: вот ты сделал npm run build
, залил на сервер, подрубил конфиг Nginx — и сайт уже в сети. Single Page Application феноменально быстро грузится, HTTPS подключается одной командой — кто бы мог подумать ещё пару лет назад?
Express Setup: Разворачиваем React под Nginx на Ubuntu
- Собираем приложение локально (или на сервере — как нравится):
cd my-react-app
npm run build
- Устанавливаем Nginx на Ubuntu:
sudo apt update
sudo apt install nginx
- Копируем build на сервер:
scp -r build/ user@your_server:/var/www/myapp
- Можно закинуть через
rsync
или залить через GitHub Actions — автоматизация наше всё.
- Можно закинуть через
- Делаем простой конфиг для Nginx:
sudo nano /etc/nginx/sites-available/myapp
server { listen 80; server_name yourdomain.com; root /var/www/myapp; index index.html; location / { try_files $uri /index.html; } }
- Активируем сайт:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
- Активируем сайт:
- Бонус: включаем бесплатный SSL через Let’s Encrypt (рекомендуется):
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
Таблица: Быстрые команды и что делают
Команда | Зачем нужна | Альтернатива |
---|---|---|
npm run build |
Собрать статику React в production-варианте | yarn build |
sudo apt install nginx |
Установить веб-сервер на Ubuntu | aptitude install nginx |
sudo systemctl reload nginx |
Перезапустить nginx без остановки сервиса | sudo service nginx reload |
scp -r build/ user@host:/var/www/myapp |
Скопировать build на сервер | rsync -av build/ user@host:/var/www/myapp |
certbot --nginx -d domain |
Быстро получить SSL-сертификат | acme.sh , ручной OpenSSL |
Похожие решения & альтернативы
- serve (https://www.npmjs.com/package/serve) — npm-пакет для локального и простого прод-сервера без Nginx. Прекрасен для тестов или микросервисов.
- Caddy (https://caddyserver.com/) — модный автоконфигурируемый сервер, любит HTTPS “из коробки”, часто проще Nginx для начинающих.
- Apache2 — ещё один монстр, но с React редко используют.
- PM2 + Express.js — если хочешь оборачивать React в Node.js (например, SSR или бэкенд на том же сервере).
Плюсы/Минусы: Nginx vs. Другие Способы
Способ | Плюсы | Минусы |
---|---|---|
Nginx + статика | Скорость, надёжность, автоматизация, легко масштабируется | Нужно ручками конфигурировать перенаправления, заголовки CORS |
serve | Запустить в одну команду, npm install и всё | Не для продакшена, слабее по безопасности |
Caddy | Автоматический SSL, юзер-френдли конфиги | Меньше туториалов, необычный синтаксис |
Кейсы и интересные находки
- Скрипты для автообновления — связка
git pull
+npm run build
+rsync
превращает сервер в CI/CD ласточку. - Можно скрыть API-сервер за прокси: допиши в
nginx.conf
location /api/ { proxy_pass http://localhost:PORT; }
и вся магия на одном домене. - Nginx быстро режет DDOS, а ещё умеет GZIP сжимать ваши
.js
файлы — экономия трафика, быстрее для юзера. - Ставили React-приложения в Docker-контейнеры с Alpine — Nginx с React влазит в 40 МБ, можно ворочать как угодно.
- Иногда забывают про
try_files $uri /index.html
— и роутинг падает при обновлении страницы (404). Не забывай!
Автоматизация и скрипты: что нового можно?
- Собрал
build
— сразу пушнул на сервер через Git, где хук автоматом разворачивает статику (см. Gitea, GitHub Actions). - Мониторинг статуса через
curl -I https://вашдомен/
— легко встроить вbash
-скрипт и оповещать в Telegram о падениях. - Переиспользуй конфиги через
include
— сразу десятки приложений на одном сервере.
Выводы & Рекомендации
Деплой React-приложения на Ubuntu с помощью Nginx — реально просто, когда понимаешь суть: собрать, скопировать, настроить. Производительность и гибкость выше, чем у всяких serve
, а автоматизация и безопасность на уровне. Хочется меньше возиться с конфигами — смотри в сторону Caddy. Для продакшн-проектов — только Nginx с SSL.
- Поднимай на VPS или на выделенном сервере — будет стабильно, быстро, масштабируемо.
- Документация по Nginx: https://nginx.org/ru/docs/
- React и Create React App: https://create-react-app.dev/docs/deployment/
- Let’s Encrypt: https://letsencrypt.org/
Пиши bash-скрипты для автоматизации, делай бэкапы, следи за безопасностью. И пусть твой фронтенд светит ярче, чем у конкурентов!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.