Как добавить пользователя RabbitMQ, пока RabbitMQ не активен - PullRequest
2 голосов
/ 05 марта 2020

Я запускаю сервис RabbitMQ и Celery в Docker контейнере для моего сервера. Рабочие - это экземпляры сельдерея, которые подключаются к серверу через RabbitMQ.

Я настроил и запустил RabbitMQ следующим образом:

sudo service rabbitmq-server start
rabbitmqctl add_user bunny password
rabbitmqctl add_vhost bunny_host
rabbitmqctl set_permissions -p bunny_host bunny ".*" ".*" ".*"

Это имеет проблему: если работник пытается установить соединение между службой При запуске и создании пользователя зайчика и предоставлении ему разрешений, экземпляр сельдерея работника будет прерван.

Я попытался добавить это в файл Docker для моего сервера, чтобы добавить пользователя перед «живым» запуском:

RUN sudo service rabbitmq-server start && \
    rabbitmqctl add_user bunny password && \
    rabbitmqctl add_vhost bunny_host && \
    rabbitmqctl set_permissions -p bunny_host bunny ".*" ".*" ".*" && \
    sudo service rabbitmq-server stop

Но когда я перезапустил службу rabbitmq-server в контейнере, пользователь bunny не существовал.

(Если я пытаюсь использовать rabbitmqctl для добавления пользователя, когда служба не запущена, она ошибки.)

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 05 марта 2020

Вы не можете запустить rabbitmqctl во время сборки. Вместо этого вы можете добиться того же, используя файлы bootstrap. вам нужно обновить файлы, как показано ниже:

Dockerfile

FROM rabbitmq:3.6.11-management-alpine
ADD rabbitmq.config /etc/rabbitmq/
ADD definitions.json /etc/rabbitmq/
RUN chmod 666 /etc/rabbitmq/*

rabbitmq.config

[
  {
    rabbit,
  [
    { loopback_users, [] }
  ]
},
  {
    rabbitmq_management,
  [
    { load_definitions, "/etc/rabbitmq/definitions.json" }
  ]
}
].

определения. json

{
  "rabbit_version": "3.6.14",
  "users": [
    {
      "name": "user",
      "password_hash": "0xZBvBD2JOGWrVO84nZ62EJuQIRehcILEiPVFB9mD4zhFcAo",
      "hashing_algorithm": "rabbit_password_hashing_sha256",
      "tags": "administrator"
    }
  ],
  "vhosts": [
    {
      "name": "/"
    }
  ],
  "permissions": [
    {
      "user": "community",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ],
  "parameters": [],
  "global_parameters": [
    {
      "name": "cluster_name",
      "value": "rabbit@rabbitmq"
    }
  ],
  "policies": [],
  "queues": [],
  "exchanges": [],
  "bindings": []
}
...