noxdafox / rabbitmq-message-deduplication

RabbitMQ Plugin for filtering message duplicates
Mozilla Public License 2.0
281 stars 34 forks source link

docker-compose - install plugin #31

Open urkl opened 5 years ago

urkl commented 5 years ago

Hi. Thanks for great plugin.

Can somebody point me out, what am I missing here. This is my docker compose file:

services:
  rabbitmq:
    image: rabbitmq:3.7
    container_name: rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      - RABBITMQ_DEFAULT_USER=rabbit
      - RABBITMQ_DEFAULT_PASS=rabbit
      - RABBITMQ_ENABLED_PLUGINS_FILE=/etc/rabbitmq/enabled_plugins
      - PLUGINS_DIR=/usr/lib/rabbitmq/plugins:/opt/rabbitmq/plugins/
    volumes:
    - ./enabled_plugins:/etc/rabbitmq/enabled_plugins
    - ./plugins:/usr/lib/rabbitmq/plugins

Plugins are in .plugins directory, and enabled_plugins has the:

[rabbitmq_management, rabbitmq_message_deduplication]. Message deduplication plugin is just not installed after running this service. Plugins are accessible inside container and enabled plugins file is on right path.

urkl commented 5 years ago

I created Dockerfile for building and enabling plugins with this Dockerfile:

FROM rabbitmq:3.7-management

COPY plugins $RABBITMQ_HOME/plugins
RUN rabbitmq-plugins enable   rabbitmq_message_deduplication

Now everything works as it should inside docker with this great plugin.

noxdafox commented 5 years ago

I am no Docker guru but I suspect the issue is in here:

volumes:
  - ./enabled_plugins:/etc/rabbitmq/enabled_plugins
  - ./plugins:/usr/lib/rabbitmq/plugins

The ./ path might not be correctly recognised and therefore neither the plugins folder nor the enabled_plugins file are correctly exposed within the container.

What I use in my docker-compose.yml files is usually the following.

volumes:
  - $PWD/config:/etc/rabbitmq/
  - $PWD/plugins:/usr/lib/rabbitmq/plugins/
BulatSaif commented 5 years ago

This work for me:

version: "2.0"

services:
  rabbitmq:
    image: rabbitmq:3.7.5-management
    container_name: rabbitmq
    hostname: rabbitmq
    environment:
      - RABBITMQ_PLUGINS_DIR=/my/plugins:/plugins
    volumes:
      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
      - ./enabled_plugins:/etc/rabbitmq/enabled_plugins
      - ./advanced.config:/etc/rabbitmq/advanced.config
      - /var/docker_data/rabbitmq/rabbitmqdata:/var/lib/rabbitmq
      - ./plugins/:/my/plugins
    ports:
      - "15672:15672"
      - "5672:5672"
    restart: always
Ocramius commented 4 years ago

My approach for local dev:

#docker/rabbitmq/Dockerfile

FROM rabbitmq:3.8.2-management

ADD https://github.com/noxdafox/rabbitmq-message-deduplication/releases/download/0.4.5/elixir-1.8.2.ez /opt/rabbitmq/plugins/
ADD https://github.com/noxdafox/rabbitmq-message-deduplication/releases/download/0.4.5/rabbitmq_message_deduplication-v3.8.x_0.4.5.ez /opt/rabbitmq/plugins/

RUN chown rabbitmq:rabbitmq /opt/rabbitmq/plugins/*.ez \
    && rabbitmq-plugins enable --offline rabbitmq_message_deduplication
version: '3.7'

services:
    rabbitmq:
        build:
            context: docker/rabbitmq

Much simpler than messing around with volumes, especially since this image will be needed in production :+1:

andreit-sst commented 1 year ago

@Ocramius ' approach not working on rabbitMQ 3.11.2, which makes me think the whole plug-in is outdated.

Attached docker compose logs in the following file: stack_trace.txt

Main issue: Failed to enable plugin "elixir": it may have been built with an incompatible (more recent?) version of Erlang

noxdafox commented 1 year ago

The plugin is not outdated. As the error suggest, your version of Erlang is too old compared to the one that was used to build the elixir package. Most likely the same issue will happen with the plugin itself.

Either you update your Erlang version to a more recent one or you compile the plugin with the Erlang version you intend to use.