This guide uses Docker Compose to run Shopware 6.7 with Elasticsearch.
Current Version: 6.7.7.1 (released February 4, 2026)
⚠️ Important: Shopware 6.7 requires Elasticsearch for product search.
For Docker installation, see Docker.
Shopware provides an official development Docker image. For production, use the production image or build from source.
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: shopware
MYSQL_USER: shopware
MYSQL_PASSWORD: shopware-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- mariadb_data:/var/lib/mysql
networks:
- shopware-net
restart: unless-stopped
shopware:
image: shopware/development:8.2
container_name: shopware
restart: unless-stopped
depends_on:
- mariadb
- elasticsearch
ports:
- "8080:80"
environment:
SHOPWARE_DB_HOST: mariadb
SHOPWARE_DB_NAME: shopware
SHOPWARE_DB_USER: shopware
SHOPWARE_DB_PASSWORD: shopware-password-change-me
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:
docker compose up -d
Wait 2-3 minutes for all services to initialize.
Access at http://YOUR-SERVER:8080
Access the installer at http://YOUR-SERVER:8080 and complete the setup wizard, or use CLI:
# Wait for services to be ready
sleep 30
# Install Shopware via CLI
docker compose exec shopware bin/console system:install \
--database-host=mariadb \
--database-name=shopware \
--database-user=shopware \
--database-password=shopware-password-change-me \
--elasticsearch-host=elasticsearch \
--elasticsearch-port=9200 \
--shop-url=http://localhost:8080 \
--admin-email=admin@example.com \
--admin-password=admin-password-change-me \
--no-interaction
For production deployments, use a more robust configuration:
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=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- shopware-net
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: shopware-redis
networks:
- shopware-net
restart: unless-stopped
volumes:
- redis_data:/data
mariadb:
image: mariadb:10.6
container_name: shopware-mariadb
environment:
MYSQL_DATABASE: shopware
MYSQL_USER: shopware
MYSQL_PASSWORD: shopware-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- mariadb_data:/var/lib/mysql
networks:
- shopware-net
restart: unless-stopped
shopware:
image: shopware/production:8.2
container_name: shopware
restart: unless-stopped
depends_on:
- mariadb
- elasticsearch
- redis
ports:
- "8080:80"
environment:
SHOPWARE_DB_HOST: mariadb
SHOPWARE_DB_NAME: shopware
SHOPWARE_DB_USER: shopware
SHOPWARE_DB_PASSWORD: shopware-password-change-me
SHOPWARE_ES_HOST: elasticsearch
SHOPWARE_ES_PORT: 9200
SHOPWARE_REDIS_HOST: redis
volumes:
- shopware_data:/var/www/html
- shopware_custom:/var/www/html/custom
networks:
- shopware-net
volumes:
elasticsearch_data:
redis_data:
mariadb_data:
shopware_data:
shopware_custom:
networks:
shopware-net:
docker compose up -d
# Wait for services
sleep 30
# Install Shopware
docker compose exec shopware bin/console system:install \
--database-host=mariadb \
--database-name=shopware \
--database-user=shopware \
--database-password=shopware-password-change-me \
--elasticsearch-host=elasticsearch \
--elasticsearch-port=9200 \
--shop-url=http://localhost:8080 \
--admin-email=admin@example.com \
--admin-password=admin-password-change-me \
--no-interaction
For maximum control, build your own Shopware container:
FROM php:8.2-apache
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
libicu-dev \
zip \
unzip \
&& docker-php-ext-install pdo_mysql bcmath intl zip \
&& a2enmod rewrite headers ssl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
# Apache configuration
COPY apache-shopware.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 80
version: '3.8'
services:
elasticsearch:
image: elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
mariadb:
image: mariadb:10.6
environment:
MYSQL_DATABASE: shopware
MYSQL_USER: shopware
MYSQL_PASSWORD: shopware-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- mariadb_data:/var/lib/mysql
shopware:
build: .
ports:
- "8080:80"
depends_on:
- mariadb
- elasticsearch
volumes:
- shopware_app:/var/www/html
volumes:
elasticsearch_data:
mariadb_data:
shopware_app:
docker compose up -d
# Install Shopware via Composer
docker compose exec shopware bash
composer create-project shopware/production:~6.7 shopware
cd shopware
bin/console system:install --create-database --basic-setup
Shopware requires cron jobs for scheduled tasks:
docker compose exec shopware bash
crontab -e
Add:
* * * * * cd /var/www/html && /usr/local/bin/php bin/console scheduled-task:run
* * * * * cd /var/www/html && /usr/local/bin/php bin/console messenger:consume async
docker compose exec shopware bash
cd /var/www/html
bin/console cache:clear
bin/console asset:install
docker compose exec shopware bash
bin/console elasticsearch:status