Как стать автором
Обновить

Комментарии 12

Добрый день!

Спасибо за статью. Пробовал запускать в докере RabbitMQ, Apache Kafka и Nats. Наиболее удобным вариантом на мой взгляд является nats, тк там всего 1 докер образ + можно все необходимые конфигурации упаковать в .env файлы (что позволяет совмещать данные очереди с CI в gitlab/drone/woodpecker/etc).

"RABBITMQ_DEFAULT_USER", "RABBITMQ_DEFAULT_PASS", да и вообще все остальные переменные окружения уже давно объявлены deprecated и не работают начиная с версии 3.9. Подробности здесь. И потом, если уж такое писать в "docker-compose.yml", то это следует делать через "secrets".

# Unavailable in 3.9 and up
RABBITMQ_DEFAULT_PASS_FILE
RABBITMQ_DEFAULT_USER_FILE

Я так понял, именно вот эти переменные deprecated. Обычные RABBITMQ_DEFAULT_USER актуален ещё

В официальной доке ту, что ты указал именно эти переменные отсутствуют в списке deprecated и рекомендованы к использованию

Хм... Вроде бы и вправду. Но, по-моему, у меня он и без приставки "_FILE" кидал предупреждения в лог. Сейчас уже не уверен, но надо будет проверить. И, кстати, если ты прав, то поддержку "_FILE" очень легко самостоятельно вернуть на место кастомным Dockerfile - достаточно подменить исходный ENTRYPOINT как-то так или похоже:

FROM rabbitmq:latest

ENTRYPOINT \
    RABBITMQ_DEFAULT_USER=`cat $RABBITMQ_DEFAULT_USER_FILE` \
    RABBITMQ_DEFAULT_PASS=`cat $RABBITMQ_DEFAULT_PASS_FILE` \
    << старый ENTRYPOINT >>

Я такое уже делал для pgAdmin, который "secrets" от рождения не поддерживает. Пароли писать открытым текстом в "docker-compose.yml" у меня вызывает инстинктивную идиосинкразию, даже если речь идет об окружении чисто для разработки.

Секреты в docker-compose удобно хранить таким способом:

env_file:
- ./.env
В скрытом файле .env прописываются все секреты, а compose по умолчанию из коробки ищет этот файл и подхватывает из него все переменные. Это официально рекомендованный способ. При этом можно запретить доступ к контейнеру rebbitmq из вне, кроме других контейнеров в целях дополнительной безопасности.

./.env он все-таки несколько для другого. К тому же что, если мне туда надо поместить еще и переменные которые не секретные и я хочу хранить их, скажем, в git.

Насколько я знаю, официальный способ это хранить секреты в отдельных файлах и прописывать их в секции secrets файла "docker-compose.yml":

version: "9.2"

services:
  mongo:
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME_FILE: /run/secrets/mongo_username
      MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/mongo_password
    secrets:
      - mongo_username
      - mongo_password

secrets:
  mongo_username:
    file: ./secrets/mongo_username
  mongo_password:
    file: ./secrets/mongo_password    
***$ mkdir secrets
***$ echo root > secrets/mongo_username
***$ echo 'zC4%&gWKdhE*yjP5' > secrets/mongo_password
***$ echo secrets/ >> .gitignore

Спасибо за статью. Какой метод подключения плагинов, например rabbitmq_web_stomp, порекомендуете?

Гигабиты прямо режут по глазам

размер в мегабитах это волшебно)

Спасибо, но ожидал большего, например хотя-бы сетап кластера, даже если просто в docker-compose

в статье разобрано как поднимать единственный инстанс, хотелось бы посмотреть как таким способом разворачивать кластер

Зарегистрируйтесь на Хабре, чтобы оставить комментарий