- 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.conflocation /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-скрипты для автоматизации, делай бэкапы, следи за безопасностью. И пусть твой фронтенд светит ярче, чем у конкурентов!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.