Deploying RabbitMQ Docker Container Using Ansible Playbook

  ·   3 min read

In modern application development, message brokers like RabbitMQ are critical for enabling communication between services in a microservices architecture. This article will guide you through deploying a RabbitMQ Docker container using an Ansible playbook, automating an essential step in the DevOps pipeline.

Prerequisites

Before we begin, ensure you have the following prepared:

  • Ansible installed on your local machine (or on a control node).
  • Docker installed on the target host (where RabbitMQ will be deployed).
  • SSH access to the target host.
  • Basic knowledge of YAML syntax and Ansible modules.

Step 1: Set Up the Directory Structure

First, create a directory to store your Ansible playbook and any related configuration files:

mkdir rabbitmq-deployment
cd rabbitmq-deployment

Step 2: Create the Ansible Inventory File

Create an inventory file named hosts.ini to define the target servers:

[rabbitmq]
your_remote_host ansible_ssh_user=your_username

Replace your_remote_host with the IP address or hostname of your target server, and your_username with your SSH username.

Step 3: Write the Ansible Playbook

Now, create a new file named deploy_rabbitmq.yml and populate it with the following playbook code:

---
- name: Deploy RabbitMQ on Docker
  hosts: rabbitmq
  become: yes
  tasks:
    - name: Ensure Docker is installed
      apt:
        name: docker.io
        state: present
      when: ansible_os_family == "Debian"

    - name: Install Docker Compose
      apt:
        name: docker-compose
        state: present
      when: ansible_os_family == "Debian"

    - name: Pull RabbitMQ image from Docker Hub
      docker_image:
        name: rabbitmq
        tag: management
        source: pull

    - name: Run RabbitMQ container
      docker_container:
        name: rabbitmq
        image: rabbitmq:management
        state: started
        restart_policy: always
        published_ports:
          - "15672:15672"  # Management UI
          - "5672:5672"    # RabbitMQ default port
        env:
          RABBITMQ_DEFAULT_USER: your_user
          RABBITMQ_DEFAULT_PASS: your_password

Explanation of the Playbook Structure

  1. Ensure Docker is installed: We confirm that Docker is installed on the target machine using Ansible’s apt module.
  2. Install Docker Compose: This ensures that Docker Compose is installed for managing multi-container applications if needed in the future.
  3. Pull RabbitMQ image: We use the docker_image module to pull the RabbitMQ image with the management plugin, which provides a web-based UI for monitoring and management.
  4. Run RabbitMQ container: Finally, we start the RabbitMQ container, mapping the appropriate ports and setting default credentials through environment variables.

Note: Make sure to substitute your_user and your_password with secure credentials for your RabbitMQ instance.

Step 4: Execute the Playbook

To run the playbook, use the following command:

ansible-playbook -i hosts.ini deploy_rabbitmq.yml

Conclusion

By following the above steps, you will have successfully deployed a RabbitMQ Docker container on your target server using an Ansible playbook. With this automation in place, you can replicate the deployment on multiple servers effortlessly or adjust configurations as needed.

Further Reading

Implementing DevOps practices allows teams to deploy uniformly and efficiently, and using tools like Ansible with Docker is an excellent way to leverage those practices.

Happy automating!