This guide deploys Magento 2.4.8 with Docker Compose on Debian 10+, Ubuntu 20.04+, or RHEL 9+.
Current Version: 2.4.8 (released April 8, 2025)
⚠️ Important: Magento 2.4+ requires Elasticsearch or OpenSearch, Redis, and RabbitMQ for production deployments.
- name: Deploy Magento 2 with Docker Compose
hosts: magento2
become: true
vars:
app_root: /opt/magento2
app_port: 8080
magento_version: "2.4"
db_name: magento
db_user: magento
db_password: "magento-db-password-change-me"
db_root_password: "magento-root-password-change-me"
rabbitmq_user: magento
rabbitmq_password: "magento-rabbitmq-password-change-me"
tasks:
- name: Install Docker on Debian/Ubuntu
apt:
name:
- docker.io
- docker-compose-plugin
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install Docker on RHEL family
dnf:
name:
- docker
- docker-compose-plugin
state: present
when: ansible_os_family == "RedHat"
- name: Enable and start Docker
service:
name: docker
state: started
enabled: true
- name: Create app directory
file:
path: "{{ app_root }}"
state: directory
mode: "0755"
- name: Write Docker Compose file for Magento 2
copy:
dest: "{{ app_root }}/docker-compose.yml"
mode: "0644"
content: |
version: '3.8'
services:
opensearch:
image: opensearchproject/opensearch:2.11.0
container_name: opensearch
environment:
- discovery.type=single-node
- plugins.security.disabled=true
- 'OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m'
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- opensearch_data:/usr/share/opensearch/data
networks:
- magento-net
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: redis
networks:
- magento-net
restart: unless-stopped
volumes:
- redis_data:/data
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: {{ rabbitmq_user }}
RABBITMQ_DEFAULT_PASS: {{ rabbitmq_password }}
ports:
- "15672:15672"
- "5672:5672"
networks:
- magento-net
restart: unless-stopped
volumes:
- rabbitmq_data:/var/lib/rabbitmq
mariadb:
image: mariadb:11.4
container_name: mariadb
environment:
MYSQL_DATABASE: {{ db_name }}
MYSQL_USER: {{ db_user }}
MYSQL_PASSWORD: {{ db_password }}
MYSQL_ROOT_PASSWORD: {{ db_root_password }}
volumes:
- mariadb_data:/var/lib/mysql
networks:
- magento-net
restart: unless-stopped
magento:
image: bitnami/magento:{{ magento_version }}
container_name: magento
ports:
- "{{ app_port }}:8080"
environment:
- MAGENTO_DATABASE_HOST=mariadb
- MAGENTO_DATABASE_PORT=3306
- MAGENTO_DATABASE_NAME={{ db_name }}
- MAGENTO_DATABASE_USER={{ db_user }}
- MAGENTO_DATABASE_PASSWORD={{ db_password }}
- MAGENTO_DATABASE_ROOT_PASSWORD={{ db_root_password }}
- MAGENTO_HOST=your-domain.com
- MAGENTO_MODE=production
- ELASTICSEARCH_HOST=opensearch
- ELASTICSEARCH_PORT=9200
- REDIS_HOST=redis
- REDIS_PORT=6379
- RABBITMQ_HOST=rabbitmq
- RABBITMQ_PORT=5672
- RABBITMQ_USER={{ rabbitmq_user }}
- RABBITMQ_PASSWORD={{ rabbitmq_password }}
volumes:
- magento_data:/bitnami/magento
depends_on:
- mariadb
- opensearch
- redis
- rabbitmq
networks:
- magento-net
restart: unless-stopped
volumes:
opensearch_data:
redis_data:
rabbitmq_data:
mariadb_data:
magento_data:
networks:
magento-net:
- name: Start application stack
command: docker compose up -d
args:
chdir: "{{ app_root }}"
- name: Wait for Magento to be ready
wait_for:
port: "{{ app_port }}"
timeout: 180
delay: 10
- name: Display installation information
debug:
msg: |
Magento 2 installation is ready!
Access: http://{{ inventory_hostname }}:{{ app_port }}
Admin: http://{{ inventory_hostname }}:{{ app_port }}/admin
RabbitMQ Management: http://{{ inventory_hostname }}:15672
IMPORTANT: Complete the web installer wizard to finish setup.
After installation, configure SSL/TLS via reverse proxy.
http://YOUR-SERVER:8080| Variable | Description | Default |
|---|---|---|
app_root |
Installation directory | /opt/magento2 |
app_port |
External port for web access | 8080 |
magento_version |
Magento version tag | 2.4 |
db_name |
MySQL database name | magento |
db_user |
MySQL database user | magento |
db_password |
MySQL database password | (change me) |
db_root_password |
MySQL root password | (change me) |
rabbitmq_user |
RabbitMQ username | magento |
rabbitmq_password |
RabbitMQ password | (change me) |