Необходим ли сервер npm для ReactJS с django на производстве?
Я разработал приложение с помощью DJango + ReactJS
при разработке, используя
$python manage.py runserver
и
$yarn start
, который запускает два сервера на localhost:8000
и localhost:3000
Однако в производственной среде мне нужно запустить два сервера?
Когда я использую webpack, я запускаю два сервера в среде разработки, но в Production просто собираю заранее и использую только на одном сервере uwsgi
Можно запустить под одним сервером напрямую, я поделюсь и другими способами.
Сделайте сборку yarn и обслуживайте под статические файлы Django + слушайте js/css/image активы. Теперь о маршрутизации, вам нужно захватить маршруты фронтенда таким образом, чтобы (когда вводится прямой url), Django сам отвечал статическими активами.
Недостатком вышеописанного является то, что урлы ваших API должны следовать некоторому шаблону, который не будет мешать URI (маршрутам) фронтенда.
Запуск двух серверов + CORS
Упакуйте вашу сборку react с expressjs и обслуживайте ее с помощью какого-нибудь сервера производственного уровня, например pm2/ можно использовать nginx + статические файлы, но чтобы решить проблему маршрутов (React), вам нужно настроить nginx, чтобы он слушал не только "/", но и другие маршруты во frontend.
Теперь, вызывая API django, включите конфигурацию CORS для поддержки вызова API с вашего React сайта.
Можно также использовать serverless для передачи статических файлов + CORS за сценой.
Если у вас нет доступа к корню сервера, то в этом случае вам понадобится дополнительный корень. Иначе раскрутка процесса frontend + backend на одной серверной машине не принесет большой пользы.
Удачи!