Как развернуть приложение React с помощью Nginx в Ubuntu
Введение
Вы можете быстро развернуть приложения React на сервере, используя стандартный инструмент сборки Create React App. Скрипт build
компилирует приложение в единый каталог, содержащий весь код JavaScript, изображения, стили и файлы HTML. Поскольку ресурсы находятся в одном месте, их можно развернуть на веб-сервере с минимальной настройкой.
В этом руководстве вы развернете приложение React на своем локальном компьютере на сервере Ubuntu под управлением Nginx. Вы создадите приложение с помощью Create React App, используете файл конфигурации Nginx, чтобы определить, где развертывать файлы, и безопасно скопируете каталог сборки и его содержимое на сервер. К концу этого руководства вы сможете создать и развернуть приложение React.
Предварительные условия
Если вы используете Ubuntu версии 16.04 или ниже, мы рекомендуем вам обновиться до более последней версии, поскольку Ubuntu больше не поддерживает эти версии. Этот сборник руководств поможет вам обновить версию Ubuntu.
Чтобы следовать этому руководству, вам понадобится:
Сервер под управлением Ubuntu вместе с пользователем без полномочий root с привилегиями
sudo
и активным брандмауэром. Для получения инструкций по их настройке выберите свой дистрибутив из этого списка и следуйте нашему Руководству по первоначальной настройке сервера. Чтобы получить доступ по SSH к дроплету DigitalOcean, прочтите «Как подключиться к дроплету с помощью SSH».-
На вашем локальном компьютере вам понадобится среда разработки Node.js. Чтобы установить это в macOS или Ubuntu, следуйте руководству «Как установить Node.js в Ubuntu 22.04/20.04/18.04».
Nginx установлен согласно этому руководству для Ubuntu 22.04/20.04/18.04. Убедитесь, что у вас есть блокировка серверов для вашего домена. В этом руководстве в качестве примера будет использоваться
/etc/nginx/sites-available/your_domain
.Рекомендуется также защитить свой сервер с помощью сертификата HTTPS. Вы можете сделать это с помощью руководства «Как защитить Nginx с помощью Let’s Encrypt в Ubuntu 22.04/20.04/18.04».
Зарегистрированное доменное имя или IP-адрес сервера.
Если вы используете доменное имя, вам необходимо настроить обе эти записи DNS для вашего сервера. Если вы используете DigitalOcean, ознакомьтесь с нашей документацией по DNS, чтобы узнать, как их добавить.
- Запись A с
your_domain
, указывающая на общедоступный IP-адрес вашего сервера.
- Запись A с
- Запись A с
www.your_domain
, указывающая на общедоступный IP-адрес вашего сервера.
Вам также потребуются базовые знания JavaScript, HTML и CSS, которые вы можете найти в наших сериях «Как создать веб-сайт с помощью HTML», «Как создать веб-сайт с помощью CSS» и «Как писать код на JavaScript».
Как развернуть приложение React с помощью Nginx
- Создать проект React
- Найдите файл развертывания на сервере Ubuntu
- Загрузить файлы сборки
Шаг 1 — Создание проекта React
На этом этапе вы создадите приложение с помощью Create React App и создадите развертываемую версию шаблонного приложения.
Для начала создайте новое приложение с помощью Create React App в своей локальной среде. В терминале запустите команду для создания приложения. В этом руководстве проект будет называться react-deploy
:
npx create-react-app react-deploy
Команда npx
запустит пакет Node, не загружая его на ваш компьютер. Скрипт create-react-app
установит все зависимости, необходимые для вашего приложения React, и создаст базовый проект в каталоге react-deploy
. Дополнительную информацию о создании приложения React можно найти в руководстве «Как настроить проект React с помощью приложения Create React».
Код будет работать в течение нескольких минут, пока загружается и устанавливается зависимости. По завершении вы получите сообщение об успехе. Ваша версия может немного отличаться, если вы используете yarn
вместо npm
:
Success! Created react-deploy at your_file_path/react-deploy
Inside that directory, you can run several commands:
npm start
Starts the development server.
npm build
Bundles the app into static files for production.
npm test
Starts the test runner.
npm eject
Removes this tool and copies build dependencies, configuration files
and scripts into the app directory. If you do this, you can’t go back!
We suggest that you begin by typing:
cd react-deploy
npm start
Happy hacking!
Следуя предложению в выводе, сначала перейдите в папку проекта:
cd react-deploy
Теперь, когда у вас есть базовый проект, запустите его локально, чтобы проверить, как он будет выглядеть на сервере. Запустите проект с помощью скрипта npm start
:
npm start
Когда команда запустится, вы получите вывод с информацией о локальном сервере:
Compiled successfully!
You can now view react-deploy in the browser.
Local: http://localhost:3000
On Your Network: http://192.168.1.110:3000
Note that the development build is not optimized.
To create a production build, use npm build.
Откройте браузер и перейдите по адресу http://localhost:3000
. Вы сможете получить доступ к шаблонному приложению React:
Остановите проект, введя в терминале либо CTRL+C
, либо ⌘+C
.
Теперь, когда у вас есть проект, который успешно работает в браузере, вам необходимо создать производственную сборку. Запустите сценарий сборки create-react-app
со следующим:
npm run build
Эта команда скомпилирует JavaScript и ресурсы в каталог build
. Когда команда завершится, вы получите вывод с данными о вашей сборке. Обратите внимание, что имена файлов содержат хэш, поэтому ваш вывод будет немного отличаться:
Creating an optimized production build...
Compiled successfully.
File sizes after gzip:
41.21 KB build/static/js/2.82f639e7.chunk.js
1.4 KB build/static/js/3.9fbaa076.chunk.js
1.17 KB build/static/js/runtime-main.1caef30b.js
593 B build/static/js/main.e8c17c7d.chunk.js
546 B build/static/css/main.ab7136cd.chunk.css
The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.
The build folder is ready to be deployed.
You may serve it with a static server:
serve -s build
Find out more about deployment here:
https://cra.link/deployment
Каталог build
теперь будет содержать скомпилированные и минимизированные версии всех файлов, необходимых для вашего проекта. На этом этапе вам не нужно беспокоиться ни о чем за пределами каталога build
. Все, что вам нужно сделать, это развернуть каталог на сервере.
На этом этапе вы создали новое приложение React. Вы убедились, что приложение работает локально, и создали рабочую версию с помощью сценария Create React App build
. На следующем шаге вы войдете на свой сервер и узнаете, куда скопировать каталог build
.
Шаг 2 — Определение местоположения файла развертывания на вашем сервере Ubuntu
На этом этапе вы начнете развертывать приложение React на сервере. Но прежде чем вы сможете загрузить файлы, вам необходимо определить правильное расположение файлов на вашем сервере развертывания. В этом руководстве в качестве веб-сервера используется Nginx, но с Apache подход тот же (Ubuntu 22.04/Ubuntu 20.04/Ubuntu 18.04). Основное отличие состоит в том, что файлы конфигурации будут находиться в другом каталоге.
Чтобы найти каталог, который веб-сервер будет использовать в качестве корневого каталога вашего проекта, войдите на свой сервер, используя ssh
:
ssh username@server_ip
Оказавшись на сервере, найдите конфигурацию вашего веб-сервера в /etc/nginx/sites-enabled
. Существует также каталог под названием sites-allowed
; этот каталог содержит конфигурации, которые не обязательно активированы. Найдя файл конфигурации, отобразите вывод в терминале с помощью следующей команды:
cat /etc/nginx/sites-enabled/your_domain
Если на вашем сайте нет сертификата HTTPS, вы получите примерно такой результат:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
Если вы выполнили необходимое условие Let’s Encrypt для защиты вашего сервера Ubuntu, вы получите следующий вывод:
server {
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.your_domain) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = your_domain) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 404; # managed by Certbot
}
В любом случае наиболее важным полем для развертывания вашего приложения React является root
. Это направляет HTTP-запросы в каталог /var/www/your_domain/html
. Это означает, что вы скопируете свои файлы в это место. В следующей строке вы можете видеть, что Nginx будет искать файл index.html
. Если вы заглянете в локальный каталог build
, вы увидите файл index.html
, который будет служить основной точкой входа.
Выйдите из сервера Ubuntu и вернитесь в локальную среду разработки.
Теперь, когда вы знаете расположение файла, который будет обслуживать Nginx, вы можете загрузить свою сборку.
Шаг 3. Загрузка файлов сборки с помощью** **scp
На этом этапе ваши файлы build
готовы к работе. Все, что вам нужно сделать, это скопировать их на сервер. Быстрый способ сделать это — использовать scp
для копирования файлов в нужное место. Команда scp
— это безопасный способ копирования файлов на удаленный сервер с терминала. Команда использует ваш ключ ssh
, если он настроен. В противном случае вам будет предложено ввести имя пользователя и пароль.
Формат команды: scp files_to_copy username@server_ip:path_on_server
. Первым аргументом будут файлы, которые вы хотите скопировать. В этом случае вы копируете все файлы в каталоге build
. Второй аргумент — это комбинация ваших учетных данных и пути назначения. Путь назначения будет таким же, как root
в вашей конфигурации Nginx: /var/www/ваш_домен/html
.
Скопируйте все файлы build
, используя подстановочный знак *
, в /var/www/your_domain/html
:
scp -r ./build/* username@server_ip:/var/www/your_domain/html
Когда вы запустите команду, вы получите вывод, показывающий, что ваши файлы загружены. Ваши результаты будут немного отличаться:
asset-manifest.json 100% 1092 22.0KB/s 00:00
favicon.ico 100% 3870 80.5KB/s 00:00
index.html 100% 3032 61.1KB/s 00:00
logo192.png 100% 5347 59.9KB/s 00:00
logo512.png 100% 9664 69.5KB/s 00:00
manifest.json 100% 492 10.4KB/s 00:00
robots.txt 100% 67 1.0KB/s 00:00
main.ab7136cd.chunk.css 100% 943 20.8KB/s 00:00
main.ab7136cd.chunk.css.map 100% 1490 31.2KB/s 00:00
runtime-main.1caef30b.js.map 100% 12KB 90.3KB/s 00:00
3.9fbaa076.chunk.js 100% 3561 67.2KB/s 00:00
2.82f639e7.chunk.js.map 100% 313KB 156.1KB/s 00:02
runtime-main.1caef30b.js 100% 2372 45.8KB/s 00:00
main.e8c17c7d.chunk.js.map 100% 2436 50.9KB/s 00:00
3.9fbaa076.chunk.js.map 100% 7690 146.7KB/s 00:00
2.82f639e7.chunk.js 100% 128KB 226.5KB/s 00:00
2.82f639e7.chunk.js.LICENSE.txt 100% 1043 21.6KB/s 00:00
main.e8c17c7d.chunk.js 100% 1045 21.7KB/s 00:00
logo.103b5fa1.svg 100% 2671 56.8KB/s 00:00
Когда команда завершится, все будет готово. Поскольку проект React состоит из статических файлов, для которых нужен только браузер, вам не нужно настраивать какой-либо дополнительный язык на стороне сервера. Откройте браузер и перейдите к своему доменному имени. Когда вы это сделаете, вы найдете свой проект React:
На этом этапе вы развернули приложение React на сервере. Вы узнали, как определить корневой веб-каталог на вашем сервере, и скопировали файлы с помощью scp
. Когда файлы завершили загрузку, вы смогли просмотреть свой проект в веб-браузере.
Заключение
Развертывание приложений React — это быстрый процесс при использовании Create React App. Вы запускаете команду build
, чтобы создать каталог всех файлов, необходимых для развертывания. После запуска сборки вы копируете файлы в нужное место на сервере, размещая свое приложение в Интернете.
Если вы хотите прочитать больше руководств по React, посетите нашу страницу тем React или вернитесь на страницу серии «Как писать код в React.js».
Автор выбрал Creative Commons для получения пожертвования в рамках программы Write for DOnations.