Тут я поделюсь опытом, как развернуть приложение на react + java на linux стенде.

В качестве http сервера будем использовать nginx

Считаем, что фронт и бек уже написаны. Фронт поднимается на localhost:3000, бек, пусть на localhost:8080/rest, и также настроена поддержка CORS

Разворачивать будем на https://host.name

Перенастроим адрес бека в react на https://host.name/rest, в беке пропишем адрес для cors https://host.name

Закинем фронт в /var/www/ui, бек в /opt/backend. Пути тут не принципиальны, но принято именно туда закидывать, будем придерживаться стандартов, дабы не усложнять будущую поддержку.

Доконфигурируем UI. В package.json добавим параметр, это нужно, что бы если фронт будем разворачивать не в корне, а по какому-нибудь context path, react подгружал статики по относительному пути, а не от корня

Сконфигурируем nginx. Тут важные моменты — alias, к слову если мапите в корень, то можно пропустить пункт с доконфигом UI, и без этого будет работать.

Теперь для бека. Тут настроим проксирование. Сервер же у нас настроен правильно, порты закрыты, кроме 443 и 80. Так что без этого не заработает

На этом готово! Можно радоваться рабочему приложению!