A Comprehensive Step-by-Step Guide

Introduction

Consul is a distributed, highly available, and data center-aware tool for service discovery, configuration, and segmentation. It is widely used in modern microservices architectures to manage and secure service-to-service communication.

In this guide, we will walk you through the process of installing Consul Server on AlmaLinux 9 using Docker and Ansible. By the end of this article, you will have a fully functional Consul Server running in a Dockerized environment, managed by Ansible.

Prerequisites

Before we begin, ensure that you have the following prerequisites:

Step 1: Set Up Docker and Docker Compose

First, ensure that Docker and Docker Compose are installed and running on your AlmaLinux 9 server.

Install Docker

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

Install Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Step 2: Create a Docker Compose File for Consul Server

Create a directory for your Consul setup and navigate into it:

mkdir consul-setup
cd consul-setup

Create a docker-compose.yml file:

version: '3.8'

services:
  consul:
    image: consul:latest
    container_name: consul
    restart: always
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    command: "agent -server -bootstrap-expect=1 -ui -client=0.0.0.0"
    volumes:
      - consul_data:/consul/data
    networks:
      - consul_network

volumes:
  consul_data:

networks:
  consul_network:

This Docker Compose file defines a Consul Server service. It exposes ports 8500 (HTTP API and UI) and 8600 (DNS). The -bootstrap-expect=1 flag indicates that this is a single-node Consul cluster.

Step 3: Deploy with Docker Compose

Run the following command to start the Consul Server container:

docker-compose up -d

This command will pull the Consul Docker image and start the container in detached mode.

Step 4: Automate with Ansible

To automate the deployment process, create an Ansible playbook named deploy_consul.yml:

---
- hosts: all
  become: yes
  tasks:
    - name: Ensure Docker is installed
      dnf:
        name: docker-ce
        state: present

    - name: Ensure Docker Compose is installed
      get_url:
        url: https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)
        dest: /usr/local/bin/docker-compose
        mode: '0755'

    - name: Start and enable Docker service
      service:
        name: docker
        state: started
        enabled: yes

    - name: Create Consul setup directory
      file:
        path: /opt/consul-setup
        state: directory

    - name: Copy Docker Compose file
      copy:
        src: docker-compose.yml
        dest: /opt/consul-setup/docker-compose.yml

    - name: Deploy Consul with Docker Compose
      command: docker-compose up -d
      args:
        chdir: /opt/consul-setup

Run the playbook using the following command:

ansible-playbook -i your_inventory_file deploy_consul.yml

Replace your_inventory_file with the path to your Ansible inventory file.

Step 5: Access Consul Web UI

Once the deployment is complete, open your web browser and navigate to http://your_server_ip:8500. You should see the Consul Web UI, where you can manage and monitor your Consul Server.

Step 6: Verify Consul Server

To verify that the Consul Server is running correctly, you can use the Consul CLI or HTTP API.

Using Consul CLI

Access the Consul container and run the following command:

docker exec -it consul consul members

This command lists the members of the Consul cluster. Since this is a single-node cluster, you should see only one member.

Using HTTP API

You can also use the HTTP API to check the status of the Consul Server:

curl http://localhost:8500/v1/status/leader

This command should return the address of the Consul leader.

Conclusion

In this guide, we walked you through the process of installing Consul Server on AlmaLinux 9 using Docker and Ansible. By following these steps, you can easily set up a Consul Server for service discovery, configuration, and segmentation in your infrastructure.

Docker and Ansible make it easy to manage and automate your deployments, ensuring a smooth and consistent setup process. Whether you’re running a small cluster or a large-scale distributed system, this setup provides a robust foundation for your needs.