Я использую VPS для тестирования своих веб-приложений в Интернете.И я использую Docker для запуска многих веб-приложений на одном сервере.Вот мой
docker-compose.yml
version: "3.7"
services:
gateway:
build:
context: ./gateway
dockerfile: Dockerfile
restart: always
ports:
- 80:3000
networks:
erealm:
ipv4_address: 10.5.0.2
db:
image: mysql/mysql-server:5.5
restart: always
environment:
MYSQL_ROOT_PASSWORD: 4lf483t0
networks:
erealm:
ipv4_address: 10.5.0.3
phpmyadmin:
image: nazarpc/phpmyadmin:latest
environment:
- MYSQL_HOST=10.5.0.3:3306
restart: always
depends_on:
- db
ports:
- 1234:80
networks:
erealm:
ipv4_address: 10.5.0.4
static:
build:
context: ./static
dockerfile: Dockerfile
restart: always
networks:
erealm:
ipv4_address: 10.5.0.5
onlinecv:
build:
context: ./onlinecv
dockerfile: Dockerfile
restart: always
ports:
- 81:3000
networks:
erealm:
ipv4_address: 10.5.0.10
speeqapi:
build:
context: ./speeq/api
dockerfile: Dockerfile
restart: always
environment:
MYSQL_SERVER: 10.5.0.3
MYSQL_PORT: 3306
MYSQL_USER: xxxxxxxxxx
MYSQL_PASSWORD: xxxxxxxxxx
MYSQL_DATABASE: xxxxxxxxxx
depends_on:
- db
networks:
erealm:
ipv4_address: 10.5.0.20
speeqfe:
build:
context: ./speeq/fe
dockerfile: Dockerfile
restart: always
environment:
REACT_APP_API_SERVER: 10.5.0.20:3000
REACT_APP_STATIC_SERVER: 10.5.0.5:3000
ports:
- 82:3000
depends_on:
- db
- static
- speeqapi
networks:
erealm:
ipv4_address: 10.5.0.21
networks:
erealm:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/24
Основная идея этой схемы - открытые миру только HTTP-порты, в то время как все необходимые службы работают под защитой внутренней сети Docker,недоступный для внешнего мира.
Я использую службу шлюза для сопоставления HTTP-запросов, поступающих для разных приложений, с разными портами.Итак, мое онлайн-резюме сопоставлено с CNAME cv.eddealmeida.net, а это приложение Speeq сопоставлено с CNAME speeq.eddealmeida.net в моей DNS-зоне, оба указывают на этот сервер.Когда мой сервер получает запрос к http://cv.eddealmeida.net или http://speeq.eddealmeida.net,, приложение шлюза на основе Node / Express (прослушивающее порт 80) разбивает параметры HOST запроса и применяет простое сопоставление для отправки запросовна порты 81 и 82 соответственно.
Ну, все работает нормально, но для внутренних запросов.Сначала у меня была проблема с внутренним разрешением имен, которую я решил, предоставив IP-адреса всем службам, как вы можете видеть.
Теперь мои внутренние запросы отправляются в правильные места, но ... запросы на выборку сделаныпо интерфейсу торчат.Они просто продолжают останавливаться снова и снова.Я протестировал API, используя curl
, и все в порядке, он правильно отображает мои запросы командной строки.Таким образом, нет проблем с моим соединением API / базы данных или чем-то в этом роде.Google Chrome дал мне это объяснение , но я не вижу, чтобы я подходил в любом из упомянутых случаев.
Кто-нибудь когда-либо жил в такой ситуации, чтобы дать мне подсказку?Я боролся с этим в течение последних 24 часов и иссякли идеи.Я дважды проверил все, и он все равно не будет работать.