Add new Shopware 6 role with OIDC/LDAP plugin integration and Docker-based deployment configuration.

Includes:
- New role: web-app-shopware (Docker, MariaDB, Redis, OpenSearch)
- Updated networks and ports configuration
- Automated install, migration, and admin creation
- Optional IAM integration via OIDC/LDAP plugins

Reference: https://chatgpt.com/share/6907b0d4-ab14-800f-b576-62c0d26c8ad1
This commit is contained in:
2025-11-02 20:29:13 +01:00
parent d61c81634c
commit d1ccfd9cdd
17 changed files with 406 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
{% include 'roles/docker-compose/templates/base.yml.j2' %}
php:
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ SHOPWARE_PHP_IMAGE }}:{{ SHOPWARE_VERSION }}"
container_name: "{{ SHOPWARE_PHP_CONTAINER }}"
working_dir: /var/www/html
volumes:
- data:/var/www/html
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
nginx:
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ SHOPWARE_NGINX_IMAGE }}:{{ SHOPWARE_NGINX_VERSION }}"
container_name: "{{ SHOPWARE_NGINX_CONTAINER }}"
ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
volumes:
- data:/var/www/html:ro
depends_on:
- php
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% if SHOPWARE_REDIS_ENABLED %}
redis:
image: redis:7-alpine
container_name: redis
command: ["redis-server", "--appendonly", "yes"]
restart: unless-stopped
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% endif %}
{% if SHOPWARE_SEARCH_ENABLED %}
{% if SHOPWARE_SEARCH_ENGINE == 'opensearch' %}
opensearch:
image: opensearchproject/opensearch:2
environment:
- discovery.type=single-node
- plugins.security.disabled=true
ulimits:
memlock: { soft: -1, hard: -1 }
mem_limit: 2g
restart: unless-stopped
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% else %}
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.22
environment:
- discovery.type=single-node
ulimits:
memlock: { soft: -1, hard: -1 }
mem_limit: 2g
restart: unless-stopped
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% endif %}
{% endif %}
{% include 'roles/docker-compose/templates/volumes.yml.j2' %}
data:
name: {{ SHOPWARE_VOLUME }}
{% include 'roles/docker-compose/templates/networks.yml.j2' %}

View File

@@ -0,0 +1,32 @@
# DOMAIN/URL
DOMAIN={{ domains | get_domain(application_id) }}
APP_URL="{{ domains | get_url(application_id, WEB_PROTOCOL) }}/"
# Shopware
APP_ENV={{ 'dev' if (ENVIRONMENT | lower) == 'development' else 'prod' }}
APP_URL_TRUSTED_PROXIES=127.0.0.1
INSTANCE_ID={{ application_id }}
# Database
DATABASE_URL="mysql://{{ database_username }}:{{ database_password }}@{{ database_host }}:{{ database_port }}/{{ database_name }}"
# Redis (optional)
{% if SHOPWARE_REDIS_ENABLED | bool %}
REDIS_URL="redis://{{ SHOPWARE_REDIS_ADDRESS }}/0"
CACHE_URL="redis://{{ SHOPWARE_REDIS_ADDRESS }}/1"
MESSENGER_TRANSPORT_DSN="redis://{{ SHOPWARE_REDIS_ADDRESS }}/2"
{% else %}
CACHE_URL="file://cache"
{% endif %}
# Search
{% if SHOPWARE_SEARCH_ENABLED %}
{% if SHOPWARE_SEARCH_ENGINE == 'opensearch' %}
OPENSEARCH_URL="http://opensearch:9200"
{% else %}
ELASTICSEARCH_URL="http://elasticsearch:9200"
{% endif %}
{% endif %}
# Mail (Mailu)
MAILER_DSN="smtps://{{ users['no-reply'].email }}:{{ users['no-reply'].mailu_token }}@{{ SYSTEM_EMAIL.HOST }}:{{ SYSTEM_EMAIL.PORT }}"