Repository navigation
fix(shopware/paas-meta): add CSP header to SVG and uploaded HTML files - #271
Merged
Jonas Elfering (keulinho) merged 1 commit intoOct 16, 2026
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the PR 😍 How to test these changes in your application
Diff between recipe versionsIn order to help with the review stage, I'm in charge of computing the diff between the various versions of patched recipes. shopware/paas-meta6.4 vs 6.5diff --git a/shopware/paas-meta/6.4/.platform/applications.yaml b/shopware/paas-meta/6.5/.platform/applications.yaml
index 1cd6b3b..23ca7bc 100644
--- a/shopware/paas-meta/6.4/.platform/applications.yaml
+++ b/shopware/paas-meta/6.5/.platform/applications.yaml
@@ -1,28 +1,22 @@
- name: app
- type: php:8.2
+ type: php:8.3
build:
- flavor: composer
+ flavor: none
variables:
env:
- # Tell Shopware to always install in production-mode.
APP_ENV: prod
- # Instance ID is empty by default, change to something unique in your project
- INSTANCE_ID: ""
# Enable HTTP Cache to get cache-control headers
SHOPWARE_HTTP_CACHE_ENABLED: 1
- # NVM and Node.js versions to install
- NVM_VERSION: v0.39.0
- NODE_VERSION: v18
- # Improve admin build speed
- DISABLE_ADMIN_COMPILATION_TYPECHECK: 1
- # Only build extension. Shopware assets are pre built in the tags
- SHOPWARE_ADMIN_BUILD_ONLY_EXTENSIONS: 1
+ NODE_VERSION: v20.18.0
+ SHOPWARE_CLI_VERSION: 0.4.62
# Elasticsearch, see https://developer.shopware.com/docs/guides/hosting/infrastructure/elasticsearch#activating-and-first-time-indexing
SHOPWARE_ES_ENABLED: 0
SHOPWARE_ES_INDEXING_ENABLED: 0
SHOPWARE_ES_INDEX_PREFIX: "sw6"
# Disables the Shopware web installer
SHOPWARE_SKIP_WEBINSTALLER: 1
+ # Performance optimization
+ COMPOSER_ROOT_VERSION: 1.0.0
php:
upload_max_filesize: 32M
post_max_size: 32M
@@ -51,151 +45,60 @@
hooks:
build: |
set -e
- echo "==================================================="
- echo "START BUILD SCRIPT"
- echo "Beginning with the NVM and NodeJS setup"
- echo "==================================================="
- # install nvm
- unset NPM_CONFIG_PREFIX
- export NVM_DIR="$PLATFORM_APP_DIR/.nvm"
+ echo "Installing Node ${NODE_VERSION} and shopware-cli ${SHOPWARE_CLI_VERSION}"
- # install.sh will automatically install NodeJS based on the presence of $NODE_VERSION
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh | bash
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
+ mkdir -p /tmp/tools
- # have nvm available and load the correct node version in your ssh session
- echo 'unset NPM_CONFIG_PREFIX' >> .bash_profile
- echo 'export NO_UPDATE_NOTIFIER=1' >> .bash_profile
- echo 'export NVM_DIR="$PLATFORM_APP_DIR/.nvm"' >> .bash_profile
- echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> .bash_profile
+ curl -qL -s -o node.tar.xz "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"
+ tar xf node.tar.xz -C /tmp/tools --strip-components=1
+ curl -qL -s -o shopware-cli.tar.gz https://github.com/shopware/shopware-cli/releases/download/${SHOPWARE_CLI_VERSION}/shopware-cli_Linux_x86_64.tar.gz
+ tar xf shopware-cli.tar.gz -C /tmp/tools shopware-cli
+ mv /tmp/tools/shopware-cli /tmp/tools/bin
- # Disable UI installer
- touch install.lock
+ rm node.tar.xz shopware-cli.tar.gz
- echo "==================================================="
- echo "REMOVE FASTLY WHEN NOT A PRODUCTION OR STAGE ENV"
- echo "==================================================="
- echo "The Environment has the following type: $PROJECT_ENVIRONMENT_TYPE"
- if [ "$PROJECT_ENVIRONMENT_TYPE" = development ]; then
- echo "remove fastly.yaml on environment type development"
- rm -f config/packages/fastly.yaml
- fi
- echo "Fastly setup step done"
+ export PATH="/tmp/tools/bin:$PATH"
- echo "==================================================="
- echo "COPY THEME AND RUN JS BUILD"
- echo "==================================================="
- # compile theme and save config for later (will be moved to mount).
- # warnings can be ignored (the process is trying to access Redis which is not yet available)
- export CI=true
- ./bin/build-js.sh
- mkdir build-tmp
- cp -R files/theme-config build-tmp
+ export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
- # save plugin config for later (will be moved to mount)
- cp var/plugins.json build-plugins.json
- deploy: |
- set -e
- echo "==================================================="
- echo "START DEPLOY SCRIPT"
- echo "Beginning restoring theme-config files and plugin config"
- echo "==================================================="
- if [ -z "${JWT_PUBLIC_KEY}" ]; then
- echo "~"
- echo "~"
- echo "~"
- echo "Please initialize the JWT Tokens to proceed. https://developer.shopware.com/docs/products/paas/build-deploy"
- echo "~"
- echo "~"
- echo "~"
- exit 1;
- fi
+ shopware-cli project ci .
- # restore theme config from build to mount in case theme needs rebuilding during runtime
- cp -R build-tmp/theme-config files/
+ # Moving files of the mounts to avoid warnings
+ mv $APP_CACHE_DIR ./RO-localCache
+ mv ./var ./RO-var
- # restore plugin config to mount
- cp build-plugins.json var/plugins.json
+ deploy: |
+ set -e
- echo "==================================================="
- echo "INITIALIZE SHOPWARE'S SITE DATA IF NOT ALREADY INSTALLED"
- echo "==================================================="
- # Initialize the Shopware site's data set if it's not already installed.
- # (This is only for demo/first install and can be removed once Shopware is initialized)
- if [ ! -f $PLATFORM_APP_DIR/installer/installed ]; then
- # setup the environment
- # create database with a basic setup (admin user and storefront sales channel).
- # this will try to run theme:compile which cannot be disabled, so it will throw a bunch of warnings
- # that can be ignored (we use stateless build anyway, so this is done already at this point)
- echo "Running system:install (Warnings for theme:compile can be ignored)"
- bin/console system:install --create-database --basic-setup --force
- bin/console theme:change --all Storefront --no-compile
- bin/console theme:dump
+ echo "Syncing files created during the build in the mounts"
+ rsync -av --delete "${PLATFORM_APP_DIR}/RO-localCache/" "${APP_CACHE_DIR}/"
+ rsync -av "${PLATFORM_APP_DIR}/RO-var/" "${PLATFORM_APP_DIR}/var/"
- # Disable FRW
- bin/console system:config:set core.frw.completedAt '2019-10-07T10:46:23+00:00'
+ echo "Create Dompdf working directories and sync fonts from the vendor folder"
+ if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/tempDir" ]; then
+ mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/tempDir"
+ fi
+ if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/fontCache" ]; then
+ mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/fontCache"
+ fi
+ rsync -av "${PLATFORM_APP_DIR}/vendor/dompdf/dompdf/lib/fonts" "${PLATFORM_APP_DIR}/var/dompdf/fontDir"
- # mark system as installed
- touch $PLATFORM_APP_DIR/installer/installed
- fi;
+ php vendor/bin/shopware-deployment-helper run --skip-asset-install --skip-theme-compile
- echo "==================================================="
- echo "UPDATE SALES CHANNEL DOMAIN IF ENVIRONMENT TYPE IS NOT PRODUCTION"
- echo "==================================================="
- # Configure the sales channel domains automatically for non-production environments
if [ "$PLATFORM_ENVIRONMENT_TYPE" != production ]; then
+ echo "==================================================="
+ echo "UPDATE SALES CHANNEL DOMAIN IF ENVIRONMENT TYPE IS NOT PRODUCTION"
+ echo "==================================================="
+
export FRONTEND_URL=`echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.id=="shopware") | .key'`
export FRONTEND_DOMAIN=`php -r 'echo parse_url($_SERVER["FRONTEND_URL"], PHP_URL_HOST);'`
bin/console sales-channel:update:domain "$FRONTEND_DOMAIN"
fi
+ post_deploy: |
+ set -e
- echo "==================================================="
- echo "RUN MIGRATIONS"
- echo "==================================================="
- # optional: run migration automatically with deploy
- bin/console database:migrate --all # Run Shopware core migrations
- php bin/console plugin:refresh
-
- list_plugins_not_installed=$(php bin/console plugin:list --json | jq 'map(select(.installedAt == null)) | .[].name' -r)
-
- for plugin in $list_plugins_not_installed; do
- echo "Installing Plugin $plugin ..."
- php bin/console plugin:install --activate --skip-asset-build $plugin
- done
-
- list_with_updates=$(php bin/console plugin:list --json | jq 'map(select(.upgradeVersion != null)) | .[].name' -r)
-
- for plugin in $list_with_updates; do
- echo "Updating Plugin $plugin ..."
- php bin/console plugin:update --skip-asset-build $plugin
- done
-
- echo "==================================================="
- echo "CLEAR CACHES"
- echo "==================================================="
- # run cache clear commands, on grid environments this should run in the deploy hook,
- # on dedicated generation 2, it will run as part of the pre_start hook (to be set up by Platform.sh support)
- if [ -z "$PLATFORM_REGISTRY_NUMBER" ]; then
- sh bin/prestart_cacheclear.sh
- else
- # on dedicated gen 2, we need to explictly clear the redis cache since redis is not available during pre_start
- bin/console cache:pool:clear cache.object
- fi
-
- echo "==================================================="
- echo "SETUP FASTLY AND CLEAR OPCACHE"
- echo "==================================================="
- if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ] || [ "$PLATFORM_ENVIRONMENT_TYPE" = "stage" ]; then
- if [ -e bin/setup-fastly.sh ]; then
- echo "Running setup-fastly.sh script"
- ./bin/setup-fastly.sh
- else
- echo "setup-fastly.sh script not found"
- fi
- fi
+ php bin/console theme:compile
- # Send USR2 signal to php-fpm to clear the opcache
- pkill -f -USR2 -u web php-fpm
# The relationships of the application with services or other applications.
# The left-hand side is the name of the relationship as it will be exposed
# to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
@@ -224,26 +127,22 @@
source: service
service: fileshare
source_path: "public/thumbnail"
- "/config/secrets":
+ "/public/theme":
source: service
service: fileshare
- source_path: "config/secrets"
+ source_path: "public/theme"
+ "/public/sitemap":
+ source: service
+ service: fileshare
+ source_path: "public/sitemap"
"/var":
source: service
service: fileshare
source_path: "var"
- "/var/cache":
- source: local
- source_path: "var/cache"
- "/installer":
+ "/localCache":
source: local
- source_path: "installer"
- "/.global":
- source: local
- source_path: "global"
- "/.cache":
- source: local
- source_path: ".cache"
+ source_path: "localCache"
+
# The configuration of app when it is exposed to the web.
web:
locations:
@@ -267,9 +166,13 @@
queue:
disk: 128
commands:
- start: bin/console messenger:consume async low_priority failed --memory-limit=$(cat /run/config.json | jq .info.limits.memory)M --time-limit=295
+ pre_start: |
+ export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
+ rm -rf $APP_CACHE_DIR/var
+ php $PLATFORM_APP_DIR/bin/console
+ start: APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache bin/console messenger:consume async low_priority failed --memory-limit=$(cat /run/config.json | jq .info.limits.memory)M --time-limit=295
crons:
scheduler:
spec: '*/5 * * * *'
- cmd: 'php bin/console scheduled-task:run --no-wait'
+ cmd: 'APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache php bin/console scheduled-task:run --no-wait'
diff --git a/shopware/paas-meta/6.4/.platform/services.yaml b/shopware/paas-meta/6.5/.platform/services.yaml
index 4c7c956..2a9c087 100644
--- a/shopware/paas-meta/6.4/.platform/services.yaml
+++ b/shopware/paas-meta/6.5/.platform/services.yaml
@@ -1,5 +1,5 @@
db:
- type: mariadb:10.6
+ type: mariadb:11.2
disk: 2048
cacheredis:
type: redis:7.0
diff --git a/shopware/paas-meta/6.4/bin/prestart_cacheclear.sh b/shopware/paas-meta/6.4/bin/prestart_cacheclear.sh
deleted file mode 100755
index 8b3bc5a..0000000
--- a/shopware/paas-meta/6.4/bin/prestart_cacheclear.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env sh
-# This script is run as part of the .platform.app.yaml deployment step
-# On dedicated generation 2 clusters, this should be setup by Platform.sh team as part of pre_start hook
-
-set -e
-
-echo "removing var/cache/${APP_ENV}_*/*.*"
-rm -Rf var/cache/${APP_ENV}_*/*.*
-
-echo "clearing application cache"
-php bin/console cache:clear
-
-echo "done executing pre_start cache clear"
\ No newline at end of file
diff --git a/shopware/paas-meta/6.4/config/packages/paas.yaml b/shopware/paas-meta/6.5/config/packages/paas.yaml
index 62a004e..a67595d 100644
--- a/shopware/paas-meta/6.4/config/packages/paas.yaml
+++ b/shopware/paas-meta/6.5/config/packages/paas.yaml
@@ -1,12 +1,13 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/shopware/shopware/refs/heads/trunk/config-schema.json
# This file contains all default configuration or PaaS
framework:
session:
- handler_id: "%env(SESSION_REDIS_URL)%/0"
+ handler_id: "%env(SESSION_REDIS_URL)%/0?persistent=1"
cache:
app: cache.adapter.redis
system: cache.adapter.redis
- default_redis_provider: "%env(CACHE_URL)%/0"
+ default_redis_provider: "%env(CACHE_URL)%/0?persistent=1"
shopware:
api:
@@ -15,33 +16,32 @@ shopware:
public_key_path: '%env(base64:JWT_PUBLIC_KEY)%'
admin_worker:
enable_admin_worker: false
+ enable_queue_stats_worker: false
deployment:
cluster_setup: true
+ dompdf:
+ options:
+ tempDir: '%kernel.project_dir%/var/dompdf/tempDir'
+ fontDir: '%kernel.project_dir%/var/dompdf/fontDir'
+ fontCache: '%kernel.project_dir%/var/dompdf/fontCache'
-when@prod:
- monolog:
- handlers:
- main:
- type: fingers_crossed
- action_level: error
- handler: nested
- excluded_http_codes: [404, 405]
- buffer_size: 50 # How many messages should be saved? Prevent memory leaks
- nested:
- type: stream
- path: php://stderr
- level: debug
- formatter: monolog.formatter.json
- console:
- type: console
- process_psr_3_messages: false
- channels: ["!event", "!doctrine"]
-
-storefront:
- theme:
- config_loader_id: Shopware\Storefront\Theme\ConfigLoader\StaticFileConfigLoader
- available_theme_provider: Shopware\Storefront\Theme\ConfigLoader\StaticFileAvailableThemeProvider
- theme_path_builder_id: Shopware\Storefront\Theme\MD5ThemePathBuilder
+monolog:
+ handlers:
+ main:
+ type: fingers_crossed
+ action_level: error
+ handler: nested
+ excluded_http_codes: [404, 405]
+ buffer_size: 50
+ nested:
+ type: stream
+ path: php://stderr
+ level: debug
+ formatter: monolog.formatter.json
+ console:
+ type: console
+ process_psr_3_messages: false
+ channels: ["!event", "!doctrine"]
elasticsearch:
index_settings:
diff --git a/shopware/paas-meta/6.4/files/theme-config/6753315de5ae4e9081228ff9d6e7b802.json b/shopware/paas-meta/6.4/files/theme-config/6753315de5ae4e9081228ff9d6e7b802.json
deleted file mode 100644
index f96ebb6..0000000
--- a/shopware/paas-meta/6.4/files/theme-config/6753315de5ae4e9081228ff9d6e7b802.json
+++ /dev/null
@@ -1 +0,0 @@
-{"themeConfig":{"blocks":{"themeColors":{"label":{"en-GB":"Theme colours","de-DE":"Theme-Farben"}},"typography":{"label":{"en-GB":"Typography","de-DE":"Typografie"}},"eCommerce":{"label":{"en-GB":"E-Commerce","de-DE":"E-Commerce"}},"statusColors":{"label":{"en-GB":"Status messages","de-DE":"Status-Ausgaben"}},"media":{"label":{"en-GB":"Media","de-DE":"Medien"}},"unordered":{"label":{"en-GB":"Misc","de-DE":"Sonstige"}}},"fields":{"sw-color-brand-primary":{"label":{"en-GB":"Primary colour","de-DE":"Prim\u00e4rfarbe"},"type":"color","value":"#008490","editable":true,"block":"themeColors","order":100},"sw-color-brand-secondary":{"label":{"en-GB":"Secondary colour","de-DE":"Sekund\u00e4rfarbe"},"type":"color","value":"#526e7f","editable":true,"block":"themeColors","order":200},"sw-border-color":{"label":{"en-GB":"Border","de-DE":"Rahmen"},"type":"color","value":"#bcc1c7","editable":true,"block":"themeColors","order":300},"sw-background-color":{"label":{"en-GB":"Background","de-DE":"Hintergrund"},"type":"color","value":"#fff","editable":true,"block":"themeColors","order":400},"sw-color-success":{"label":{"en-GB":"Success","de-DE":"Erfolg"},"type":"color","value":"#3cc261","editable":true,"block":"statusColors","order":100},"sw-color-info":{"label":{"en-GB":"Information","de-DE":"Information"},"type":"color","value":"#26b6cf","editable":true,"block":"statusColors","order":200},"sw-color-warning":{"label":{"en-GB":"Notice","de-DE":"Hinweis"},"type":"color","value":"#ffbd5d","editable":true,"block":"statusColors","order":300},"sw-color-danger":{"label":{"en-GB":"Error","de-DE":"Fehler"},"type":"color","value":"#e52427","editable":true,"block":"statusColors","order":400},"sw-font-family-base":{"label":{"en-GB":"Fonttype text","de-DE":"Schriftart Text"},"type":"fontFamily","value":"'Inter', sans-serif","editable":true,"block":"typography","order":100},"sw-text-color":{"label":{"en-GB":"Text colour","de-DE":"Textfarbe"},"type":"color","value":"#4a545b","editable":true,"block":"typography","order":200},"sw-font-family-headline":{"label":{"en-GB":"Fonttype headline","de-DE":"Schriftart \u00dcberschrift"},"type":"fontFamily","value":"'Inter', sans-serif","editable":true,"block":"typography","order":300},"sw-headline-color":{"label":{"en-GB":"Headline colour","de-DE":"\u00dcberschriftfarbe"},"type":"color","value":"#4a545b","editable":true,"block":"typography","order":400},"sw-color-price":{"label":{"en-GB":"Price","de-DE":"Preis"},"type":"color","value":"#4a545b","editable":true,"block":"eCommerce","order":100},"sw-color-buy-button":{"label":{"en-GB":"Buy button","de-DE":"Kaufen-Button"},"type":"color","value":"#008490","editable":true,"block":"eCommerce","order":200},"sw-color-buy-button-text":{"label":{"en-GB":"Buy button text","de-DE":"Kaufen-Button Text"},"type":"color","value":"#fff","editable":true,"block":"eCommerce","order":300},"sw-logo-desktop":{"label":{"en-GB":"Desktop","de-DE":"Desktop"},"helpText":{"en-GB":"Displayed for viewports of above 991px","de-DE":"Wird \u00fcber einem Viewport von 991px angezeigt"},"type":"media","value":"790fc674240a45cbb4dc5dba98920fe8","editable":true,"block":"media","order":100,"fullWidth":true},"sw-logo-tablet":{"label":{"en-GB":"Tablet","de-DE":"Tablet"},"helpText":{"en-GB":"Displayed between a viewport of 767px to 991px","de-DE":"Wird zwischen einem viewport von 767px bis 991px angezeigt"},"type":"media","value":"790fc674240a45cbb4dc5dba98920fe8","editable":true,"block":"media","order":200,"fullWidth":true},"sw-logo-mobile":{"label":{"en-GB":"Mobile","de-DE":"Mobil"},"helpText":{"en-GB":"Displayed up to a viewport of 767px","de-DE":"Wird bis zu einem Viewport von 767px angezeigt"},"type":"media","value":"790fc674240a45cbb4dc5dba98920fe8","editable":true,"block":"media","order":300,"fullWidth":true},"sw-logo-share":{"label":{"en-GB":"App & share icon","de-DE":"App- & Share-Icon"},"type":"media","value":"","editable":true,"block":"media","order":400},"sw-logo-favicon":{"label":{"en-GB":"Favicon","de-DE":"Favicon"},"type":"media","value":"d095060a4539402a9c686948ff307a0b","editable":true,"block":"media","order":500}},"sw-color-brand-primary":{"name":"sw-color-brand-primary","label":{"en-GB":"Primary colour","de-DE":"Prim\u00e4rfarbe"},"helpText":null,"type":"color","value":"#008490","editable":true,"block":"themeColors","section":null,"tab":null,"order":100,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-brand-secondary":{"name":"sw-color-brand-secondary","label":{"en-GB":"Secondary colour","de-DE":"Sekund\u00e4rfarbe"},"helpText":null,"type":"color","value":"#526e7f","editable":true,"block":"themeColors","section":null,"tab":null,"order":200,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-border-color":{"name":"sw-border-color","label":{"en-GB":"Border","de-DE":"Rahmen"},"helpText":null,"type":"color","value":"#bcc1c7","editable":true,"block":"themeColors","section":null,"tab":null,"order":300,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-background-color":{"name":"sw-background-color","label":{"en-GB":"Background","de-DE":"Hintergrund"},"helpText":null,"type":"color","value":"#fff","editable":true,"block":"themeColors","section":null,"tab":null,"order":400,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-success":{"name":"sw-color-success","label":{"en-GB":"Success","de-DE":"Erfolg"},"helpText":null,"type":"color","value":"#3cc261","editable":true,"block":"statusColors","section":null,"tab":null,"order":100,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-info":{"name":"sw-color-info","label":{"en-GB":"Information","de-DE":"Information"},"helpText":null,"type":"color","value":"#26b6cf","editable":true,"block":"statusColors","section":null,"tab":null,"order":200,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-warning":{"name":"sw-color-warning","label":{"en-GB":"Notice","de-DE":"Hinweis"},"helpText":null,"type":"color","value":"#ffbd5d","editable":true,"block":"statusColors","section":null,"tab":null,"order":300,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-danger":{"name":"sw-color-danger","label":{"en-GB":"Error","de-DE":"Fehler"},"helpText":null,"type":"color","value":"#e52427","editable":true,"block":"statusColors","section":null,"tab":null,"order":400,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-font-family-base":{"name":"sw-font-family-base","label":{"en-GB":"Fonttype text","de-DE":"Schriftart Text"},"helpText":null,"type":"fontFamily","value":"'Inter', sans-serif","editable":true,"block":"typography","section":null,"tab":null,"order":100,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-text-color":{"name":"sw-text-color","label":{"en-GB":"Text colour","de-DE":"Textfarbe"},"helpText":null,"type":"color","value":"#4a545b","editable":true,"block":"typography","section":null,"tab":null,"order":200,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-font-family-headline":{"name":"sw-font-family-headline","label":{"en-GB":"Fonttype headline","de-DE":"Schriftart \u00dcberschrift"},"helpText":null,"type":"fontFamily","value":"'Inter', sans-serif","editable":true,"block":"typography","section":null,"tab":null,"order":300,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-headline-color":{"name":"sw-headline-color","label":{"en-GB":"Headline colour","de-DE":"\u00dcberschriftfarbe"},"helpText":null,"type":"color","value":"#4a545b","editable":true,"block":"typography","section":null,"tab":null,"order":400,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-price":{"name":"sw-color-price","label":{"en-GB":"Price","de-DE":"Preis"},"helpText":null,"type":"color","value":"#4a545b","editable":true,"block":"eCommerce","section":null,"tab":null,"order":100,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-buy-button":{"name":"sw-color-buy-button","label":{"en-GB":"Buy button","de-DE":"Kaufen-Button"},"helpText":null,"type":"color","value":"#008490","editable":true,"block":"eCommerce","section":null,"tab":null,"order":200,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-color-buy-button-text":{"name":"sw-color-buy-button-text","label":{"en-GB":"Buy button text","de-DE":"Kaufen-Button Text"},"helpText":null,"type":"color","value":"#fff","editable":true,"block":"eCommerce","section":null,"tab":null,"order":300,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-logo-desktop":{"name":"sw-logo-desktop","label":{"en-GB":"Desktop","de-DE":"Desktop"},"helpText":{"en-GB":"Displayed for viewports of above 991px","de-DE":"Wird \u00fcber einem Viewport von 991px angezeigt"},"type":"media","value":"https:\/\/pr-18-yjncdpi-p272hx6fwtpmm.eu-5.platformsh.site\/\/media\/4b\/7c\/5f\/1622109741\/demostore-logo.png","editable":true,"block":"media","section":null,"tab":null,"order":100,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":true,"extensions":[]},"sw-logo-tablet":{"name":"sw-logo-tablet","label":{"en-GB":"Tablet","de-DE":"Tablet"},"helpText":{"en-GB":"Displayed between a viewport of 767px to 991px","de-DE":"Wird zwischen einem viewport von 767px bis 991px angezeigt"},"type":"media","value":"https:\/\/pr-18-yjncdpi-p272hx6fwtpmm.eu-5.platformsh.site\/\/media\/4b\/7c\/5f\/1622109741\/demostore-logo.png","editable":true,"block":"media","section":null,"tab":null,"order":200,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":true,"extensions":[]},"sw-logo-mobile":{"name":"sw-logo-mobile","label":{"en-GB":"Mobile","de-DE":"Mobil"},"helpText":{"en-GB":"Displayed up to a viewport of 767px","de-DE":"Wird bis zu einem Viewport von 767px angezeigt"},"type":"media","value":"https:\/\/pr-18-yjncdpi-p272hx6fwtpmm.eu-5.platformsh.site\/\/media\/4b\/7c\/5f\/1622109741\/demostore-logo.png","editable":true,"block":"media","section":null,"tab":null,"order":300,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":true,"extensions":[]},"sw-logo-share":{"name":"sw-logo-share","label":{"en-GB":"App & share icon","de-DE":"App- & Share-Icon"},"helpText":null,"type":"media","value":"","editable":true,"block":"media","section":null,"tab":null,"order":400,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]},"sw-logo-favicon":{"name":"sw-logo-favicon","label":{"en-GB":"Favicon","de-DE":"Favicon"},"helpText":null,"type":"media","value":"https:\/\/pr-18-yjncdpi-p272hx6fwtpmm.eu-5.platformsh.site\/\/media\/ee\/67\/8a\/1622109741\/favicon.png","editable":true,"block":"media","section":null,"tab":null,"order":500,"sectionOrder":null,"blockOrder":null,"tabOrder":null,"custom":null,"scss":null,"fullWidth":null,"extensions":[]}},"technicalName":"Storefront","name":"Shopware default theme","previewMedia":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/assets\/defaultThemePreview.jpg","author":"shopware AG","isTheme":true,"styleFiles":[{"filepath":"\/app\/vendor\/shopware\/storefront\/Resources\/app\/storefront\/src\/scss\/base.scss","resolveMapping":{"vendor":"\/app\/vendor\/shopware\/storefront\/Resources\/app\/storefront\/vendor"},"extensions":[]},{"filepath":"\/app\/vendor\/shopware\/storefront\/Resources\/app\/storefront\/src\/scss\/skin\/shopware\/_base.scss","resolveMapping":{"vendor":"\/app\/vendor\/shopware\/storefront\/Resources\/app\/storefront\/vendor"},"extensions":[]},{"filepath":"@Plugins","resolveMapping":[],"extensions":[]}],"scriptFiles":[{"filepath":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/js\/vendor-node.js","resolveMapping":[],"extensions":[]},{"filepath":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/js\/vendor-shared.js","resolveMapping":[],"extensions":[]},{"filepath":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/js\/runtime.js","resolveMapping":[],"extensions":[]},{"filepath":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/storefront\/js\/storefront.js","resolveMapping":[],"extensions":[]},{"filepath":"@Plugins","resolveMapping":[],"extensions":[]}],"storefrontEntryFilepath":"vendor\/shopware\/storefront\/Resources\/app\/storefront\/src\/main.js","basePath":"vendor\/shopware\/storefront\/Resources","assetPaths":["vendor\/shopware\/storefront\/Resources\/app\/storefront\/dist\/assets"],"viewInheritance":[],"iconSets":[],"extensions":[]}
diff --git a/shopware/paas-meta/6.4/files/theme-config/index.json b/shopware/paas-meta/6.4/files/theme-config/index.json
deleted file mode 100644
index d24533b..0000000
--- a/shopware/paas-meta/6.4/files/theme-config/index.json
+++ /dev/null
@@ -1 +0,0 @@
-{"a3b6618b39d549fc87c97fb2422d085f":"6753315de5ae4e9081228ff9d6e7b802"}
diff --git a/shopware/paas-meta/6.4/manifest.json b/shopware/paas-meta/6.5/manifest.json
index 2ba26a6..5fc5880 100644
--- a/shopware/paas-meta/6.4/manifest.json
+++ b/shopware/paas-meta/6.5/manifest.json
@@ -4,15 +4,13 @@
".platform/": ".platform/",
"bin/": "%BIN_DIR%/",
"config/": "%CONFIG_DIR%/",
- "files/": "files/"
+ "files/": "files/",
+ "root/": ""
},
"container": {
"default_redis_database": "0",
"default_redis_host": "rediscache.internal",
"default_redis_port": "6379",
"env(CACHE_URL)": "redis://localhost"
- },
- "gitignore": [
- "!/files/theme-config"
- ]
+ }
}
diff --git a/shopware/paas-meta/6.4/post-install.txt b/shopware/paas-meta/6.5/post-install.txt
index a7422d8..1bb25b1 100644
--- a/shopware/paas-meta/6.4/post-install.txt
+++ b/shopware/paas-meta/6.5/post-install.txt
@@ -1,3 +1,2 @@
-* After first installation the Storefront will miss some css files
- * To fix this dump the current theme configuration using platform mount:download --mount 'files' --target 'files' -A app
- * Add that files to your git repository and push to build the storefront
+* Before pushing the first time, make sure you did created the JWT keys and stored them as secrets:
+ * https://developer.shopware.com/docs/v6.5/products/paas/build-deploy.html#jwt-keys
diff --git a/shopware/paas-meta/6.5/root/.environment b/shopware/paas-meta/6.5/root/.environment
new file mode 100644
index 0000000..4c668b5
--- /dev/null
+++ b/shopware/paas-meta/6.5/root/.environment
@@ -0,0 +1 @@
+export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
diff --git a/shopware/paas-meta/6.5/root/.shopware-project.yaml b/shopware/paas-meta/6.5/root/.shopware-project.yaml
new file mode 100644
index 0000000..22acd5d
--- /dev/null
+++ b/shopware/paas-meta/6.5/root/.shopware-project.yaml
@@ -0,0 +1,3 @@
+deployment:
+ cache:
+ always_clear: true6.5 vs 6.6diff --git a/shopware/paas-meta/6.5/.platform/applications.yaml b/shopware/paas-meta/6.6/.platform/applications.yaml
index 23ca7bc..5deb28f 100644
--- a/shopware/paas-meta/6.5/.platform/applications.yaml
+++ b/shopware/paas-meta/6.6/.platform/applications.yaml
@@ -1,5 +1,5 @@
- name: app
- type: php:8.3
+ type: php:8.4
build:
flavor: none
variables:
@@ -17,6 +17,8 @@
SHOPWARE_SKIP_WEBINSTALLER: 1
# Performance optimization
COMPOSER_ROOT_VERSION: 1.0.0
+ # Set the log directory to a path outside of the shared mount to avoid performance issues
+ APP_LOG_DIR: /app/localLog
php:
upload_max_filesize: 32M
post_max_size: 32M
@@ -60,6 +62,7 @@
export PATH="/tmp/tools/bin:$PATH"
export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
+ export SHOPWARE_SKIP_ASSET_INSTALL_CACHE_INVALIDATION=1
shopware-cli project ci .
@@ -97,7 +100,7 @@
post_deploy: |
set -e
- php bin/console theme:compile
+ php bin/console theme:compile --sync
# The relationships of the application with services or other applications.
# The left-hand side is the name of the relationship as it will be exposed
@@ -142,6 +145,9 @@
"/localCache":
source: local
source_path: "localCache"
+ "/localLog":
+ source: local
+ source_path: "localLog"
# The configuration of app when it is exposed to the web.
web:
diff --git a/shopware/paas-meta/6.5/.platform/services.yaml b/shopware/paas-meta/6.6/.platform/services.yaml
index 2a9c087..e59fcaa 100644
--- a/shopware/paas-meta/6.5/.platform/services.yaml
+++ b/shopware/paas-meta/6.6/.platform/services.yaml
@@ -1,23 +1,26 @@
db:
- type: mariadb:11.2
+ type: mariadb:11.4
disk: 2048
+
cacheredis:
- type: redis:7.0
+ type: redis:7.2
configuration:
maxmemory_policy: volatile-lfu
+
sessionredis:
- type: redis-persistent:7.0
+ type: redis-persistent:7.2
disk: 1024
configuration:
maxmemory_policy: allkeys-lru
+
# comment if you want to disable rabbitmq
rabbitmq:
- type: rabbitmq:3.8
+ type: rabbitmq:3.13
disk: 1024
# uncomment if you want to use opensearch
#opensearch:
-# type: opensearch:1.2
+# type: opensearch:2
# disk: 256
# Change the disk space according to your needs for a.o. media files
diff --git a/shopware/paas-meta/6.5/config/packages/paas.yaml b/shopware/paas-meta/6.6/config/packages/paas.yaml
index a67595d..8c2ea01 100644
--- a/shopware/paas-meta/6.5/config/packages/paas.yaml
+++ b/shopware/paas-meta/6.6/config/packages/paas.yaml
@@ -12,8 +12,7 @@ framework:
shopware:
api:
jwt_key:
- private_key_path: '%env(base64:JWT_PRIVATE_KEY)%'
- public_key_path: '%env(base64:JWT_PUBLIC_KEY)%'
+ use_app_secret: true
admin_worker:
enable_admin_worker: false
enable_queue_stats_worker: false
diff --git a/shopware/paas-meta/6.5/post-install.txt b/shopware/paas-meta/6.5/post-install.txt
deleted file mode 100644
index 1bb25b1..0000000
--- a/shopware/paas-meta/6.5/post-install.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-* Before pushing the first time, make sure you did created the JWT keys and stored them as secrets:
- * https://developer.shopware.com/docs/v6.5/products/paas/build-deploy.html#jwt-keys6.6 vs 6.7diff --git a/shopware/paas-meta/6.6/.platform/applications.yaml b/shopware/paas-meta/6.7/.platform/applications.yaml
index 5deb28f..9932daf 100644
--- a/shopware/paas-meta/6.6/.platform/applications.yaml
+++ b/shopware/paas-meta/6.7/.platform/applications.yaml
@@ -1,184 +1,184 @@
-- name: app
- type: php:8.4
- build:
- flavor: none
- variables:
- env:
- APP_ENV: prod
- # Enable HTTP Cache to get cache-control headers
- SHOPWARE_HTTP_CACHE_ENABLED: 1
- NODE_VERSION: v20.18.0
- SHOPWARE_CLI_VERSION: 0.4.62
- # Elasticsearch, see https://developer.shopware.com/docs/guides/hosting/infrastructure/elasticsearch#activating-and-first-time-indexing
- SHOPWARE_ES_ENABLED: 0
- SHOPWARE_ES_INDEXING_ENABLED: 0
- SHOPWARE_ES_INDEX_PREFIX: "sw6"
- # Disables the Shopware web installer
- SHOPWARE_SKIP_WEBINSTALLER: 1
- # Performance optimization
- COMPOSER_ROOT_VERSION: 1.0.0
- # Set the log directory to a path outside of the shared mount to avoid performance issues
- APP_LOG_DIR: /app/localLog
- php:
- upload_max_filesize: 32M
- post_max_size: 32M
- memory_limit: 512M
- "zend.assertions": -1
- "opcache.enable_file_override": 1
- "opcache.interned_strings_buffer": 20
- "opcache.validate_timestamps": 0
- "zend.detect_unicode": 0
- realpath_cache_ttl: 3600
- "opcache.memory_consumption": 128M
- "opcache.max_accelerated_files": 20000
- # Specify additional PHP extensions that should be loaded.
- runtime:
- extensions:
- - ctype
- - dom
- - iconv
- - mbstring
- - fileinfo
- - intl
- - redis
- - sodium
- - amqp
- # The hooks that will be performed when the package is deployed.
- hooks:
- build: |
- set -e
- echo "Installing Node ${NODE_VERSION} and shopware-cli ${SHOPWARE_CLI_VERSION}"
-
- mkdir -p /tmp/tools
-
- curl -qL -s -o node.tar.xz "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"
- tar xf node.tar.xz -C /tmp/tools --strip-components=1
- curl -qL -s -o shopware-cli.tar.gz https://github.com/shopware/shopware-cli/releases/download/${SHOPWARE_CLI_VERSION}/shopware-cli_Linux_x86_64.tar.gz
- tar xf shopware-cli.tar.gz -C /tmp/tools shopware-cli
- mv /tmp/tools/shopware-cli /tmp/tools/bin
-
- rm node.tar.xz shopware-cli.tar.gz
-
- export PATH="/tmp/tools/bin:$PATH"
-
- export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
- export SHOPWARE_SKIP_ASSET_INSTALL_CACHE_INVALIDATION=1
-
- shopware-cli project ci .
-
- # Moving files of the mounts to avoid warnings
- mv $APP_CACHE_DIR ./RO-localCache
- mv ./var ./RO-var
-
- deploy: |
- set -e
-
- echo "Syncing files created during the build in the mounts"
- rsync -av --delete "${PLATFORM_APP_DIR}/RO-localCache/" "${APP_CACHE_DIR}/"
- rsync -av "${PLATFORM_APP_DIR}/RO-var/" "${PLATFORM_APP_DIR}/var/"
-
- echo "Create Dompdf working directories and sync fonts from the vendor folder"
- if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/tempDir" ]; then
- mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/tempDir"
- fi
- if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/fontCache" ]; then
- mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/fontCache"
- fi
- rsync -av "${PLATFORM_APP_DIR}/vendor/dompdf/dompdf/lib/fonts" "${PLATFORM_APP_DIR}/var/dompdf/fontDir"
-
- php vendor/bin/shopware-deployment-helper run --skip-asset-install --skip-theme-compile
-
- if [ "$PLATFORM_ENVIRONMENT_TYPE" != production ]; then
- echo "==================================================="
- echo "UPDATE SALES CHANNEL DOMAIN IF ENVIRONMENT TYPE IS NOT PRODUCTION"
- echo "==================================================="
-
- export FRONTEND_URL=`echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.id=="shopware") | .key'`
- export FRONTEND_DOMAIN=`php -r 'echo parse_url($_SERVER["FRONTEND_URL"], PHP_URL_HOST);'`
- bin/console sales-channel:update:domain "$FRONTEND_DOMAIN"
- fi
- post_deploy: |
- set -e
-
- php bin/console theme:compile --sync
-
- # The relationships of the application with services or other applications.
- # The left-hand side is the name of the relationship as it will be exposed
- # to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
- # side is in the form `<service name>:<endpoint name>`.
- relationships:
- database: "db:mysql"
- rediscache: "cacheredis:redis"
- redissession: "sessionredis:redis"
- # comment to disable rabbitmq
- rabbitmqqueue: "rabbitmq:rabbitmq"
- # uncomment if you want to use opensearch/elasticsearch
- # opensearch: "opensearch:opensearch"
- # The size of the persistent disk of the application (in MB).
- disk: 2048
- # The mounts that will be performed when the package is deployed.
- mounts:
- "/files":
- source: service
- service: fileshare
- source_path: "files"
- "/public/media":
- source: service
- service: fileshare
- source_path: "public/media"
- "/public/thumbnail":
- source: service
- service: fileshare
- source_path: "public/thumbnail"
- "/public/theme":
- source: service
- service: fileshare
- source_path: "public/theme"
- "/public/sitemap":
- source: service
- service: fileshare
- source_path: "public/sitemap"
- "/var":
- source: service
- service: fileshare
- source_path: "var"
- "/localCache":
- source: local
- source_path: "localCache"
- "/localLog":
- source: local
- source_path: "localLog"
-
- # The configuration of app when it is exposed to the web.
- web:
- locations:
- "/":
- # The public directory of the app, relative to its root.
- root: "public"
- # The front-controller script to send non-static requests to.
- passthru: "/index.php"
- expires: 24h
- rules:
- '(?i)\.svg$':
- expires: 4w
- headers:
- Content-Security-Policy: "script-src 'none'; object-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"
- '(?i)^/(media|thumbnail)/.*\.html$':
- headers:
- Content-Security-Policy: "script-src 'none'; object-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"
- \.(css|js|gif|jpe?g|png|ttf|eot|woff2?|otf|cast|mp4|json|yaml|ico)$:
- expires: 4w
- workers:
- queue:
- disk: 128
- commands:
- pre_start: |
- export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
- rm -rf $APP_CACHE_DIR/var
- php $PLATFORM_APP_DIR/bin/console
- start: APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache bin/console messenger:consume async low_priority failed --memory-limit=$(cat /run/config.json | jq .info.limits.memory)M --time-limit=295
-
- crons:
- scheduler:
- spec: '*/5 * * * *'
- cmd: 'APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache php bin/console scheduled-task:run --no-wait'
+- name: app
+ type: php:8.4
+ build:
+ flavor: none
+ variables:
+ env:
+ APP_ENV: prod
+ # Enable HTTP Cache to get cache-control headers
+ SHOPWARE_HTTP_CACHE_ENABLED: 1
+ NODE_VERSION: v22.17.0
+ SHOPWARE_CLI_VERSION: 0.6.17
+ # Elasticsearch, see https://developer.shopware.com/docs/guides/hosting/infrastructure/elasticsearch#activating-and-first-time-indexing
+ SHOPWARE_ES_ENABLED: 0
+ SHOPWARE_ES_INDEXING_ENABLED: 0
+ SHOPWARE_ES_INDEX_PREFIX: "sw6"
+ # Disables the Shopware web installer
+ SHOPWARE_SKIP_WEBINSTALLER: 1
+ # Performance optimization
+ COMPOSER_ROOT_VERSION: 1.0.0
+ # Set the log directory to a path outside of the shared mount to avoid performance issues
+ APP_LOG_DIR: /app/localLog
+ php:
+ upload_max_filesize: 32M
+ post_max_size: 32M
+ memory_limit: 512M
+ "zend.assertions": -1
+ "opcache.enable_file_override": 1
+ "opcache.interned_strings_buffer": 20
+ "opcache.validate_timestamps": 0
+ "zend.detect_unicode": 0
+ realpath_cache_ttl: 3600
+ "opcache.memory_consumption": 128M
+ "opcache.max_accelerated_files": 20000
+ # Specify additional PHP extensions that should be loaded.
+ runtime:
+ extensions:
+ - ctype
+ - dom
+ - iconv
+ - mbstring
+ - fileinfo
+ - intl
+ - redis
+ - sodium
+ - amqp
+ # The hooks that will be performed when the package is deployed.
+ hooks:
+ build: |
+ set -e
+ echo "Installing Node ${NODE_VERSION} and shopware-cli ${SHOPWARE_CLI_VERSION}"
+
+ mkdir -p /tmp/tools
+
+ curl -qL -s -o node.tar.xz "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"
+ tar xf node.tar.xz -C /tmp/tools --strip-components=1
+ curl -qL -s -o shopware-cli.tar.gz https://github.com/shopware/shopware-cli/releases/download/${SHOPWARE_CLI_VERSION}/shopware-cli_Linux_x86_64.tar.gz
+ tar xf shopware-cli.tar.gz -C /tmp/tools shopware-cli
+ mv /tmp/tools/shopware-cli /tmp/tools/bin
+
+ rm node.tar.xz shopware-cli.tar.gz
+
+ export PATH="/tmp/tools/bin:$PATH"
+
+ export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
+ export SHOPWARE_SKIP_ASSET_INSTALL_CACHE_INVALIDATION=1
+
+ shopware-cli project ci .
+
+ # Moving files of the mounts to avoid warnings
+ mv $APP_CACHE_DIR ./RO-localCache
+ mv ./var ./RO-var
+
+ deploy: |
+ set -e
+
+ echo "Syncing files created during the build in the mounts"
+ rsync -av --delete "${PLATFORM_APP_DIR}/RO-localCache/" "${APP_CACHE_DIR}/"
+ rsync -av "${PLATFORM_APP_DIR}/RO-var/" "${PLATFORM_APP_DIR}/var/"
+
+ echo "Create Dompdf working directories and sync fonts from the vendor folder"
+ if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/tempDir" ]; then
+ mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/tempDir"
+ fi
+ if [ ! -d "${PLATFORM_APP_DIR}/var/dompdf/fontCache" ]; then
+ mkdir -p "${PLATFORM_APP_DIR}/var/dompdf/fontCache"
+ fi
+ rsync -av "${PLATFORM_APP_DIR}/vendor/dompdf/dompdf/lib/fonts" "${PLATFORM_APP_DIR}/var/dompdf/fontDir"
+
+ php vendor/bin/shopware-deployment-helper run --skip-asset-install --skip-theme-compile
+
+ if [ "$PLATFORM_ENVIRONMENT_TYPE" != production ]; then
+ echo "==================================================="
+ echo "UPDATE SALES CHANNEL DOMAIN IF ENVIRONMENT TYPE IS NOT PRODUCTION"
+ echo "==================================================="
+
+ export FRONTEND_URL=`echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.id=="shopware") | .key'`
+ export FRONTEND_DOMAIN=`php -r 'echo parse_url($_SERVER["FRONTEND_URL"], PHP_URL_HOST);'`
+ bin/console sales-channel:update:domain "$FRONTEND_DOMAIN"
+ fi
+ post_deploy: |
+ set -e
+
+ php bin/console theme:compile --sync
+
+ # The relationships of the application with services or other applications.
+ # The left-hand side is the name of the relationship as it will be exposed
+ # to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
+ # side is in the form `<service name>:<endpoint name>`.
+ relationships:
+ database: "db:mysql"
+ rediscache: "cacheredis:redis"
+ redissession: "sessionredis:redis"
+ # comment to disable rabbitmq
+ rabbitmqqueue: "rabbitmq:rabbitmq"
+ # uncomment if you want to use opensearch/elasticsearch
+ # opensearch: "opensearch:opensearch"
+ # The size of the persistent disk of the application (in MB).
+ disk: 2048
+ # The mounts that will be performed when the package is deployed.
+ mounts:
+ "/files":
+ source: service
+ service: fileshare
+ source_path: "files"
+ "/public/media":
+ source: service
+ service: fileshare
+ source_path: "public/media"
+ "/public/thumbnail":
+ source: service
+ service: fileshare
+ source_path: "public/thumbnail"
+ "/public/theme":
+ source: service
+ service: fileshare
+ source_path: "public/theme"
+ "/public/sitemap":
+ source: service
+ service: fileshare
+ source_path: "public/sitemap"
+ "/var":
+ source: service
+ service: fileshare
+ source_path: "var"
+ "/localCache":
+ source: local
+ source_path: "localCache"
+ "/localLog":
+ source: local
+ source_path: "localLog"
+
+ # The configuration of app when it is exposed to the web.
+ web:
+ locations:
+ "/":
+ # The public directory of the app, relative to its root.
+ root: "public"
+ # The front-controller script to send non-static requests to.
+ passthru: "/index.php"
+ expires: 24h
+ rules:
+ '(?i)\.svg$':
+ expires: 4w
+ headers:
+ Content-Security-Policy: "script-src 'none'; object-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"
+ '(?i)^/(media|thumbnail)/.*\.html$':
+ headers:
+ Content-Security-Policy: "script-src 'none'; object-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"
+ \.(css|js|gif|jpe?g|png|ttf|eot|woff2?|otf|cast|mp4|json|yaml|ico)$:
+ expires: 4w
+ workers:
+ queue:
+ disk: 128
+ commands:
+ pre_start: |
+ export APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache
+ rm -rf $APP_CACHE_DIR/var
+ php $PLATFORM_APP_DIR/bin/console
+ start: APP_CACHE_DIR=$PLATFORM_APP_DIR/localCache bin/console messenger:consume async low_priority failed --memory-limit=$(cat /run/config.json | jq .info.limits.memory)M --time-limit=295
+
+ crons:
+ scheduler:
+ spec: '*/5 * * * *'
+ cmd: 'APP_CACHE_DIR=/app/localCache php bin/console scheduled-task:run --no-wait'
diff --git a/shopware/paas-meta/6.6/.platform/routes.yaml b/shopware/paas-meta/6.7/.platform/routes.yaml
index 401da87..362bcf0 100644
--- a/shopware/paas-meta/6.6/.platform/routes.yaml
+++ b/shopware/paas-meta/6.7/.platform/routes.yaml
@@ -2,7 +2,6 @@
#
# Each route describes how an incoming URL is going
# to be processed by Platform.sh.
-
"https://{default}/":
type: upstream
id: shopware
diff --git a/shopware/paas-meta/6.6/.platform/services.yaml b/shopware/paas-meta/6.7/.platform/services.yaml
index e59fcaa..41bdcdc 100644
--- a/shopware/paas-meta/6.6/.platform/services.yaml
+++ b/shopware/paas-meta/6.7/.platform/services.yaml
@@ -1,28 +1,25 @@
db:
type: mariadb:11.4
disk: 2048
-
cacheredis:
type: redis:7.2
configuration:
maxmemory_policy: volatile-lfu
-
sessionredis:
type: redis-persistent:7.2
disk: 1024
configuration:
maxmemory_policy: allkeys-lru
-
# comment if you want to disable rabbitmq
+
rabbitmq:
type: rabbitmq:3.13
disk: 1024
-
# uncomment if you want to use opensearch
+
#opensearch:
# type: opensearch:2
# disk: 256
-
# Change the disk space according to your needs for a.o. media files
fileshare:
type: network-storage:2.0
diff --git a/shopware/paas-meta/6.6/config/packages/paas.yaml b/shopware/paas-meta/6.7/config/packages/paas.yaml
index 8c2ea01..9480496 100644
--- a/shopware/paas-meta/6.6/config/packages/paas.yaml
+++ b/shopware/paas-meta/6.7/config/packages/paas.yaml
@@ -1,6 +1,5 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/shopware/shopware/refs/heads/trunk/config-schema.json
# This file contains all default configuration or PaaS
-
framework:
session:
handler_id: "%env(SESSION_REDIS_URL)%/0?persistent=1"
@@ -8,11 +7,7 @@ framework:
app: cache.adapter.redis
system: cache.adapter.redis
default_redis_provider: "%env(CACHE_URL)%/0?persistent=1"
-
shopware:
- api:
- jwt_key:
- use_app_secret: true
admin_worker:
enable_admin_worker: false
enable_queue_stats_worker: false
@@ -20,10 +15,9 @@ shopware:
cluster_setup: true
dompdf:
options:
- tempDir: '%kernel.project_dir%/var/dompdf/tempDir'
- fontDir: '%kernel.project_dir%/var/dompdf/fontDir'
- fontCache: '%kernel.project_dir%/var/dompdf/fontCache'
-
+ tempDir: "%kernel.project_dir%/var/dompdf/tempDir"
+ fontDir: "%kernel.project_dir%/var/dompdf/fontDir"
+ fontCache: "%kernel.project_dir%/var/dompdf/fontCache"
monolog:
handlers:
main:
@@ -41,7 +35,6 @@ monolog:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
-
elasticsearch:
index_settings:
number_of_replicas: null
diff --git a/shopware/paas-meta/6.6/manifest.json b/shopware/paas-meta/6.7/manifest.json
index 5fc5880..5e652b8 100644
--- a/shopware/paas-meta/6.6/manifest.json
+++ b/shopware/paas-meta/6.7/manifest.json
@@ -11,6 +11,9 @@
"default_redis_database": "0",
"default_redis_host": "rediscache.internal",
"default_redis_port": "6379",
- "env(CACHE_URL)": "redis://localhost"
+ "env(CACHE_URL)": "redis://localhost",
+ "env(MESSENGER_TRANSPORT_DSN_PREFIX)": "doctrine://default?auto_setup=false&queue_name=",
+ "env(MESSENGER_TRANSPORT_DSN)": "%env(MESSENGER_TRANSPORT_DSN_PREFIX)%messages",
+ "env(MESSENGER_TRANSPORT_LOW_PRIORITY_DSN)": "%env(MESSENGER_TRANSPORT_DSN_PREFIX)%low_priority"
}
} |
Soner (shyim)
approved these changes
Oct 16, 2026
Jonas Elfering (keulinho)
approved these changes
Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Shopware disclosed a medium-severity stored XSS: a user with
media:uploadrights can upload an SVG or HTML file containing JavaScript. When that file is served from the shop's own domain without aContent-Security-Policyheader, the script runs in the shop's origin.The recommended fix is to send a CSP header with these static documents (shopware/docs#2613). That docs PR covers Apache, Nginx and Caddy, and #270 applied it to the Apache
.htaccess.distand Fastly recipes. Shopware PaaS isn't covered: theshopware/paas-metarecipe sets no headers on static files at all, so every project built from it is exposed.Changes
shopware/paas-meta/{6.4,6.5,6.6,6.7}/.platform/applications.yaml,web.locations."/".rules:(?i)\.svg$): keepsexpires: 4wand adds the CSP header./media/and/thumbnail/((?i)^/(media|thumbnail)/.*\.html$): adds the CSP header.svgis removed from this regex so that no file matches two rules. This also fixes thesvg?typo (it also matched.sv) and drops the duplicatedcast|mp4|json|yaml|ttf|svg?entries.The CSP value matches the Shopware docs and the Apache recipe from #270 exactly:
The scope is the same as the Apache fix: every SVG, but HTML only under
media/andthumbnail/. Pages rendered by the application go throughpassthrutoindex.php, so the storefront and admin are not affected.Validation
Tested on an Upsun project running Shopware 6.7, built from this recipe with this exact change.
Before:
/media/test/xss.svgand/media/test/xss.htmlranconsole.log(document.domain)in the shop origin; no CSP header.After:
curl -I:/media/test/xss.svgcache-control: max-age=2419200(4w kept)/media/test/XSS.SVG(?i)works)/thumbnail/test/xss.html/media/test/missing.html//adminNotes
composer recipes:update shopware/paas-meta.6.7/.platform/applications.yamluses CRLF line endings; they are kept as they were, so the diff only touches therulesblock.🤖 Generated with Claude Code