Files
computer-playbook/roles/web-app-shopware/vars/main.yml
kevinveenbirkenbachandClaude Opus 5.5 2348d48110 fix(web-app-shopware): move PHP base to docker-base 8.3.36-caddy
The bare ghcr.io/shopware/docker-base:8.3 tag is frozen. Its digest
sha256:14826eb9 is the same as 8.3.25, built 2025-09-05, and carries
PHP_VERSION=8.3.25. Upstream has published only flavoured tags since
8.3.26. 8.3.36-caddy (sha256:b1fdca6e, built 2026-10-30, also the
current 8.3-caddy) carries PHP_VERSION=8.3.36. It has the same
supervisord entrypoint, www-data user and exposed ports 8000/9000 as
the bare tag. That clears the 8.3.36 security floor that hlth-runtime
reports for shopware-web, -worker and -scheduler.

The flavoured tag needs two follow-ups:

- SHOPWARE_COMPOSER_PLATFORM_PHP drops the "-<flavor>" suffix before it
  pads major.minor. Without that, composer gets platform.php
  "8.3.36-caddy". It now renders 8.3.36, and 8.3 still renders 8.3.0.
- shopware/docker 6ae1717 ("feat: remove default env vars") removed
  SHOPWARE_ES_ENABLED=0, SHOPWARE_ES_INDEXING_ENABLED=0 and
  SHOPWARE_ES_INDEX_PREFIX= from the image. Shopware 6.7.13.0 reads
  them through %env()% with no container default, so env.j2 now sets
  the values the old image shipped. SHOPWARE_HTTP_DEFAULT_TTL keeps its
  7200 default from core services.xml. Nothing in Shopware reads
  DATABASE_PORT, and the role uses DATABASE_URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 00:45:19 +01:00

51 lines
3.6 KiB
YAML

---
application_id: "web-app-shopware"
entity_name: "{{ application_id | get_entity_name }}"
container_port: "{{ lookup('config', application_id, 'services.web.ports.internal.http') }}"
SHOPWARE_DOMAIN: "{{ lookup('domain',application_id) }}"
SHOPWARE_CONTAINER_VERSION: "{{ lookup('config', application_id, 'services.' ~ entity_name ~ '.version') }}"
SHOPWARE_CONTAINER_IMAGE: "{{ lookup('config', application_id, 'services.' ~ entity_name ~ '.image') }}"
SHOPWARE_PKG_VERSION: "{{ lookup('config', application_id, 'services.' ~ entity_name ~ '.package.version') }}"
SHOPWARE_PKG_NAME: "{{ lookup('config', application_id, 'services.' ~ entity_name ~ '.package.name') }}"
SHOPWARE_USER: "www-data"
SHOPWARE_ROOT: "/var/www/html"
SHOPWARE_PHP_VERSION: "{{ lookup('config', application_id, 'services.php.version') }}"
SHOPWARE_PHP_IMAGE: "{{ lookup('config', application_id, 'services.php.image') }}"
SHOPWARE_COMPOSER_PLATFORM_PHP: "{{ SHOPWARE_PHP_VERSION | regex_replace('-.*$', '') | regex_replace('^(\\d+\\.\\d+)$', '\\1.0') }}"
SHOPWARE_INIT_CONTAINER: "{{ lookup('config', application_id, 'services.init.name') }}"
SHOPWARE_WEB_CONTAINER: "{{ lookup('config', application_id, 'services.web.name') }}"
SHOPWARE_WEB_CONTAINER_ADDRESS: "{{ lookup('container_address', application_id, 'web') }}"
SHOPWARE_WORKER_CONTAINER: "{{ lookup('config', application_id, 'services.worker.name') }}"
SHOPWARE_SCHED_CONTAINER: "{{ lookup('config', application_id, 'services.scheduler.name') }}"
SHOPWARE_INIT_HOST: "{{ [ lookup('container', application_id, 'directories.volumes'), 'init.sh' ] | path_join }}"
SHOPWARE_INIT_DOCKER: "{{ lookup('volume', 'web-app-shopware', 'init_script').target }}"
SHOPWARE_FRAMEWORK_HOST: "{{ [ lookup('container', application_id, 'directories.config'), 'framework.yaml' ] | path_join }}"
SHOPWARE_ADMINOPENAUTH_HOST: "{{ [ lookup('container', application_id, 'directories.config'), 'adminopenauth.yaml' ] | path_join }}"
SHOPWARE_FILESYSTEM_HOST: "{{ [ lookup('container', application_id, 'directories.config'), 'shopware.yaml' ] | path_join }}"
SHOPWARE_OBJSTORE_ENABLED: "{{ lookup('objstore', application_id, 'enabled') }}"
SHOPWARE_WORKER_ENTRYPOINT: "{{ lookup('config', application_id, 'services.worker.entrypoint') }}"
SHOPWARE_SCHED_ENTRYPOINT: "{{ lookup('config', application_id, 'services.scheduler.entrypoint') }}"
SHOPWARE_OIDC_ENABLED: "{{ lookup('config', application_id, 'services.sso.enabled') }}"
SHOPWARE_OIDC_PLUGIN: KskHeptacomAdminOpenAuth
SHOPWARE_OIDC_INTERNAL_BASE: "http://{{ lookup('container_service', 'web-app-keycloak', 'keycloak') }}:{{ lookup('config', 'web-app-keycloak', 'services.keycloak.ports.internal.http')
}}" # nocheck: literal-protocol-lookup container-to-container hop that must bypass the canonical URL, because cURL refuses the .onion name the tls lookup returns
SHOPWARE_API_BASE: "http://127.0.0.1:{{ lookup('config', application_id, 'services.web.ports.internal.http') }}"
SHOPWARE_REDIS_ENABLED: "{{ lookup('config', application_id, 'services.redis.enabled') }}"
SHOPWARE_REDIS_URL: "{{ lookup('engine', 'redis', application_id, 'url') }}"
SHOPWARE_OPENSEARCH_PORT: "{{ lookup('config', application_id, 'services.opensearch.ports.internal.http') }}"
SHOPWARE_OPENSEARCH_ENABLED: "{{ lookup('config', application_id, 'services.opensearch.enabled') }}"
SHOPWARE_OPENSEARCH_CONTAINER: "{{ lookup('config', application_id, 'services.opensearch.name') }}"
SHOPWARE_OPENSEARCH_HEAP_MB: "{{ lookup('service_memory_mb', application_id, 'opensearch', 0.5) }}"
SHOPWARE_OPENSEARCH_INITIAL_ADMIN_PASSWORD: "{{ lookup('config', application_id, 'secrets.credentials.opensearch_initial_admin_password') }}"
swarm_stack_fatal_grace: 600