172 похожих чатов

Всем привет. Поднял себе реестр docker. Для его работы у

меня запускается 2 контейнера - nginx и registry. И теперь попал в странную ситуацию - для работы nginx нужен сервис gateway, а чтобы запустить сервис gateway нужно скачать его из registry 🤷 Подскажите, как можно решить это? Запустить еще один nginx?

32 ответов

87 просмотров

Зачем нужен gateway не совсем понятно. У Вас уже есть nginx и registry для полноценной работы докер-режистри. Это, конечно при условии, что nginx в работает как прокси и у него соответствующий конфиг есть для работы с registry.

McLotos- Автор вопроса
Вячеслав Малютин
Зачем нужен gateway не совсем понятно. У Вас уже е...

gateway будет ловить gql-запросы и перенаправлять их в rabbit, а когда все сервисы ответят, собирать их ответы в один и отправлять клиенту

McLotos- Автор вопроса
McLotos
gateway будет ловить gql-запросы и перенаправлять ...

по сути nginx нужен только для registry, но он занимает 443 порт поэтому и gateway придётся за него убрать

McLotos
по сути nginx нужен только для registry, но он зан...

Вы там с архитектурой разберитесь и отделите мух (приложеньки) от котлет (базовая инфраструктура). Никто не мешает использовать один прокси (nginx) для разных задач. Конфиги нужны только соответствующие.

McLotos- Автор вопроса
Вячеслав Малютин
Вы там с архитектурой разберитесь и отделите мух (...

не понял. Вот есть у меня registry, который спрятан за nginx на домене registry.mysite.ru А домен mysite.ru должен обращаться к gateway. Всё. На это вся инфраструктура заканчивается. Куда там и что будет делать gateway - не мои проблемы, моя задача сделать так, чтобы gateway был доступен на 443 порту домена mysite.ru Можно тогда разнести домены mysite.ru и registry.mysite.ru по разным физическим серверам и в принципе это решит проблему, но держать отдельный физический сервер для одного единственного контейнера - так себе идея

McLotos- Автор вопроса
Andrey
Почему бы и нет?

если gateway спрятать за nginx, то nginx не сможет запуститься так как при чтении своего конфига получит ошибку "хост недоступен". А чтобы запустить gateway, нужно его скачать из registry, которые недоступен, пока nginx лежит. В общем скорее всего придётся все-таки поднимать gateway на отдельном сервере и тогда получится что на одном сервере будет registry + nginx, а на втором только gateway

Можно и зайца научить курить. Но зачем? Заверните трафик на один прокси (nginx) и настройте его, чтобы он проксировал запросы к нужным ресурсам.

Можно просто нормально настроить нджинкс

McLotos- Автор вопроса
Вячеслав Малютин
Можно и зайца научить курить. Но зачем? Заверните ...

он должен отправлять все запросы на gateway. ну или может есть какой-то способ заставить nginx общаться напрямую с rabbitmq, дожидаться ответа всех сервисов и собирать из них единый ответ? Если такой способ есть я с радостью выкину этот gateway. А еще gateway отвечает за push-уведомления и за SSE

McLotos- Автор вопроса
McLotos
что я и пытаюсь сделать =)

Так и не нагуглил, как запустить nginx при unreachable upstream?

McLotos
если gateway спрятать за nginx, то nginx не сможет...

А вот про это я как раз и писал, что нужно отделить мух от котлет. У Вас должны быть слои сервисов: инфраструктурный и прикладной (приложения). И они должны жить и запускаться параллельно.

McLotos- Автор вопроса
Andrey
Так и не нагуглил, как запустить nginx при unreach...

там из решений типа "подождать несколько секунд, пока нужный сервис не запуститься и попробовать снова. А нужный сервис не запустится пока registry недоступен

McLotos- Автор вопроса
Вячеслав Малютин
А вот про это я как раз и писал, что нужно отделит...

Это понятно, не понятно как поделить 443 порт между gateway и nginx если они на одном сервере =)

McLotos- Автор вопроса
Вячеслав Малютин
Не мешайте все в кучу. Разделите.

то есть выделить под реестр отдельный физический сервер?

McLotos- Автор вопроса
Вячеслав Малютин
Никак.

вот и я о том же =)

McLotos
то есть выделить под реестр отдельный физический с...

Нет. Регистри с прокси сначала запускать, а потом уже приложения.

McLotos
вот и я о том же =)

Но сделать можно, если понимать, что nginx должен проксировать запросы.

McLotos- Автор вопроса
Вячеслав Малютин
Нет. Регистри с прокси сначала запускать, а потом ...

у меня так и настроено ` docker compose --env-file .env --profile registry up --build -d docker compose --env-file .env --profile gateway up --build -d docker compose --env-file .env --profile services up --build ` Но nginx падает с ошибкой "gateway недоступен"

McLotos
у меня так и настроено ` docker compose --env-file...

Про то, как заставить nginx запуститься без доступного upstream Вам уже сказали.

McLotos- Автор вопроса
Вячеслав Малютин
Про то, как заставить nginx запуститься без доступ...

upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; server backup1.example.com backup; } По умолчанию запросы распределяются по серверам циклически (в режиме round-robin) с учётом весов серверов. В вышеприведённом примере каждые 7 запросов будут распределены так: 5 запросов на backend1.example.com и по одному запросу на второй и третий серверы. Если при попытке работы с сервером происходит ошибка, то запрос передаётся следующему серверу, и так далее до тех пор, пока не будут опробованы все работающие серверы. Если не удастся получить успешный ответ ни от одного из серверов, то клиенту будет возвращён результат работы с последним сервером. То есть nginx всё так же продолжит падать

McLotos- Автор вопроса
McLotos
upstream backend { server backend1.example.com...

в моём случае этот конфиг выглядел вот так upstream backend { server gateway:8080 max_fails=10 fail_timeout=30s; } а дальше уже server { listen 443 ssl default_server; http2 on; location / { proxy_pass http://gateway; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }

McLotos- Автор вопроса
McLotos- Автор вопроса
Вячеслав Малютин
И какую ошибку Nginx выдает?

docker compose up падает с ошибкой "https://register.mysite.ru/v2/": dial tcp *.*.*.*:443: connect: connection refused а nginx ругается в логах host not found in upstream "gateway:8080"

McLotos- Автор вопроса
Вячеслав Малютин
И какую ошибку Nginx выдает?

вот конф для mysite у registry.mysite другой конфиг в отдельном файле

McLotos
docker compose up падает с ошибкой "https://regist...

"https://register.mysite.ru/v2/": dial tcp *.*.*.*:443: connect: connection refused А 443 порт на хосте никем не используется?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта