This guide deploys Shopware 6.7 with Docker Compose and Elasticsearch on Debian 10+, Ubuntu 20.04+, or RHEL 9+.
Current Version: 6.7.7.1 (released February 4, 2026)
⚠️ Important: Shopware 6.7 requires Elasticsearch for product search.
- name: Deploy Shopware with Docker Compose
hosts: shopware
become: true
vars:
app_root: /opt/shopware
app_port: 8080
shopware_version: "8.2"
db_name: shopware
db_user: shopware
db_password: "shopware-db-password-change-me"
db_root_password: "mariadb-root-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 Shopware
copy:
dest: "{{ app_root }}/docker-compose.yml"
mode: "0644"
content: |
version: '3.8'
services:
elasticsearch:
image: elasticsearch:8.11.0
container_name: shopware-elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- shopware-net
restart: unless-stopped
mariadb:
image: mariadb:10.6
container_name: shopware-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:
- shopware-net
restart: unless-stopped
shopware:
image: shopware/production:{{ shopware_version }}
container_name: shopware
restart: unless-stopped
depends_on:
- mariadb
- elasticsearch
ports:
- "{{ app_port }}:80"
environment:
SHOPWARE_DB_HOST: mariadb
SHOPWARE_DB_NAME: {{ db_name }}
SHOPWARE_DB_USER: {{ db_user }}
SHOPWARE_DB_PASSWORD: {{ db_password }}
SHOPWARE_ES_HOST: elasticsearch
SHOPWARE_ES_PORT: 9200
volumes:
- shopware_data:/var/www/html
- shopware_custom:/var/www/html/custom
networks:
- shopware-net
volumes:
elasticsearch_data:
mariadb_data:
shopware_data:
shopware_custom:
networks:
shopware-net:
- name: Start application stack
command: docker compose up -d
args:
chdir: "{{ app_root }}"
- name: Wait for Shopware to be ready
wait_for:
port: "{{ app_port }}"
timeout: 180
delay: 10
- name: Install Shopware via CLI
command: >
docker compose exec -T shopware bin/console system:install
--database-host=mariadb
--database-name={{ db_name }}
--database-user={{ db_user }}
--database-password={{ db_password }}
--elasticsearch-host=elasticsearch
--elasticsearch-port=9200
--shop-url=http://{{ inventory_hostname }}:{{ app_port }}
--admin-email=admin@example.com
--admin-password=admin-password-change-me
--no-interaction
register: install_result
changed_when: "'Successfully' in install_result.stdout"
failed_when: install_result.rc != 0 and 'Table already exists' not in install_result.stderr
- name: Display installation information
debug:
msg: |
Shopware installation is ready!
Access: http://{{ inventory_hostname }}:{{ app_port }}
Admin: http://{{ inventory_hostname }}:{{ app_port }}/admin
IMPORTANT:
1. Change the admin password immediately after first login
2. Configure SSL/TLS via reverse proxy for production
3. Verify Elasticsearch connection in admin panel
http://YOUR-SERVER:8080/admin| Variable | Description | Default |
|---|---|---|
app_root |
Installation directory | /opt/shopware |
app_port |
External port for web access | 8080 |
shopware_version |
Shopware Docker image tag | 8.2 |
db_name |
MySQL database name | shopware |
db_user |
MySQL database user | shopware |
db_password |
MySQL database password | (change me) |
db_root_password |
MySQL root password | (change me) |