-
Notifications
You must be signed in to change notification settings - Fork 149
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1226 from amazeeio/1098-rabbitmq-mirrored-queues
Enable RabbitMQ mirrored queues
- Loading branch information
Showing
7 changed files
with
75 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# rabbitmq Image | ||
Lagoon RabbitMQ Dockerfile with management plugin installed, based on the official rabbitmq:3-management image at [docker-hub](https://hub.docker.com/_/rabbitmq). | ||
|
||
This Dockerfile is intended to be used to setup a standalone RabbitMQ queue broker as well as base image to setup a cluster with HA queues support by default ([Mirrored queues](https://www.rabbitmq.com/ha.html)). | ||
By default the RabbitMQ broker is started as single node. If you want to start a cluster, you need to use the [`rabbitmq-cluster`](https://github.com/amazeeio/lagoon/blob/master/images/rabbitmq-cluster/Dockerfile) Docker image, based on `rabbitmq` image plus the `rabbitmq_peer_discovery_k8s` plugin. | ||
|
||
## Lagoon & OpenShift adaptions | ||
This image is prepared to be used on Lagoon which leverages OpenShift. There are therefore some things already done: | ||
|
||
- Folder permissions are automatically adapted with [`fix-permissions`](https://github.com/sclorg/s2i-base-container/blob/master/core/root/usr/bin/fix-permissions) so this image will work with a random user and therefore also on OpenShift. | ||
- The file `/etc/rabbitmq/definitions.json` is parsed through [envplate](https://github.com/kreuzwerker/envplate) with an container-entrypoint. | ||
|
||
## Included RabbitMQ default schema (definitions.json) | ||
To enable the support for Mirrored Queues, at least one [`policy`](https://www.rabbitmq.com/parameters.html#policies) must exists. | ||
Into the `definitions.json` schema file, are definied the minimal entities to let the container running: virtualhost (vhost), username and password to access management UI, permissions and policies. | ||
|
||
By default a policy called `lagoon-ha` is created at startup but it is not active because it doesn't match any queue's name pattern (see default [Environment Variables](#environment-variables)). | ||
``` | ||
"policies":[ | ||
{"vhost":"${RABBITMQ_DEFAULT_VHOST}","name":"lagoon-ha","pattern":"${RABBITMQ_DEFAULT_HA_PATTERN}", "definition":{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-sync-batch-size":5}} | ||
] | ||
``` | ||
By default, the `ha-mode` is set to `exactly` which controls the exact number of mirroring nodes for a queue (mirrors). The number of nodes, is controller by `ha-params`. | ||
For further and custom configuration, please refer to [official RabbitMQ documentation](https://www.rabbitmq.com/ha.html). | ||
|
||
## Environment Variables | ||
Environment variables defined in RabbitMQ base image | ||
|
||
| Environment Variable | Default | Description | | ||
| --------------------------------- | --------- | ---------------------------------------------- | | ||
| `RABBITMQ_DEFAULT_USER` | guest | Username for management UI access | | ||
| `RABBITMQ_DEFAULT_PASS` | guest | Password for management UI access | | ||
| `RABBITMQ_DEFAULT_VHOST` | / | RabbitMQ main virtualhost| | ||
| `RABBITMQ_DEFAULT_HA_PATTERN` | ^$ | Regular expression to match for mirrored queues| |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,26 @@ | ||
ARG IMAGE_REPO | ||
FROM ${IMAGE_REPO:-lagoon}/commons as commons | ||
FROM rabbitmq:3-management | ||
|
||
ARG LAGOON_VERSION | ||
ENV LAGOON_VERSION=$LAGOON_VERSION | ||
|
||
COPY rabbitmq_delayed_message_exchange-3.7.0.ez /plugins | ||
ENV RABBITMQ_DEFAULT_USER='guest' \ | ||
RABBITMQ_DEFAULT_PASS='guest'\ | ||
RABBITMQ_DEFAULT_HA_PATTERN='^$'\ | ||
RABBITMQ_DEFAULT_VHOST='/' | ||
|
||
COPY --from=commons /bin/ep /bin/fix-permissions /bin/ | ||
|
||
COPY rabbitmq_delayed_message_exchange-3.7.0.ez /plugins | ||
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange; | ||
|
||
ENV RABBITMQ_DEFAULT_USER=guest \ | ||
RABBITMQ_DEFAULT_PASS="guest" | ||
# Copy startup schema with vhost, users, permissions and policies | ||
COPY definitions.json /etc/rabbitmq/definitions.json | ||
RUN fix-permissions /etc/rabbitmq/definitions.json | ||
|
||
# Copy a custom entrypoint | ||
COPY cluster-rabbit.sh / | ||
RUN fix-permissions /cluster-rabbit.sh && chmod +x /cluster-rabbit.sh | ||
|
||
ENTRYPOINT /cluster-rabbit.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"vhosts":[ | ||
{"name": "${RABBITMQ_DEFAULT_VHOST}"} | ||
], | ||
"users": [ | ||
{ "name": "${RABBITMQ_DEFAULT_USER}", "password": "${RABBITMQ_DEFAULT_PASS}", "tags": "administrator" } | ||
], | ||
"permissions":[ | ||
{ "user": "${RABBITMQ_DEFAULT_USER}", "vhost": "${RABBITMQ_DEFAULT_VHOST}", "configure": ".*", "write": ".*", "read": ".*" } | ||
], | ||
"policies":[ | ||
{"vhost":"${RABBITMQ_DEFAULT_VHOST}","name":"lagoon-ha","pattern":"${RABBITMQ_DEFAULT_HA_PATTERN}", "definition":{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-sync-batch-size":5}} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
ARG IMAGE_REPO | ||
FROM ${IMAGE_REPO:-lagoon}/rabbitmq-cluster | ||
ENV RABBITMQ_DEFAULT_HA_PATTERN='^lagoon-' |