Я пытаюсь докеризовать три приложения, два внешних приложения, использующие реакцию, и одно внутреннее приложение nodejs, два внешних приложения используют один и тот же сервер с разными портами.
Фронтенд (https://localhost/login) и бэкенд (https://localhost:8443/api-portal и https://localhost:8443/api-adminportal) работают отлично.
Проблема в том, что когда я пытаюсь получить доступ к другому переднему приложению (https://localhost:8443/adminportal/), я получаю эту ошибку в журнале nginx:
172.19.0.1 - - [24/May/2022:13:25:42 +0000] "GET /sockjs-node HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/ 537.36 (KHTML, как Gecko) Chrome/101.0.4951.67 Safari/537.36" "-"
24.05.2022 13:25:42 [ошибка] 31#31: *15 open() "/etc/nginx/html/sockjs-node" не удалось (2: нет такого файла или каталога), клиент: 172.19.0.1 , сервер: localhost, запрос: "GET /sockjs-node HTTP/1.1", хост: "localhost:8443"
И в браузере Firefox я получаю эту ошибку:
Firefox не может установить соединение с сервером по адресу wss://localhost:8443/sockjs-node.
Файл Nginx conf.d:
сервер {
слушать 80;
имя_сервера локальный хост 127.0.0.1 0.0.0.0;
вернуть 301 https://$server_name$request_uri;
}
сервер {
слушать 443 ssl;
имя_сервера локальный хост 127.0.0.1 0.0.0.0;
ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;
место расположения / {
proxy_pass http://fpr-frontend:3000/;
}
# include /etc/nginx/conf.d/koma/*.conf;
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
корень /usr/share/nginx/html;
}
}
сервер {
слушать 8443 ssl;
имя_сервера локальный хост 127.0.0.1 0.0.0.0;
ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/key.pem;
расположение /админпортал/ {
proxy_pass http://fpr-adminportal:3001/adminportal/;
}
расположение /api-adminportal/ {
proxy_pass https://fpr-backend:3335/;
}
местоположение /api-портал/ {
proxy_pass https://fpr-backend:3333/;
}
# include /etc/nginx/conf.d/koma/*.conf;
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
корень /usr/share/nginx/html;
}
}
файл docker-compose.yml:
версия: "3.2"
тома:
монгодата:
Сервисы:
fpr-бэкенд:
строить:
контекст: .
файл докеры: Dockerfile.backend
изображение: fpr-бэкенд
env_file: ./config/fpr-backend.env
среда:
FRONTEND_URL: https://localhost
FRONTEND_ADMIN_PORTAL_URL: https://localhost:8443/adminportal/
зависит от:
- монго
разоблачать:
- "3333"
- "3335"
порты:
- "3333:3333/TCP"
- "3335:3335/TCP"
команда: ["пряжа", "старт"]
fpr-интерфейс:
строить:
контекст: .
файл докеры: Dockerfile.frontend
аргументы:
VITE_BACKEND_URL: https://localhost:8443/api-portal/
изображение: fpr-интерфейс
env_file: ./config/fpr-frontend.env
зависит от:
- fpr-бэкенд
разоблачать:
- "3000"
команда: ["yarn", "serve", "--host=fpr-frontend", "--port=3000"]
fpr-админпортал:
stdin_open: true # запуск докера -i
tty: true # docker run -t
строить:
контекст: .
файл докеры: Dockerfile.adminportal
аргументы:
ПОРТ: 3001
REACT_APP_API_URL: https://localhost:8443/api-adminportal/
изображение: fpr-adminportal
env_file: ./config/fpr-adminportal.env
среда:
- PUBLIC_URL=https://localhost:8443/adminportal
зависит от:
- fpr-бэкенд
разоблачать:
- "3001"
порты:
- "3001:3001/TCP"
команда: ["пряжа","dev"]
монго:
изображение: монго
env_file: ./config/mongo.env
тома:
- монгодата:/etc/монго
нгинкс:
изображение: nginx
зависит от:
- fpr-бэкенд
- fpr-интерфейс
- fpr-админпортал
тома:
- ./config/nginx/conf.d/:/etc/nginx/conf.d/
- ./modules/fpr-backend/сертификаты/UserPortal:/etc/nginx/cert
разоблачать:
- "443"
- "8443"
порты:
- "8000:80/TCP"
- "443:443/TCP"
- "8443:8443/TCP"