Я пытаюсь запустить потоковую службу из модифицированной версии репо с открытым исходным кодом. https://github.com/nabendu82/streams.
У меня есть клиент-клиент в React, RTMP-сервер для поток и бэкэнд API. У меня есть docker compose файл для размещения их всех вместе. Если я запускаю docker-compose up
на моем локальном компьютере, все работает отлично. Я могу посетить http://localhost: 3000 / совпадений / просмотр и увидеть два потока windows, которые не загружены, пока я не открою программу потокового вещания OBS, Settings -> Stream -> Server: rtmp://localhost/live, Stream Key: 7.
Затем откроется окно правого потока .
Чтобы разместить этот репозиторий на inte rnet, я создал базовый c EC2 экземпляр на AWS (http://13.54.200.18: 3000 / совпадений / просмотр ) , Я установил docker-compose
и скопировал все файлы репо до него.
Однако при работе на коробке AWS поток не загружается, и ошибка консоли всегда впечатляюще бесполезна:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://server:3002/streams/6. (Reason: CORS request did not succeed).
Так что по какой-то причине CORS не позволяет веб-интерфейсу React считывать серверную часть сервера, пока он находится на AWS.
Вот подвох. Я могу заставить потоковую передачу на хост-сайте AWS работать, но только запустив docker-compose up
на моем ЛОКАЛЬНОМ компьютере одновременно. По какой-то неизвестной причине хост-версия AWS может подключиться к внутреннему серверу, работающему на моей локальной машине (а не к тому, который работает рядом с ним в docker -создать на AWS), и подключиться таким образом. Я даже могу транслировать на сайт через OBS на rtmp://13.54.200.18/live
, и все работает. Но он работает только на моем локальном компьютере с инфраструктурой docker (и только если я использую вызовы 'localhost' вместо '1057 * -compose службы' server '), если кто-то еще пытается увидеть поток на действующем сайте они просто будут постоянно загружаться ... и выдают ошибку CORS.
Почему размещенный код AWS не смотрит на свой собственный docker -компонентный файл и собственный сервер: служба 3002 ? Для остального мира и для меня, если я не использую локальный сервер, он выдает ошибку CORS. Только для моего локального компьютера, и только если я запускаю локальный сервер и делаю запросы к localhost: 3002, он работает отлично.
Если я sh включу изображение AWS, то docker-compose run client curl localhost:3002/streams
не удастся, но docker-compose run client curl server:3002/streams
вернет мне правильные JSON данные. Из всего, что я понимаю о docker compose, мои сервисы должны иметь возможность доступа друг к другу, и, похоже, они могут, все отлично работает локально, и сервисы могут общаться друг с другом и на AWS, но просто так Ошибка CORS появляется из ниоткуда только на хост-версии AWS.
Я пробовал все под солнцем, о котором только могу подумать. Первоначально я использовал json-server
, но я подумал, что это может быть проблемой (поскольку он должен специально связываться с -H 0.0.0.0), поэтому я написал свой собственный сервер Express, используя пакет cors для его замены, и там есть не было никаких изменений Я попробовал каждую конфигурацию docker -композиционных переменных, которые я могу себе представить. Насколько я понимаю, я все сделал правильно, но каким-то образом блок AWS хочет общаться с локальным хостом моего компьютера, называемым «серверная служба», то есть 0.0.0.0, а не с его собственным. Что происходит?
Хранилище здесь: https://github.com/JeremyEllingham/streams
Любая помощь высоко ценится.