Вот один из способов сделать это (использовать сервер узлов в качестве API для веб-сайта React, обслуживаемого сервером Apache).
Вы можете оставить nodejs работающим на порту 5000 (на удаленном сервере), но убедитесь, что вы используете не localhost
, а 0.0.0.0
.
есть. app.listen(5000, "0.0.0.0")
;
Теперь вы должны иметь возможность общаться с сервером узла через публичное имя IP / DNS на этом порту, т.е. myPublicIpOrDNSname: 5000 . (при условии, что вы установили nodejs
, а также npm
=>, будьте осторожны с версией, apt-get install nodejs
по умолчанию выберет более старую версию)
Если вам нужна более новая версия nodejs
, вы можете получить ее, выполнив следующие действия (вы можете заменить эту деталь setup_8.x
предпочитаемой версией).
cd ~
curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt-get install nodejs
Используйте сервер Apache2 для обслуживания ваших статических (React, css, ...) файлов (вам не нужно запускать create-react-app server
).
sudo apt-get update
sudo apt-get install apache2
Создайте свой проект React, используя npm run build
, а затем поместите файлы, созданные в папке /build
(в папке React), на /var/www/html
(на удаленном сервере). Обратите внимание, что вам нужно поместить туда файлы и папки из папки /build
, а не из самой папки /build
.
Теперь вы можете видеть, как работает ваш реагирующий веб-сайт, когда вы вводите адрес myPublicIpOrDNSname (при условии, что Apache работает sudo systemctl start apache2
).
Для правильной работы Apache (если вы используете интерфейсную маршрутизацию - т.е. react-router-dom
), вам нужно перейти на /etc/apache2/sites-enabled/000-default.conf
и поместить эту конфигурацию
<Directory "/var/www/html">
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
</Directory>
в разделе <VirtualHost ...>
в этом файле. (Apache не знает о ваших маршрутах React. Это заставит его отправлять каждый запрос, который он не знает, как обработать в корень, и оставить React обрабатывать маршрутизацию)
Затем необходимо убедиться, что RewriteEngine работает (в противном случае вы получите сообщение об ошибке при перезапуске сервера Apache).
sudo a2enmod rewrite
Наконец, перезапустите сервер Apache
sudo /etc/init.d/apache2 restart
Теперь все должно работать.
Обратите внимание, что вам нужно изменить ваши вызовы ajax в вашем React с новым публичным IP / DNS.