From 6f8fa2788e800908c0de2821821c10b7968546fe Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Mon, 14 Oct 2024 16:52:49 +0200 Subject: [PATCH 1/4] feat: add docker image to hosting --- guides/hosting/installation-updates/docker.md | 272 ++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 guides/hosting/installation-updates/docker.md diff --git a/guides/hosting/installation-updates/docker.md b/guides/hosting/installation-updates/docker.md new file mode 100644 index 000000000..7afec0980 --- /dev/null +++ b/guides/hosting/installation-updates/docker.md @@ -0,0 +1,272 @@ +--- +nav: + title: Docker Image + position: 10 + +--- + +Shopware provides a Docker image to run Shopware 6 in a containerized environment for production intent. The Docker image is based on the official PHP image and includes the required PHP extensions and configurations to run Shopware 6. But it does not contain Shopware itself. +It's intended to be used together with your existing Shopware project, copy the project into the image, build it, and run it. + +If you don't have yet a Shopware project, you can create a new one with: + +::: info +You can create a Project with a specific Shopware version by specifiying the version like: `composer create-project shopware/production:6.6.7.0 ` +::: + + +```bash +composer create-project shopware/production +cd +composer require shopware/docker +``` + +The typical Dockerfile in your project would look like this: + +```dockerfile +#syntax=docker/dockerfile:1.4 + +ARG PHP_VERSION=8.3 +FROM ghcr.io/shopware/docker-base:$PHP_VERSION-caddy as base-image +FROM ghcr.io/friendsofshopware/shopware-cli:latest-php-$PHP_VERSION as shopware-cli + +FROM shopware-cli as build + +ADD . /src +WORKDIR /src + +RUN --mount=type=secret,id=packages_token,env=SHOPWARE_PACKAGES_TOKEN \ + --mount=type=secret,id=composer_auth,dst=/src/auth.json \ + --mount=type=cache,target=/root/.composer \ + --mount=type=cache,target=/root/.npm \ + /usr/local/bin/entrypoint.sh shopware-cli project ci /src + +FROM base-image + +COPY --from=build --chown=82 --link /src /var/www/html +``` + +The Dockerfile uses the `shopware-cli` image to build the project and then copies the built project into the `base-image` image. The `base-image` is the Shopware Docker image. + +::: info +Instead of copying the Dockerfile to your project, rather run `composer req shopware/docker` to add the Dockerfile to your project. This keeps the Dockerfile up-to-date with the latest changes using Symfony Flex recipes. +::: + +## Available Tags / Versioning + +The Docker image is versioned by the PHP Version and the PHP Patch version. The Docker Image is updated daily and contains the latest security patches. + +The following tags are available with Caddy: + +- `shopware/docker-base:8.3` - PHP 8.3 with Caddy +- `shopware/docker-base:8.3-caddy` - PHP 8.3 with Caddy (same as above, but more explicit) +- `shopware/docker-base:8.3.12-caddy` - PHP 8.3.12 with Caddy (same as above, but much more explicit) +- `shopware/docker-base:8.3-caddy-otel` - PHP 8.3 with Caddy and OpenTelemetry + +We also have Nginx images available: + +- `shopware/docker-base:8.3-nginx` - PHP 8.3 with Nginx (same as above, but more explicit) +- `shopware/docker-base:8.3.12-nginx` - PHP 8.3.12 with Nginx (same as above, but much more explicit) +- `shopware/docker-base:8.3-nginx-otel` - PHP 8.3 with Nginx and OpenTelemetry + +Additionally we have also FPM only images available: + +- `shopware/docker-base:8.3-fpm` - PHP 8.3 with FPM +- `shopware/docker-base:8.3.12-fpm` - PHP 8.3.12 with FPM (same as above, but much more explicit) +- `shopware/docker-base:8.3-fpm-otel` - PHP 8.3 with FPM and OpenTelemetry +- `shopware/docker-base:8.3.12-fpm-otel` - PHP 8.3.12 with FPM and OpenTelemetry (same as above, but much more explicit) + + +The images are available at Docker Hub and GitHub Container Registry (ghcr.io) with the same names and tags. + +## Environment Variables + +| Variable | Default Value | Description | +|--------------------------------------|------------------|------------------------------------------------------------------------------------------| +| APP_ENV | prod | Environment | +| APP_SECRET | (empty) | Can be generated with `openssl rand -hex 32` | +| INSTANCE_ID | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | +| JWT_PRIVATE_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| JWT_PUBLIC_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| LOCK_DSN | flock | DSN for Symfony locking | +| APP_URL | (empty) | Where Shopware will be accessible | +| DATABASE_HOST | (empty) | Host of MySQL (needed for for checking is MySQL alive) | +| DATABASE_PORT | 3306 | Host of MySQL (needed for for checking is MySQL alive) | +| BLUE_GREEN_DEPLOYMENT | 0 | This needs super priviledge to create trigger | +| DATABASE_URL | (empty) | MySQL credentials as DSN | +| DATABASE_SSL_CA | (empty) | Path to SSL CA file (needs to be readable for uid 512) | +| DATABASE_SSL_CERT | (empty) | Path to SSL Cert file (needs to be readable for uid 512) | +| DATABASE_SSL_KEY | (empty) | Path to SSL Key file (needs to be readable for uid 512) | +| DATABASE_SSL_DONT_VERIFY_SERVER_CERT | (empty) | Disables verification of the server certificate (1 disables it) | +| MAILER_DSN | null://localhost | Mailer DSN (Admin Configuration overwrites this) | +| OPENSEARCH_URL | (empty) | OpenSearch Hosts | +| SHOPWARE_ES_ENABLED | 0 | OpenSearch Support Enabled? | +| SHOPWARE_ES_INDEXING_ENABLED | 0 | OpenSearch Indexing Enabled? | +| SHOPWARE_ES_INDEX_PREFIX | (empty) | OpenSearch Index Prefix | +| COMPOSER_HOME | /tmp/composer | Caching for the Plugin Manager | +| SHOPWARE_HTTP_CACHE_ENABLED | 1 | Is HTTP Cache enabled? | +| SHOPWARE_HTTP_DEFAULT_TTL | 7200 | Default TTL for Http Cache | +| MESSENGER_TRANSPORT_DSN | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default` | +| MESSENGER_TRANSPORT_LOW_PRIORITY_DSN | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio` | +| MESSENGER_TRANSPORT_FAILURE_DSN | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure` | +| COMPOSER_PLUGIN_LOADER | 1 | [When enabled, disables dynamic plugin loading all plugins needs to be installed with Composer](https://developer.shopware.com/docs/guides/hosting/installation-updates/cluster-setup.html#composer-plugin-loader) +| INSTALL_LOCALE | en-GB | Default locale for the Shop | +| INSTALL_CURRENCY | EUR | Default currency for the Shop | +| INSTALL_ADMIN_USERNAME | admin | Default admin username | +| INSTALL_ADMIN_PASSWORD | shopware | Default admin password | +| PHP_SESSION_COOKIE_LIFETIME | 0 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | +| PHP_SESSION_GC_MAXLIFETIME | 1440 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | +| PHP_SESSION_HANDLER | files | Set to `redis` for redis session | +| PHP_SESSION_SAVE_PATH | (empty) | Set to `tcp://redis:6379` for redis session | +| PHP_MAX_UPLOAD_SIZE | 128m | See PHP documentation | +| PHP_MAX_EXECUTION_TIME | 300 | See PHP documentation | +| PHP_MEMORY_LIMIT | 512m | See PHP documentation | +| PHP_ERROR_REPORTING | E_ALL | See PHP documentation | +| PHP_DISPLAY_ERRORS | 0 | See PHP documentation | +| PHP_OPCACHE_ENABLE_CLI | 1 | See PHP documentation | +| PHP_OPCACHE_FILE_OVERRIDE | 1 | See PHP documentation | +| PHP_OPCACHE_VALIDATE_TIMESTAMPS | 1 | See PHP documentation | +| PHP_OPCACHE_INTERNED_STRINGS_BUFFER | 20 | See PHP documentation | +| PHP_OPCACHE_MAX_ACCELERATED_FILES | 10000 | See PHP documentation | +| PHP_OPCACHE_MEMORY_CONSUMPTION | 128 | See PHP documentation | +| PHP_OPCACHE_FILE_CACHE | | See PHP documentation | +| PHP_OPCACHE_FILE_CACHE_ONLY | 0 | See PHP documentation | +| PHP_REALPATH_CACHE_TTL | 3600 | See PHP documentation | +| PHP_REALPATH_CACHE_SIZE | 4096k | See PHP documentation | +| FPM_PM | dynamic | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| FPM_PM_MAX_CHILDREN | 5 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| FPM_PM_START_SERVERS | 2 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| FPM_PM_MIN_SPARE_SERVERS | 1 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| FPM_PM_MAX_SPARE_SERVERS | 3 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | + +## Possible Mounts + +::: info +Our recommandation is to store all files in an external storage provider to not mount any volumes. Refer to [official Shopware docs for setup](https://developer.shopware.com/docs/guides/hosting/infrastructure/filesystem). +::: + +In a very basic setup when all files are stored locally you need 5 volumes: + +| Usage | Path | +|------------------------|--------------------------------| +| invoices/private files | /var/www/html/files | +| theme files | /var/www/html/public/theme | +| images | /var/www/html/public/media | +| image thumbnails | /var/www/html/public/thumbnail | +| generated sitemap | /var/www/html/public/sitemap | + + +Shopware logs by default to `var/log`, but when `shopware/docker` Composer package is installed, we change it to stdout. This means you can use `docker logs` to see the logs or use logging driver to forward the logs to a logging service. + +## Ideal Setup + +The ideal setup requires an external storage provider like S3. In that way you can don't need any mounts and can scale the instances without any problems. + +Additionally Redis is required for the session storage and the cache, so the Browser sessions are shared between all instances and cache invalidations are happening on all instances. + +## Typical Setup + +The docker image starts in entrypoint PHP-FPM / Caddy. So you will need to start a extra container to run maintenance tasks like to install Shopware, install plugins, or run the update. This can be done by installing the [Deployment Helper](./deployments/deployment-helper.md) and creating one container and running as entrypoint `/setup` + +Here is an example of the `compose.yml` (`docker-compose.yml`) with all the requierd services: + +```yaml +x-environment: &shopware + image: local + build: + context: . + environment: + APP_ENV: prod + DATABASE_URL: 'mysql://shopware:shopware@database/shopware' + DATABASE_HOST: 'database' + APP_URL: 'http://localhost:8000' + APP_SECRET: 'test' + PHP_SESSION_HANDLER: redis + PHP_SESSION_SAVE_PATH: 'tcp://cache:6379/1' + volumes: + - files:/var/www/html/files + - theme:/var/www/html/public/theme + - media:/var/www/html/public/media + - thumbnail:/var/www/html/public/thumbnail + - sitemap:/var/www/html/public/sitemap + +services: + database: + image: mariadb:11.4 + environment: + MARIADB_ROOT_PASSWORD: shopware + MARIADB_USER: shopware + MARIADB_PASSWORD: shopware + MARIADB_DATABASE: shopware + volumes: + - mysql-data:/var/lib/mysql + healthcheck: + test: [ "CMD", "mariadb-admin" ,"ping", "-h", "localhost", "-pshopware" ] + timeout: 20s + retries: 10 + + init-perm: + image: alpine + volumes: + - files:/var/www/html/files + - theme:/var/www/html/public/theme + - media:/var/www/html/public/media + - thumbnail:/var/www/html/public/thumbnail + - sitemap:/var/www/html/public/sitemap + command: chown 82:82 /var/www/html/files /var/www/html/public/theme /var/www/html/public/media /var/www/html/public/thumbnail /var/www/html/public/sitemap + + init: + <<: *shopware + entrypoint: /setup + depends_on: + db: + condition: service_started + init-perm: + condition: service_completed_successfully + web: + <<: *shopware + depends_on: + init: + condition: service_completed_successfully + ports: + - 8000:8000 + + worker: + <<: *shopware + depends_on: + init: + condition: service_completed_successfully + entrypoint: [ "php", "bin/console", "messenger:consume", "async", "low_priority", "--time-limit=300", "--memory-limit=512M" ] + deploy: + replicas: 3 + + scheduler: + <<: *shopware + depends_on: + init: + condition: service_completed_successfully + entrypoint: [ "php", "bin/console", "scheduled-task:run" ] + +volumes: + mysql-data: + files: + theme: + media: + thumbnail: + sitemap: +``` + +## Best Practices + +- Pin the docker image using a sha256 digest to ensure you always use the same image + - Setup Dependabot / Renovate to keep the image up-to-date +- Use a external storage provider for all files, to keep all state out of the container +- Use Redis/Valkey for Cache and Session storage so all instances share the same cache and session +- Use Nginx Variant instead of Caddy as it's more battle tested + +## FAQ + +### No transport supports the given Messenger DSN for Redis + +When you are stuck with the error `No transport supports the given Messenger DSN`, you need to install the required package. When the package is already installed, it's mostly a dependency resolving issue. Make sure that you have also the PHP Redis Extension locally installed. + From e58459966ec977f30a4886d66b90e3d523aea410 Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Tue, 15 Oct 2024 11:28:02 +0200 Subject: [PATCH 2/4] docs: add environment variables documentation for Shopware configuration --- .../shopware/environment-variables.md | 38 ++++ .../deployments/deployment-helper.md | 2 + guides/hosting/installation-updates/docker.md | 176 ++++++++---------- 3 files changed, 113 insertions(+), 103 deletions(-) create mode 100644 guides/hosting/configurations/shopware/environment-variables.md diff --git a/guides/hosting/configurations/shopware/environment-variables.md b/guides/hosting/configurations/shopware/environment-variables.md new file mode 100644 index 000000000..2ce556346 --- /dev/null +++ b/guides/hosting/configurations/shopware/environment-variables.md @@ -0,0 +1,38 @@ +--- +nav: + title: Environment Variables + position: 50 + +--- + +# Environment Variables + +This page lists all environment variables that can be used to configure Shopware. + +| Variable | Default Value | Description | +|--------------------------------------|------------------|------------------------------------------------------------------------------------------| +| APP_ENV | prod | Environment | +| APP_SECRET | (empty) | Can be generated with `openssl rand -hex 32` | +| INSTANCE_ID | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | +| JWT_PRIVATE_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| JWT_PUBLIC_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| LOCK_DSN | flock | DSN for Symfony locking | +| APP_URL | (empty) | Where Shopware will be accessible | +| DATABASE_PORT | 3306 | Host of MySQL (needed for for checking is MySQL alive) | +| BLUE_GREEN_DEPLOYMENT | 0 | This needs super priviledge to create trigger | +| DATABASE_URL | (empty) | MySQL credentials as DSN | +| DATABASE_SSL_CA | (empty) | Path to SSL CA file (needs to be readable for uid 512) | +| DATABASE_SSL_CERT | (empty) | Path to SSL Cert file (needs to be readable for uid 512) | +| DATABASE_SSL_KEY | (empty) | Path to SSL Key file (needs to be readable for uid 512) | +| DATABASE_SSL_DONT_VERIFY_SERVER_CERT | (empty) | Disables verification of the server certificate (1 disables it) | +| MAILER_DSN | null://localhost | Mailer DSN (Admin Configuration overwrites this) | +| OPENSEARCH_URL | (empty) | OpenSearch Hosts | +| SHOPWARE_ES_ENABLED | 0 | OpenSearch Support Enabled? | +| SHOPWARE_ES_INDEXING_ENABLED | 0 | OpenSearch Indexing Enabled? | +| SHOPWARE_ES_INDEX_PREFIX | (empty) | OpenSearch Index Prefix | +| COMPOSER_HOME | /tmp/composer | Caching for the Plugin Manager | +| SHOPWARE_HTTP_CACHE_ENABLED | 1 | Is HTTP Cache enabled? | +| SHOPWARE_HTTP_DEFAULT_TTL | 7200 | Default TTL for Http Cache | +| MESSENGER_TRANSPORT_DSN | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default` | +| MESSENGER_TRANSPORT_LOW_PRIORITY_DSN | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio` | +| MESSENGER_TRANSPORT_FAILURE_DSN | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure` | diff --git a/guides/hosting/installation-updates/deployments/deployment-helper.md b/guides/hosting/installation-updates/deployments/deployment-helper.md index 84e858790..566fe9281 100644 --- a/guides/hosting/installation-updates/deployments/deployment-helper.md +++ b/guides/hosting/installation-updates/deployments/deployment-helper.md @@ -73,6 +73,8 @@ deployment: ./bin/console --version ``` +## Environment Variables + Additionally, you can configure the Shopware installation using the following environment variables: - `INSTALL_LOCALE` - The locale to install Shopware with (default: `en-GB`) diff --git a/guides/hosting/installation-updates/docker.md b/guides/hosting/installation-updates/docker.md index 7afec0980..050b66bc6 100644 --- a/guides/hosting/installation-updates/docker.md +++ b/guides/hosting/installation-updates/docker.md @@ -11,7 +11,7 @@ It's intended to be used together with your existing Shopware project, copy the If you don't have yet a Shopware project, you can create a new one with: ::: info -You can create a Project with a specific Shopware version by specifiying the version like: `composer create-project shopware/production:6.6.7.0 ` +You can create a Project with a specific Shopware version by specifying the version like: `composer create-project shopware/production:6.6.7.0 ` ::: @@ -79,96 +79,78 @@ Additionally we have also FPM only images available: The images are available at Docker Hub and GitHub Container Registry (ghcr.io) with the same names and tags. +## Default installed PHP Extensions + +The Docker image contains the following PHP extensions: `bcmath`, `gd`, `intl`, `mysqli`, `pdo_mysql`, `pcntl`, `sockets`, `bz2`, `gmp`, `soap`, `zip`, `ffi`, `opcache`, `redis`, `apcu`, `amqp` and `zstd` + ## Environment Variables | Variable | Default Value | Description | |--------------------------------------|------------------|------------------------------------------------------------------------------------------| -| APP_ENV | prod | Environment | -| APP_SECRET | (empty) | Can be generated with `openssl rand -hex 32` | -| INSTANCE_ID | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | -| JWT_PRIVATE_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| JWT_PUBLIC_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| LOCK_DSN | flock | DSN for Symfony locking | -| APP_URL | (empty) | Where Shopware will be accessible | -| DATABASE_HOST | (empty) | Host of MySQL (needed for for checking is MySQL alive) | -| DATABASE_PORT | 3306 | Host of MySQL (needed for for checking is MySQL alive) | -| BLUE_GREEN_DEPLOYMENT | 0 | This needs super priviledge to create trigger | -| DATABASE_URL | (empty) | MySQL credentials as DSN | -| DATABASE_SSL_CA | (empty) | Path to SSL CA file (needs to be readable for uid 512) | -| DATABASE_SSL_CERT | (empty) | Path to SSL Cert file (needs to be readable for uid 512) | -| DATABASE_SSL_KEY | (empty) | Path to SSL Key file (needs to be readable for uid 512) | -| DATABASE_SSL_DONT_VERIFY_SERVER_CERT | (empty) | Disables verification of the server certificate (1 disables it) | -| MAILER_DSN | null://localhost | Mailer DSN (Admin Configuration overwrites this) | -| OPENSEARCH_URL | (empty) | OpenSearch Hosts | -| SHOPWARE_ES_ENABLED | 0 | OpenSearch Support Enabled? | -| SHOPWARE_ES_INDEXING_ENABLED | 0 | OpenSearch Indexing Enabled? | -| SHOPWARE_ES_INDEX_PREFIX | (empty) | OpenSearch Index Prefix | -| COMPOSER_HOME | /tmp/composer | Caching for the Plugin Manager | -| SHOPWARE_HTTP_CACHE_ENABLED | 1 | Is HTTP Cache enabled? | -| SHOPWARE_HTTP_DEFAULT_TTL | 7200 | Default TTL for Http Cache | -| MESSENGER_TRANSPORT_DSN | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default` | -| MESSENGER_TRANSPORT_LOW_PRIORITY_DSN | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio` | -| MESSENGER_TRANSPORT_FAILURE_DSN | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure` | -| COMPOSER_PLUGIN_LOADER | 1 | [When enabled, disables dynamic plugin loading all plugins needs to be installed with Composer](https://developer.shopware.com/docs/guides/hosting/installation-updates/cluster-setup.html#composer-plugin-loader) -| INSTALL_LOCALE | en-GB | Default locale for the Shop | -| INSTALL_CURRENCY | EUR | Default currency for the Shop | -| INSTALL_ADMIN_USERNAME | admin | Default admin username | -| INSTALL_ADMIN_PASSWORD | shopware | Default admin password | -| PHP_SESSION_COOKIE_LIFETIME | 0 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | -| PHP_SESSION_GC_MAXLIFETIME | 1440 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | -| PHP_SESSION_HANDLER | files | Set to `redis` for redis session | -| PHP_SESSION_SAVE_PATH | (empty) | Set to `tcp://redis:6379` for redis session | -| PHP_MAX_UPLOAD_SIZE | 128m | See PHP documentation | -| PHP_MAX_EXECUTION_TIME | 300 | See PHP documentation | -| PHP_MEMORY_LIMIT | 512m | See PHP documentation | -| PHP_ERROR_REPORTING | E_ALL | See PHP documentation | -| PHP_DISPLAY_ERRORS | 0 | See PHP documentation | -| PHP_OPCACHE_ENABLE_CLI | 1 | See PHP documentation | -| PHP_OPCACHE_FILE_OVERRIDE | 1 | See PHP documentation | -| PHP_OPCACHE_VALIDATE_TIMESTAMPS | 1 | See PHP documentation | -| PHP_OPCACHE_INTERNED_STRINGS_BUFFER | 20 | See PHP documentation | -| PHP_OPCACHE_MAX_ACCELERATED_FILES | 10000 | See PHP documentation | -| PHP_OPCACHE_MEMORY_CONSUMPTION | 128 | See PHP documentation | -| PHP_OPCACHE_FILE_CACHE | | See PHP documentation | -| PHP_OPCACHE_FILE_CACHE_ONLY | 0 | See PHP documentation | -| PHP_REALPATH_CACHE_TTL | 3600 | See PHP documentation | -| PHP_REALPATH_CACHE_SIZE | 4096k | See PHP documentation | -| FPM_PM | dynamic | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | -| FPM_PM_MAX_CHILDREN | 5 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | -| FPM_PM_START_SERVERS | 2 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | -| FPM_PM_MIN_SPARE_SERVERS | 1 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | -| FPM_PM_MAX_SPARE_SERVERS | 3 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| `PHP_SESSION_COOKIE_LIFETIME` | 0 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | +| `PHP_SESSION_GC_MAXLIFETIME` | 1440 | [See PHP FPM documentation](https://www.php.net/manual/en/session.configuration.php) | +| `PHP_SESSION_HANDLER` | files | Set to `redis` for redis session | +| `PHP_SESSION_SAVE_PATH` | (empty) | Set to `tcp://redis:6379` for redis session | +| `PHP_MAX_UPLOAD_SIZE` | 128m | See PHP documentation | +| `PHP_MAX_EXECUTION_TIME` | 300 | See PHP documentation | +| `PHP_MEMORY_LIMIT` | 512m | See PHP documentation | +| `PHP_ERROR_REPORTING` | E_ALL | See PHP documentation | +| `PHP_DISPLAY_ERRORS` | 0 | See PHP documentation | +| `PHP_OPCACHE_ENABLE_CLI` | 1 | See PHP documentation | +| `PHP_OPCACHE_FILE_OVERRIDE` | 1 | See PHP documentation | +| `PHP_OPCACHE_VALIDATE_TIMESTAMPS` | 1 | See PHP documentation | +| `PHP_OPCACHE_INTERNED_STRINGS_BUFFER`| 20 | See PHP documentation | +| `PHP_OPCACHE_MAX_ACCELERATED_FILES` | 10000 | See PHP documentation | +| `PHP_OPCACHE_MEMORY_CONSUMPTION` | 128 | See PHP documentation | +| `PHP_OPCACHE_FILE_CACHE` | | See PHP documentation | +| `PHP_OPCACHE_FILE_CACHE_ONLY` | 0 | See PHP documentation | +| `PHP_REALPATH_CACHE_TTL` | 3600 | See PHP documentation | +| `PHP_REALPATH_CACHE_SIZE` | 4096k | See PHP documentation | +| `FPM_PM` | dynamic | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| `FPM_PM_MAX_CHILDREN` | 5 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| `FPM_PM_START_SERVERS` | 2 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| `FPM_PM_MIN_SPARE_SERVERS` | 1 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | +| `FPM_PM_MAX_SPARE_SERVERS` | 3 | [See PHP FPM documentation](https://www.php.net/manual/en/install.fpm.configuration.php) | + +This table contains only the environment variables that are specific to the Shopware Docker image. You can see all Shopware specific environment variables [here](../configurations/shopware/environment-variables.md) + +Additionally, you can use also the [Deployment Helper environment variables](./deployments//deployment-helper.md#environment-variables) to specify default administration credentials, locale, currency, and sales channel URL. ## Possible Mounts ::: info -Our recommandation is to store all files in an external storage provider to not mount any volumes. Refer to [official Shopware docs for setup](https://developer.shopware.com/docs/guides/hosting/infrastructure/filesystem). +Our recommendation is to store all files in an external storage provider to not mount any volumes. Refer to [official Shopware docs for setup](https://developer.shopware.com/docs/guides/hosting/infrastructure/filesystem). ::: In a very basic setup when all files are stored locally you need 5 volumes: -| Usage | Path | -|------------------------|--------------------------------| -| invoices/private files | /var/www/html/files | -| theme files | /var/www/html/public/theme | -| images | /var/www/html/public/media | -| image thumbnails | /var/www/html/public/thumbnail | -| generated sitemap | /var/www/html/public/sitemap | - +| Usage | Path | +|------------------------|----------------------------------| +| invoices/private files | `/var/www/html/files` | +| theme files | `/var/www/html/public/theme` | +| images | `/var/www/html/public/media` | +| image thumbnails | `/var/www/html/public/thumbnail` | +| generated sitemap | `/var/www/html/public/sitemap` | Shopware logs by default to `var/log`, but when `shopware/docker` Composer package is installed, we change it to stdout. This means you can use `docker logs` to see the logs or use logging driver to forward the logs to a logging service. ## Ideal Setup -The ideal setup requires an external storage provider like S3. In that way you can don't need any mounts and can scale the instances without any problems. +The ideal setup requires an external storage provider like S3. In that way you don't need any mounts and can scale the instances without any problems. -Additionally Redis is required for the session storage and the cache, so the Browser sessions are shared between all instances and cache invalidations are happening on all instances. +Additionally, Redis is required for the session storage and the cache, so the Browser sessions are shared between all instances and cache invalidations are happening on all instances. ## Typical Setup -The docker image starts in entrypoint PHP-FPM / Caddy. So you will need to start a extra container to run maintenance tasks like to install Shopware, install plugins, or run the update. This can be done by installing the [Deployment Helper](./deployments/deployment-helper.md) and creating one container and running as entrypoint `/setup` +The docker image starts in entry point PHP-FPM / Caddy. So you will need to start a extra container to run maintenance tasks like to install Shopware, install plugins, or run the update. This can be done by installing the [Deployment Helper](./deployments/deployment-helper.md) and creating one container and running as entry point `/setup` + +Here we have an example of a `compose.yaml`, how the services could look like: + +::: info -Here is an example of the `compose.yml` (`docker-compose.yml`) with all the requierd services: +This is just an example compose file to demonstrate how the services could look like. It's not a ready to use compose file. You need to adjust it to your needs. + +::: ```yaml x-environment: &shopware @@ -176,13 +158,8 @@ x-environment: &shopware build: context: . environment: - APP_ENV: prod DATABASE_URL: 'mysql://shopware:shopware@database/shopware' - DATABASE_HOST: 'database' APP_URL: 'http://localhost:8000' - APP_SECRET: 'test' - PHP_SESSION_HANDLER: redis - PHP_SESSION_SAVE_PATH: 'tcp://cache:6379/1' volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme @@ -193,27 +170,6 @@ x-environment: &shopware services: database: image: mariadb:11.4 - environment: - MARIADB_ROOT_PASSWORD: shopware - MARIADB_USER: shopware - MARIADB_PASSWORD: shopware - MARIADB_DATABASE: shopware - volumes: - - mysql-data:/var/lib/mysql - healthcheck: - test: [ "CMD", "mariadb-admin" ,"ping", "-h", "localhost", "-pshopware" ] - timeout: 20s - retries: 10 - - init-perm: - image: alpine - volumes: - - files:/var/www/html/files - - theme:/var/www/html/public/theme - - media:/var/www/html/public/media - - thumbnail:/var/www/html/public/thumbnail - - sitemap:/var/www/html/public/sitemap - command: chown 82:82 /var/www/html/files /var/www/html/public/theme /var/www/html/public/media /var/www/html/public/thumbnail /var/www/html/public/sitemap init: <<: *shopware @@ -246,16 +202,10 @@ services: init: condition: service_completed_successfully entrypoint: [ "php", "bin/console", "scheduled-task:run" ] - -volumes: - mysql-data: - files: - theme: - media: - thumbnail: - sitemap: ``` + + ## Best Practices - Pin the docker image using a sha256 digest to ensure you always use the same image @@ -264,6 +214,26 @@ volumes: - Use Redis/Valkey for Cache and Session storage so all instances share the same cache and session - Use Nginx Variant instead of Caddy as it's more battle tested +## Adding custom PHP extensions + +The Docker image is contains the [docker-php-extension-installer](https://github.com/mlocati/docker-php-extension-installer) which allows you to install PHP extensions with the `install-php-extensions` command. + +To install a PHP extension you need to add the following to your Dockerfile: + +```dockerfile +# ... + +RUN install-php-extensions tideways +``` + +## Adding custom PHP configuration + +Create a new INI file at `/usr/local/etc/php/conf.d/` with the extension `.ini` and add your configuration. + +```dockerfile +COPY custom.ini /usr/local/etc/php/conf.d/ +``` + ## FAQ ### No transport supports the given Messenger DSN for Redis From c4652889d54a2c5731df02aa4c761e69395542dc Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Thu, 17 Oct 2024 11:19:59 +0200 Subject: [PATCH 3/4] update env table --- .../shopware/environment-variables.md | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/guides/hosting/configurations/shopware/environment-variables.md b/guides/hosting/configurations/shopware/environment-variables.md index 2ce556346..1e31e16fe 100644 --- a/guides/hosting/configurations/shopware/environment-variables.md +++ b/guides/hosting/configurations/shopware/environment-variables.md @@ -9,30 +9,32 @@ nav: This page lists all environment variables that can be used to configure Shopware. -| Variable | Default Value | Description | -|--------------------------------------|------------------|------------------------------------------------------------------------------------------| -| APP_ENV | prod | Environment | -| APP_SECRET | (empty) | Can be generated with `openssl rand -hex 32` | -| INSTANCE_ID | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | -| JWT_PRIVATE_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| JWT_PUBLIC_KEY | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| LOCK_DSN | flock | DSN for Symfony locking | -| APP_URL | (empty) | Where Shopware will be accessible | -| DATABASE_PORT | 3306 | Host of MySQL (needed for for checking is MySQL alive) | -| BLUE_GREEN_DEPLOYMENT | 0 | This needs super priviledge to create trigger | -| DATABASE_URL | (empty) | MySQL credentials as DSN | -| DATABASE_SSL_CA | (empty) | Path to SSL CA file (needs to be readable for uid 512) | -| DATABASE_SSL_CERT | (empty) | Path to SSL Cert file (needs to be readable for uid 512) | -| DATABASE_SSL_KEY | (empty) | Path to SSL Key file (needs to be readable for uid 512) | -| DATABASE_SSL_DONT_VERIFY_SERVER_CERT | (empty) | Disables verification of the server certificate (1 disables it) | -| MAILER_DSN | null://localhost | Mailer DSN (Admin Configuration overwrites this) | -| OPENSEARCH_URL | (empty) | OpenSearch Hosts | -| SHOPWARE_ES_ENABLED | 0 | OpenSearch Support Enabled? | -| SHOPWARE_ES_INDEXING_ENABLED | 0 | OpenSearch Indexing Enabled? | -| SHOPWARE_ES_INDEX_PREFIX | (empty) | OpenSearch Index Prefix | -| COMPOSER_HOME | /tmp/composer | Caching for the Plugin Manager | -| SHOPWARE_HTTP_CACHE_ENABLED | 1 | Is HTTP Cache enabled? | -| SHOPWARE_HTTP_DEFAULT_TTL | 7200 | Default TTL for Http Cache | -| MESSENGER_TRANSPORT_DSN | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default` | -| MESSENGER_TRANSPORT_LOW_PRIORITY_DSN | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio` | -| MESSENGER_TRANSPORT_FAILURE_DSN | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure` | +| Variable | Default Value | Description | +| ------------------------------------ | ----------------------- | ---------------------------------------------------------------------------------------- | +| `APP_ENV` | prod | Environment | +| `APP_SECRET` | (empty) | Can be generated with `openssl rand -hex 32` | +| `APP_CACHE_DIR` | {projectRoot}/var/cache | Path to a directory to store caches (since 6.6.8.0) | +| `APP_BUILD_DIR` | {projectRoot}/var/cache | Path to a temporary directory to create cache folder (since 6.6.8.0) | +| `APP_LOG_DIR` | {projectRoot}/var/log | Path to a directory to store logs (since 6.6.8.0) | +| `INSTANCE_ID` | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | +| `JWT_PRIVATE_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| `JWT_PUBLIC_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| `LOCK_DSN` | flock | DSN for Symfony locking | +| `APP_URL` | (empty) | Where Shopware will be accessible | +| `BLUE_GREEN_DEPLOYMENT` | 0 | This needs super privilege to create trigger | +| `DATABASE_URL` | (empty) | MySQL credentials as DSN | +| `DATABASE_SSL_CA` | (empty) | Path to SSL CA file | +| `DATABASE_SSL_CERT` | (empty) | Path to SSL Cert file | +| `DATABASE_SSL_KEY` | (empty) | Path to SSL Key file | +| `DATABASE_SSL_DONT_VERIFY_SERVER_CERT` | (empty) | Disables verification of the server certificate (1 disables it) | +| `MAILER_DSN` | null://localhost | Mailer DSN (Admin Configuration overwrites this) | +| `OPENSEARCH_URL` | (empty) | Open Search Hosts | +| `SHOPWARE_ES_ENABLED` | 0 | Open Search Support Enabled? | +| `SHOPWARE_ES_INDEXING_ENABLED` | 0 | Open Search Indexing Enabled? | +| `SHOPWARE_ES_INDEX_PREFIX` | (empty) | Open Search Index Prefix | +| `COMPOSER_HOME` | /tmp/composer | Caching for the Plugin Manager | +| `SHOPWARE_HTTP_CACHE_ENABLED` | 1 | Is HTTP Cache enabled? | +| `SHOPWARE_HTTP_DEFAULT_TTL` | 7200 | Default TTL for HTTP Cache | +| `MESSENGER_TRANSPORT_DSN` | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default`) | +| `MESSENGER_TRANSPORT_LOW_PRIORITY_DSN` | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio`) | +| `MESSENGER_TRANSPORT_FAILURE_DSN` | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure`) | From 776e8864a3081350f34f2b4af252e8d50ca5b1f0 Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Thu, 17 Oct 2024 14:18:32 +0200 Subject: [PATCH 4/4] fix: spelling errors and sort wordlist --- .wordlist.txt | 1873 +++++++++-------- .../shopware/environment-variables.md | 58 +- 2 files changed, 967 insertions(+), 964 deletions(-) diff --git a/.wordlist.txt b/.wordlist.txt index 43d6fbb88..e60b70adc 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -1,6 +1,13 @@ +ACL +ACLs +ADDR +ADR +ADRs +AOF +API's +APIs AbstractCaptcha AbstractStockUpdateFilter -accel AccountEditOrderPage AccountGuestLoginPage AccountLoginPage @@ -10,108 +17,60 @@ AccountOverviewPage AccountPaymentMethodPage AccountProfilePage AccountRecoverPasswordPage -acl Acl -ACL AclContextProvider AclGrantContext -ACLs ActionButton ActionButtons ActivateContext -activateShopwareTheme AdapterFactory AddCustomerTagActionTest -ADDR AddressBookWidget AddressDetailPage AddressListingPage +AdminQueueWorker +AdminWorker Adminer AdministrationNewField AdministrationNewModule -AdminQueueWorker -AdminWorker -adr -ADR -ADRs Afile AfterLineItemAddedEvent AfterLineItemQuantityChangedEvent AfterLineItemRemovedEvent -afterSort -ag AggregationResultCollection -ajax AjaxModalPlugin Algolia AllowEmptyString AllowHtml AlwaysValidRule -amqp Analytics AndRule -anonymization -anonymize -anonymized -antipattern -AOF -api ApiAware ApiContext ApiController -apiKey ApiKey -API's -APIs ApiService Aplaceholder AppRefundHandler AppScripts AppServer AppSystem -appVersion -args -arrayfacade ArrayFacade -async -AsynchronousPaymentHandlerInterface AsyncPaymentTransactionStruct -atomicity +AsynchronousPaymentHandlerInterface AuditLogValueEntity -auth AuthenticationIdentityLoader -autocompletion -autogenerate -autogenerated -autoload -autoloaded -autoloader -autoloading -autom -autoprefixer -autowire -autowiring AvailableCombinationLoader AvgResult -awaitAndCheckNotification -axios B2B Component B2B Components B2B Suite -backend +BBundle +BDD +BITV Backend -backends -backface -backoff -backported -bAcl -bAjaxPanel BaseContext BasicExample -bAuditLog -bAuth -BBundle -BDD BeforeCartMergeEvent BeforeLineItemAddedEvent BeforeLineItemQuantityChangedEvent @@ -123,76 +82,46 @@ BeforeShopDeletionEvent BillingCountryRule BillingStreetRule BillingZipCodeRule -binlog Bitbucket -BITV -blackbox -blackfire Blackfire BlacklistRule BlacklistRuleField BlobField -blockquote Blockquote -blockquotes Blockquotes -bLogin -bolded -bool -boolean -booleans BoolField -bottleJs -bottleJS BottleJS -bourgau -bPlatform -brainer -bRestApi -browserslist -bruteforce -bServiceExtension -bTemplateExtension -bugfix -bugfixes -bundler BusinessEvent BusinessEventCollector -buyable -cacheable +CDN +CDNs +CHANGELOG +CKEditor +CLI +CMS +CORS +CPUs +CSP +CSPs +CSRF +CSV CachedProductListingRouteTest -cacheinvalidatorfacade -cacheKey -cachix Cachix Caddy Caddyfile -calculatedCheapestPrice -calculatedPrice CalculatedPrice CalculatedPriceField -calculatedPrices -callables -camelcase -camelCase -caniuse -capitalizeString -capsulate -captcha Captcha Captchas -captureId CartAmountRule CartConvertedEvent CartCreatedEvent CartDataCollection CartDeletedEvent -cartfacade CartHasDeliveryFreeItemRule CartLoadedEvent CartMergedEvent CartPrice -cartpricefacade CartPriceFacade CartPriceField CartPromotionsCollector @@ -201,27 +130,15 @@ CartVerifyPersistEvent CartWeightRule CascadeDelete CashRounding -catchable -catched CategoryRoute -CDN -CDNs CentOS Cerebro -cetera Chai ChangeCustomerSpecificFeaturesAction ChangeEmployeeStatusAction -changelog Changelog -CHANGELOG -changelogs Changelogs -changeset -changesets -chargeback Chargeback -checkboxes CheckoutCartPage CheckoutCartPageLoadedEvent CheckoutConfirmPage @@ -237,388 +154,1045 @@ ChildCount ChildCountField ChildrenAssociation ChildrenAssociationField -ci -CKEditor -classname -cleanUpPreviousState -clearTypeAndCheck -cli -CLI -clickContextMenuItem -clickMainMenuItem ClientInterface -cloneDeep Cloudflare Cmd -cms -CMS CmsPage -cmss -cmsService -codebase -codeblock -codeblocks -codereview Codestyle -colorpicker CommercialB CommercialBundle -compatability ComponentFactory -componentSectionRenderer -composable Composables -config -configComponent ConfigJson ConfigJsonField -configs -configurator -Configurator ConfigValidator -confirmUrl +Configurator ConfirmUrlAware ConfirmUrlStorer -const -const's ContactController -contactFormData ContactFormDataAware ContactFormDataStorer ContactRole ContainerBuilder -containerfacade ContainerFacade ContentsAware ContentsStorer ContextResolver ContextTokenAware ContextTokenStorer -control CookiePermission -copyable -copyToClipboard -cors -CORS CountryStateDataPagelet -CPUs -createActionResponse -createCategoryFixture -createCmsFixture -createCustomerFixture +CreateFromTrait +CreateTagAction CreatedAt CreatedAtField CreatedBy CreatedByField -createDefaultContext -createDefaultFixture -CreateFromTrait -createGuestOrder -createId -createLanguageFixture -createProductFixture -createPropertyFixture -createSalesChannelFixture -createShippingFixture -createSnippetFixture -CreateTagAction -createValidatorDefinition CredentialsBuilder CredentialsEntity CriteriaEvent CriteriaParser CriteriaTest -cron Cronjobs CrossSellingDataSet -cryptographic -CSP -CSPs -csrf -CSRF -css -CSV Ctrl CurrencyRule CustomAppAware CustomAppEvent CustomAppStorer CustomEntityKernelLoader -customerAware +CustomField CustomerAware CustomerBeforeLoginEvent -customerGroup -customerGroupAware CustomerGroupAware CustomerGroupRegistrationPage CustomerGroupRule CustomerGroupStorer -customerHasFeature CustomerLoginEvent CustomerNumberRule -customerRecovery CustomerRecoveryAware CustomerRecoveryStorer CustomerStorer CustomerTagRule -CustomField -customFields -customizability -customizable -customizations -customizer -cyclus +DAL +DBAL +DDL +DESC +DIC +DIC EntityRepository +DOM +DOMPurify +DS +DSGVO +DSN +DSR +DTO +DTOs +DX Daily.co -dailymotion Dailymotion -dal Dal -DAL -dannorth -dasistweb DataAbstractionLayer DataAware -datadog -Datadog DataResolver -dataSelection DataSelection -dataset -dataSet DataSet -datasets DataSets DataStorer +Datadog DateField -datepicker -Datepicker DateRangeRule -datetime DateTime DateTimeField +Datepicker DaysSinceLastOrderRule -DBAL -DDL -de -debounce DebugStack -decoratable -decrementing Decrypts -deepCopyObject -deepMergeObject -defaultConfig -defaultValue DelayAction -delayAware DelayAware DelegatingLoader +Deleter +Deno +Denormalization +Denylist +Dependabot +DependencyInjection +Deployer +Deprecations +Deutsch +DevOps +Devenv +DeviceHelper +Devops +Devtool +DifferentAddressesRule +Differentiator +DirectoryLoader +Direnv +DiscountFacade +Dockerfile +Dockware +DomainException +DomainExceptions +DynamoDB +ENUM +ENUMS +EOL +ERP +ESLint +EcmaScript +ElasticSearch +ElasticsearchDefinition +ElasticsearchEntityAggregator +ElasticsearchEntitySearcher +ElasticsearchProductDefinition +EmailAware +EmailField +EmailStorer +EmployeeAware +EmployeeOfBusinessPartnerRule +EmployeeOrderRule +EmployeeRoleRule +EmployeeStatusRule +Enqueue +EntityCollection +EntityContainerEvent +EntityDefinition +EntityExtension +EntityNotFound +EntityRepository +EntitySearchResult +EntityWrittenContainerEvent +EntityWrittenEvent +Enum +Enums +EqualsAny +ErrorsFacade +EventListener +EventSubscriberInterface +Everytime +ExampleController +ExampleDefinition +ExampleDescription +ExampleEvent +ExampleExtensionDefinition +ExampleHandler +ExamplePagelet +ExamplePageletLoadedEvent +ExamplePageletLoader +ExamplePlugin +ExampleTranslationDefinition +ExcludeMultiWarehouseStockUpdateFilter +Extensibility +ExtensionAPI +FPM +FQCN +FastRoute +Fastly +Fastorder +FieldCollection +FieldSerializer +FileLocator +FileReader +Filesystem +Fk +FkField +FloatField +FlowAction +FlowBuilder +FlowBuilderActionApp +FlowBuilderTriggerApp +FlowDispatcher +FlowEventAware +FlowExecutor +FlowStore +FlowStorer +Flysystem +Fontawesome +FooterPagelet +FrameworkBundle +FroshDevelopmentHelper +FroshPluginUploader +Fullstack +GDPR +GIFs +GenericPage +GenericPageLoader +GitLab +Github +GlobFileLoader +GmbH +GoodsCountRule +GoodsPriceRule +GoogleReCaptchaV +Grafana +Grantable +GridHelper +GuestWishlistPage +GuestWishlistPagelet +HMAC +Homebrew +Hono +HookClasses +HookExecutor +HowTos +IDEs +IPV +IPv +IdField +IdSearchResult +Ideate +Iframe +Inclusivity +IndexerService +Init +Initialisms +IntField +IntelliSense +InterfaceHooks +IsCompanyRule +IsEmployeeRule +IsNewCustomerRule +ItemFacade +ItemsFacade +JSON +JVM +JWT +JavaScript +JestJS +JetBrains +Jira +Jit +Jonge +JsonField +JsonResponse +KV +KeyDB +Kibana +LONGTEXT +LUA +LandingPage +LastNameRule +Lerna +Lifecycle +LineItemClearanceSaleRule +LineItemCreationDateRule +LineItemCustomFieldRule +LineItemDimensionHeightRule +LineItemDimensionLengthRule +LineItemDimensionWeightRule +LineItemDimensionWidthRule +LineItemFactoryRegistry +LineItemGroupRule +LineItemHandler +LineItemInCategoryRule +LineItemIsNewRule +LineItemList +LineItemListPriceRule +LineItemOfManufacturerRule +LineItemOfTypeRule +LineItemPromotedRule +LineItemPropertyRule +LineItemPurchasePriceRule +LineItemReleaseDateRule +LineItemRemovedEvent +LineItemRule +LineItemTagRule +LineItemTaxationRule +LineItemTotalPriceRule +LineItemUnitPriceRule +LineItemWithQuantityRule +LineItemWrapperRule +LineItemsInCartCountRule +LineItemsInCartRule +ListField +ListingPrice +ListingPriceField +LoaderResolver +LockedField +LogEntry +Logfiles +LoggingService +LoginContextService +LoginRequired +LongText +LongTextField +Lychee +MACOSX +MRs +MVC +MailAware +MailHog +MailService +MailStorer +Mailcatcher +Mailhog +MaintenancePage +ManufacturerAttributeDataSet +ManyToMany +ManyToManyAssociation +ManyToManyAssociationField +ManyToManyId +ManyToManyIdField +ManyToOne +ManyToOneAssociation +ManyToOneAssociationField +MediaDataSelection +MediaDataSet +MediaFolderDataSet +MemcachedSessionHandler +MenuOffcanvasPagelet +Mercure +MessageAware +MessageQueue +MessageStorer +MeteorAdminSDK +Methodize +Middleware +MigrationCollection +Minio +Mixin +Mixins +Modularity +ModuleFactory +MongoDbSessionHandler +Monolog +Monorepo +Monorepos +MoveShopPermanently +MultiWarehouse +MyExampleApp +MyExtension +MyPlugin +MyTestClass +MyTestInterface +NPM +NameAware +NameStorer +NavigationPage +NelmioCorsBundle +NewFeature +NewRelic +NewsletterRecipientAware +NewsletterRecipientStorer +Nginx +NixOS +NoSQL +Noback +NodeJS +NotFoundHttpException +NotRule +NullObject +Nullsafe +Nuxt +Nvidia +OAuth +OPENSEARCH +ORM +ORMs +OTEL +OTLP +ObjectField +ObjectType +OffCanvas +OffcanvasCartPageLoadedEvent +OldFeature +OneToMany +OneToManyAssociation +OneToManyAssociationField +OneToOne +OneToOneAssociation +OneToOneAssociationField +OpenAPI +OpenApi +OpenSSH +OpenSSL +OpenSearch +OpenTelemetry +Openapi +Opensearch +Opensearch's +OrRule +OrderAware +OrderCountRule +OrderEntity +OrderEvents +OrderLineItem +OrderLineItemEntity +OrderStorer +OrderTransaction +OrderTransactionAware +OrderTransactionCapture +OrderTransactionCaptureCollection +OrderTransactionCaptureEntity +OrderTransactionCaptureRefund +OrderTransactionCaptureRefundEntity +OrderTransactionCaptureRefundPosition +OrderTransactionCaptureRefundPositionCollection +OrderTransactionEntity +OrderTransactionRefundCollection +OrderTransactionStorer +PHPStan +PHPStorm +PHPUnit +PHPunit +PII +POC +POS +PRs +PSH +PSP +PSR +PWA +PaaS +Paas +Packagist +PageEvent +PageLoaded +PageLoadedEvent +PageLoadedEvents +PageLoader +PageLoader structs +PageType +Pagelet +PageletLoader +Pagelets +Pageloaders +ParentAssociation +ParentAssociationField +ParentFk +ParentFkField +PasswordField +PaymentGatewayApp +PaymentHandlerIdentifierSubscriber +PaymentMethod +PaymentMethodRoute +PaymentMethodRule +PaymentRefundHandlerInterface +PaymentRefundProcessor +PdoSessionHandler +Percona +Persistable +PhpRedis +PhpStan +PhpUnit +PluginManager +PositionID +PositionIDs +PositionIdentifier +PostInstall +PostMessage +PostUpdate +PreWriteValidationEvent +Predis +Preload +Premapping +PreparedPaymentHandlerInterface +Preselect +PriceCollectionFacade +PriceDefinition +PriceDefinitionField +PriceFacade +PriceField +PriceFieldSerializer +PrimaryKey +ProductAttributeDataSet +ProductAware +ProductCartProcessor +ProductCartTest +ProductCategoryDefinition +ProductController +ProductCountRouteResponse +ProductDataSelection +ProductDataSet +ProductListRoute +ProductManufacturerDefinition +ProductMedia +ProductMediaDefinition +ProductNumber +ProductOptionRelationDataSet +ProductPage +ProductPriceAttributeDataSet +ProductPriceCalculator +ProductPropertyRelationDataSet +ProductQuickViewWidget +ProductReviewsWidget +ProductSearchBuilder +ProductStorer +ProductSubscriber +ProductUpdater +ProductVisibility +ProductWarehouse +ProductWarehouses +ProductsFacade +Profiler +PropertyGroupOptionDataSet +ProseMirror +Prosemirror +Pseudocode +Punctuations +Quickstart +QuillJS +RDB +README +RabbitMQ +RabbitMq +Readonly +RecipientsAware +RecipientsStorer +RecurringPaymentHandlerInterface +Redict +RedirectResponse +ReferenceVersion +ReferenceVersionField +RefundPaymentHandlerInterface +RegistrationCompletedEvent +RegistrationService +Reindexes +ReinstallApps +RemoteAddress +RemoteAddressField +Repo +RepositoryIterator +ResetUrlAware +ResetUrlStorer +RestAPI +RestrictDelete +ReverseInherited +ReviewFormDataAware +ReviewFormDataStorer +Reviewdog +Roadmap +RouteResponse +RuleConditionService +RuntimeException +SCSS +SDK +SDK's +SDKs +SEO +SEOs +SFTP +SHA +SKEs +SMS +SMTP +SPA's +SPAs +SQS +SSHes +SSL +STP +SVG +SVGs +SaaS +Sales Rooms +SalesAgent +SalesChannel +SalesChannelAware +SalesChannelContext +SalesChannelContextCreatedEvent +SalesChannelContextResolvedEvent +SalesChannelContextRestoredEvent +SalesChannelContextRestorerOrderCriteriaEvent +SalesChannelId +SalesChannelProductEntity +SalesChannelRule +SameSite +ScalarValuesAware +ScalarValuesStorer +ScheduledTask +ScriptEventRegistry +SearchCriteria +SearchPage +SearchRanking +SearchWidget +SecretKey +Sendfile +SeoUrlRoute +SeoUrlTemplate +SetNullOnDelete +ShippingCountryRule +ShippingMethodPriceCollector +ShippingMethodRoute +ShippingMethodRule +ShippingStreetRule +ShippingZipCodeRule +ShopActivatedEvent +ShopDeactivatedEvent +ShopDeletedEvent +ShopNameAware +ShopNameStorer +Shopware +Shopware's +SimpleHttpClient +Sinon +SitemapPage +SnippetFileInterface +SomeCoreClassTest +SonarQube +Sonarcube +StackHero +StackOverflow +Stackhero +StateMachineRegistry +StateMachineState +StateMachineStateEntity +StateMachineStateField +StatesFacade +StaticEntityRepository +StockUpdate +StockUpdateFilterProvider +StockUpdater +Storable +StorableFlow +StoreApiResponse +StoreApiRoute +StorefrontController +StorefrontResponse +Storer +StringField +StringFields +Struct +SubjectAware +SubjectStorer +Subprocessor +SuggestPage +SwagAdvDevBundle +SwagB +SwagBasicExample +SwagBasicExampleTheme +SwagDigitalSalesRooms +SwagMigrationBundleExample +SwagMyPlugin +SwagMyPluginSW +Symfony +Symfony's +SyncApi +SynchronousPaymentHandlerInterface +Synopsys +TCP +TLS +TTL +TaxProvider +TaxProviderStruct +TaxProviders +TemplateDataAware +TemplateDataStorer +TemplateNamespaceHierarchyBuilder +TestCase +TestStockUpdateFilter +TimeRangeRule +TinyMCE +TipTap +TipTap's +ToMany +ToOne +Tooltips +TransactionalAction +TranslatedField +TranslationDataSet +TranslationsAssociation +TranslationsAssociationField +TreeBreadcrumb +TreeBreadcrumbField +TreeLevel +TreeLevelField +TreePath +TreePathField +TreeSelect +TriggerReload +TwigJS +TypeError +TypeError's +TypeScript +UI +UML +USD +UUID +UUIDs +UUIDv +UX +Unassigning +UninstallApps +UnitCollection +UnitEntity +UnitTests +UnoCSS +Unregistering +Untrusted +UpdateContext +UpdateHtaccess +UpdatedAt +UpdatedAtField +UpdatedBy +UpdatedByField +UpperCamelCase +Upserting +UrlAware +UrlStorer +UserAware +UserStorer +Util +Utils +Uuid +VARCHAR +VCL +VCS +VM +VSCode +Validator +Valkey +Vercel +VersionDataPayload +VersionDataPayloadField +VersionField +VirtualHosts +Vitepress +Vitest +Vue +Vue's +VueJS +VueJs +VueX +Vuei +Vuex +WCAG +WSL +WarehouseGroup +WarehouseGroups +WebKit +WebSocket +Webhook +Webkit +Webpack +Webserver +WeekdayRule +WhitelistRule +WhitelistRuleField +WishlistPage +WishlistWidget +WriteEvents +WriteProtected +XDebug +XHR +XKey +XLIFF +XPath +XQuartz +XSS +XVFB +Xdebug +XmlHttpRequest +XmlUtils +XorRule +YYYY +YamlFileLoader +ZSH +accel +acl +activateShopwareTheme +adr +afterSort +ag +ajax +amqp +anonymization +anonymize +anonymized +antipattern +api +apiKey +appVersion +args +arrayfacade +async +atomicity +auth +autocompletion +autogenerate +autogenerated +autoload +autoloaded +autoloader +autoloading +autom +autoprefixer +autowire +autowiring +awaitAndCheckNotification +axios +bAcl +bAjaxPanel +bAuditLog +bAuth +bLogin +bPlatform +bRestApi +bServiceExtension +bTemplateExtension +backend +backends +backface +backoff +backported +binlog +blackbox +blackfire +blockquote +blockquotes +bolded +bool +boolean +booleans +bottleJS +bottleJs +bourgau +brainer +browserslist +bruteforce +bugfix +bugfixes +bundler +buyable +cacheKey +cacheable +cacheinvalidatorfacade +cachix +calculatedCheapestPrice +calculatedPrice +calculatedPrices +callables +camelCase +camelcase +caniuse +capitalizeString +capsulate +captcha +captureId +cartfacade +cartpricefacade +catchable +catched +cetera +changelog +changelogs +changeset +changesets +chargeback +checkboxes +ci +classname +cleanUpPreviousState +clearTypeAndCheck +cli +clickContextMenuItem +clickMainMenuItem +cloneDeep +cms +cmsService +cmss +codebase +codeblock +codeblocks +codereview +colorpicker +compatability +componentSectionRenderer +composable +config +configComponent +configs +configurator +confirmUrl +const +const's +contactFormData +containerfacade +control +copyToClipboard +copyable +cors +createActionResponse +createCategoryFixture +createCmsFixture +createCustomerFixture +createDefaultContext +createDefaultFixture +createGuestOrder +createId +createLanguageFixture +createProductFixture +createPropertyFixture +createSalesChannelFixture +createShippingFixture +createSnippetFixture +createValidatorDefinition +cron +cryptographic +csrf +css +customFields +customerAware +customerGroup +customerGroupAware +customerHasFeature +customerRecovery +customizability +customizable +customizations +customizer +cyclus +dTH +dailymotion +dal +dannorth +dasistweb +dataSelection +dataSet +datadog +dataset +datasets +datepicker +datetime +de +debounce +decoratable +decrementing +deepCopyObject +deepMergeObject +defaultConfig +defaultValue +delayAware deletable -Deleter demodemo demoshop deno -Deno -Denormalization denylist -Denylist dependencyInjection -DependencyInjection -Deployer deprecations -Deprecations dereference dereferenced -DESC describeFeatures destructuring -Deutsch dev devenv -Devenv -DeviceHelper devops -Devops -DevOps devs -Devtool devtool's devtools di -DIC -DIC EntityRepository -DifferentAddressesRule differentiator -Differentiator dir -DirectoryLoader direnv -Direnv direnv's discountfacade -DiscountFacade discoverability docblock dockware -Dockware dom -DOM -DomainException -DomainExceptions -DOMPurify -dont don'ts +dont dont's dr dragTo dropdown -DS -DSGVO -DSN dsr -DSR -dTH -DTO -DTOs dunglas duplications -DX -DynamoDB -editorconfig -EcmaScript +ean ecommerce +editorconfig eg elasticsearch -ElasticSearch -ElasticsearchDefinition -ElasticsearchEntityAggregator -ElasticsearchEntitySearcher -ElasticsearchProductDefinition -EmailAware -EmailField -EmailStorer -EmployeeAware employeeId -EmployeeOfBusinessPartnerRule -EmployeeOrderRule -EmployeeRoleRule -EmployeeStatusRule enqueue -Enqueue -EntityCollection -EntityContainerEvent -EntityDefinition -EntityExtension entityIds entityName -EntityNotFound -EntityRepository -EntitySearchResult -EntityWrittenContainerEvent -EntityWrittenEvent entrypoint entrypoints enum -Enum -ENUM enums -Enums -ENUMS -ean env envs -EOL equalsAny -EqualsAny -ERP errored errorsfacade -ErrorsFacade erros eslint -ESLint et -EventListener -EventSubscriberInterface everytime -Everytime evolvability -ExampleController -ExampleDefinition -ExampleDescription -ExampleEvent -ExampleExtensionDefinition -ExampleHandler -ExamplePagelet -ExamplePageletLoadedEvent -ExamplePageletLoader -ExamplePlugin exampler -ExampleTranslationDefinition -ExcludeMultiWarehouseStockUpdateFilter explainer extendability extensibility -Extensibility -ExtensionAPI externalReference fallbacks fastly -Fastly -Fastorder -FastRoute favicon fetchable -FieldCollection -FieldSerializer fieldset -fileinfo -FileLocator -FileReader fileSize +fileinfo filesystem -Filesystem filesystems firstname -Fk -FkField flattenDeep -FloatField -FlowAction -FlowBuilder -FlowBuilderActionApp -FlowBuilderTriggerApp -FlowDispatcher -FlowEventAware -FlowExecutor -FlowStore -FlowStorer flyout -Flysystem focussed focussing fontFamily -FooterPagelet formatters -FPM -FQCN -FrameworkBundle frankdejonge frontend frontends frontmatter -FroshDevelopmentHelper -FroshPluginUploader -Fontawesome -Fullstack func +gRPC gd -GDPR -GenericPage -GenericPageLoader german getArrayChanges -getbootstrap getChildren getConstraints getCreationTimestamp @@ -644,43 +1218,30 @@ getScrollbarHeight getScrollbarWidth getSeoUrls getTaxes -getter -getters getTotal getType getUnit getUrls +getbootstrap +getter +getters ghcr gif -GIFs -gitignore github -Github +gitignore gitkeep gitlab -GitLab globals -GlobFileLoader -GmbH -GoodsCountRule -GoodsPriceRule -GoogleReCaptchaV goto -Grafana grantable -Grantable granularly graphviz gridActions gridColumns -GridHelper grpc -gRPC -GuestWishlistPage -GuestWishlistPagelet guid -gzip gz +gzip handleFlow hardcoded hasError @@ -689,71 +1250,47 @@ helpText herokuapp hideCookieBar hmac -HMAC -Homebrew hono -Hono -HookClasses -HookExecutor hosters hostname -HowTos html http httpCache https hydrator +iFrame +iFrames +iOs iconv -Ideate -IDEs -IdField -IdSearchResult ified iframe -iFrame -Iframe iframes -iFrames inclusivity -Inclusivity incrementer incrementing indexActions -IndexerService infoIt ini init -Init initialisms -Initialisms initializer initializers installable instantiation integrations -IntelliSense -InterfaceHooks -IntField intl invalidations io -iOs -IPv -IPV isActive isArray isBoolean isCloseout -IsCompanyRule isDate -IsEmployeeRule isEmpty isEmptyOrSpaces isEqual isFunction -IsNewCustomerRule isNumber -iso isObject isPlainObject isPropagationStopped @@ -763,130 +1300,49 @@ isUndefined isUrl isValid isValidIp +iso itemfacade -ItemFacade itemsfacade -ItemsFacade iterable iteratively +jQuery jargons javascript -JavaScript -JestJS -JetBrains -Jira -Jit -Jonge -jQuery js +js's json -JSON jsonEncode -JsonField -JsonResponse -js's -JVM jwt -JWT kebabCase -KeyDB keyframes -Kibana -KV -LandingPage lang -LastNameRule lazysizes -Lerna libxml lifecycle -Lifecycle lifecycles lifecylce lineItem -LineItemClearanceSaleRule -LineItemCreationDateRule -LineItemCustomFieldRule -LineItemDimensionHeightRule -LineItemDimensionLengthRule -LineItemDimensionWeightRule -LineItemDimensionWidthRule -LineItemFactoryRegistry -LineItemGroupRule -LineItemHandler lineItemId -LineItemInCategoryRule -LineItemIsNewRule -LineItemList -LineItemListPriceRule -LineItemOfManufacturerRule -LineItemOfTypeRule -LineItemPromotedRule -LineItemPropertyRule -LineItemPurchasePriceRule -LineItemReleaseDateRule -LineItemRemovedEvent -LineItemRule -LineItemsInCartCountRule -LineItemsInCartRule -LineItemTagRule -LineItemTaxationRule -LineItemTotalPriceRule -LineItemUnitPriceRule -LineItemWithQuantityRule -LineItemWrapperRule linter linux -ListField -ListingPrice -ListingPriceField -LoaderResolver +localVue localhost localhost's -localVue locationID locationIDs -LockedField -LogEntry logfiles -Logfiles -LoggingService logics -LoginContextService loginRequired -LoginRequired -loginViaApi -LongText -LONGTEXT -LongTextField +loginViaApi lookups lowerCamelCase -LUA lychee -Lychee macOS -MACOSX mailAware -MailAware -Mailcatcher -Mailhog -MailHog -MailService -MailStorer mailTemplates -MaintenancePage makefile mandatorily -ManufacturerAttributeDataSet manufacturerId -ManyToMany -ManyToManyAssociation -ManyToManyAssociationField -ManyToManyId -ManyToManyIdField -ManyToOne -ManyToOneAssociation -ManyToOneAssociationField mapErrors martinfowler masternode @@ -895,217 +1351,91 @@ matthiasnoback maxPurchase mbstring md -MediaDataSelection -MediaDataSet -MediaFolderDataSet mediaId mediaService -MemcachedSessionHandler memoization memoized -MenuOffcanvasPagelet mercure -Mercure mergeWith -MessageAware -MessageQueue -MessageStorer -MeteorAdminSDK -Methodize middleware -Middleware middlewares -MigrationCollection +minPurchase minified minimalistic -Minio -minPurchase mixin -Mixin mixins -Mixins mocksArentStubs modifiability modularity -Modularity -ModuleFactory monday -MongoDbSessionHandler monolog -Monolog monorepo -Monorepo monorepos -Monorepos -MoveShopPermanently moz mozilla mpn mr -MRs -MultiWarehouse -MVC -MyExampleApp myNewMethod -MyPlugin myPluginLogHandler mysql mysqldump -MyTestClass -MyTestInterface -MyExtension -NameAware namespace namespaces -NameStorer natively nav -NavigationPage navigations nd -NelmioCorsBundle -NewFeature newQuantity -NewRelic newsletterRecipient -NewsletterRecipientAware -NewsletterRecipientStorer -Nginx ngrok nixos -NixOS nl -Noback -NodeJS nofollow noindex noopener -NoSQL -NotFoundHttpException -NotRule npm -NPM nullable -NullObject nullsafe -Nullsafe -Nuxt -Nvidia oauth -OAuth -ObjectField -ObjectType observability oder -offcanvas -OffCanvas offCanvasCart -OffcanvasCartPageLoadedEvent +offcanvas og ok -OldFeature -OneToMany -OneToManyAssociation -OneToManyAssociationField -OneToOne -OneToOneAssociation -OneToOneAssociationField onlyAvailable onlyOnFeature onwards oop opcache -Openapi -OpenApi -OpenAPI openInitialPage +openUserActionMenu opensearch -Opensearch -OpenSearch -OPENSEARCH -Opensearch's -OpenSSH openssl -OpenSSL -OpenTelemetry -openUserActionMenu orderAware -OrderAware -OrderCountRule -OrderEntity -OrderEvents orderIds -OrderLineItem -OrderLineItemEntity -OrderStorer orderTransaction -OrderTransaction -OrderTransactionAware -OrderTransactionCapture -OrderTransactionCaptureCollection -OrderTransactionCaptureEntity orderTransactionCaptureRefund -OrderTransactionCaptureRefund -OrderTransactionCaptureRefundEntity -OrderTransactionCaptureRefundPosition -OrderTransactionCaptureRefundPositionCollection -OrderTransactionEntity -OrderTransactionRefundCollection -OrderTransactionStorer org's -ORM -ORMs -OrRule otel -OTEL otlp -OTLP oversales paas -Paas -PaaS packagist -Packagist -PageEvent +pageLoaders pagelet -Pagelet -PageletLoader pageletloaders pagelets -Pagelets -PageLoaded -PageLoadedEvent -PageLoadedEvents pageloader -PageLoader -pageLoaders -Pageloaders -PageLoader structs -PageType parallelize param params -ParentAssociation -ParentAssociationField -ParentFk -ParentFkField parsers -PasswordField -PaymentGatewayApp -PaymentHandlerIdentifierSubscriber -PaymentMethod -PaymentMethodRoute -PaymentMethodRule -PaymentRefundHandlerInterface -PaymentRefundProcessor paypal pcre pdf pdo -PdoSessionHandler -Percona performant -Persistable persister phar philippe @@ -1113,117 +1443,47 @@ php phpdoc phpdocs phpinfo -PhpRedis phpstan -PhpStan -PHPStan -PHPStorm phpunit -PhpUnit -PHPunit -PHPUnit phpunit's phpunitx -PII pluginlogger -PluginManager png pnpm -POC pos -POS positionID -PositionID -PositionIdentifier positionIDs -PositionIDs -PostInstall -PostMessage -PostUpdate pre prebuild prebuilt precompile preconfigured -Predis prefetch prefixer preload -Preload preloaded prem premapping -Premapping -PreparedPaymentHandlerInterface preprocessor preprocessors preselect -Preselect preselection -previewable previewComponent -PreWriteValidationEvent +previewable pricecollectionfacade -PriceCollectionFacade -PriceDefinition -PriceDefinitionField pricefacade -PriceFacade pricefactory -PriceField -PriceFieldSerializer -PrimaryKey -ProductAttributeDataSet -ProductAware -ProductCartProcessor -ProductCartTest -ProductCategoryDefinition -ProductController productCountRoute -ProductCountRouteResponse -ProductDataSelection -ProductDataSet productId -ProductListRoute -ProductManufacturerDefinition -ProductMedia -ProductMediaDefinition productNumber -ProductNumber -ProductOptionRelationDataSet -ProductPage -ProductPriceAttributeDataSet -ProductPriceCalculator -ProductPropertyRelationDataSet productproxy -ProductQuickViewWidget -ProductReviewsWidget -ProductSearchBuilder productsfacade -ProductsFacade -ProductStorer -ProductSubscriber -ProductUpdater -ProductVisibility -ProductWarehouse -ProductWarehouses profiler -Profiler profilers programmatically -PropertyGroupOptionDataSet -Prosemirror -ProseMirror -PRs pseudocode -Pseudocode psh -PSH -PSP -PSR -Punctuations pwa -PWA px py qa @@ -1231,244 +1491,124 @@ qa@shopware.com qty's quantityBefore quantityDelta -Quickstart -QuillJS -RabbitMq -RabbitMQ randomHex -RDB +reCAPTCHA readAsArrayBuffer readAsDataURL readAsText -README -Readonly realtime rebranded recalculable -reCAPTCHA -RecipientsAware -RecipientsStorer -RecurringPaymentHandlerInterface -Redict -RedirectResponse redis refactorings referenceField -ReferenceVersion -ReferenceVersionField refundAmount refundId -RefundPaymentHandlerInterface refundPositions refundPrice regexes -RegistrationCompletedEvent -RegistrationService reindex -Reindexes reinitializing -ReinstallApps reinstallation -RemoteAddress -RemoteAddressField removeBy renameMedia renderer renderers -Repo repos -repositoryfacade repositoryFactory -RepositoryIterator +repositoryfacade repositorywriterfacade reproducibility requestAdminApi -resetUrl -ResetUrlAware -ResetUrlStorer +resetUrl resolvers -RestAPI -RestrictDelete resubmittable rethrown returnUrl revalidation -ReverseInherited -Reviewdog -ReviewFormDataAware -ReviewFormDataStorer rfc roadmap -Roadmap rollbacking -RouteResponse routeScope -RuleConditionService runtime -RuntimeException runtimes -SaaS -SalesAgent -saleschannel salesChannel -SalesChannel salesChannelAware -SalesChannelAware salesChannelContext -SalesChannelContext -SalesChannelContextCreatedEvent -SalesChannelContextResolvedEvent -SalesChannelContextRestoredEvent -SalesChannelContextRestorerOrderCriteriaEvent salesChannelId -SalesChannelId salesChannelLoaded -SalesChannelProductEntity +saleschannel saleschannelrepositoryfacade -SalesChannelRule -Sales Rooms -SameSite sandboxed sarven scalability scalable -ScalarValuesAware -ScalarValuesStorer -ScheduledTask schemas -ScriptEventRegistry scriptResponse scriptresponsefactoryfacade scrollbar scss -SCSS sdk -SDK -SDK's -SDKs -SearchCriteria searchMedia -SearchPage -SearchRanking searchViaAdminApi -SearchWidget secretKey -SecretKey selectable selectbox sellable -Sendfile sendmail seo -SEO -SEOs -SeoUrlRoute -SeoUrlTemplate seperate seperated serializable serializer setFlags setLocaleToEnGb -SetNullOnDelete setProductFixtureVisibility setSalesChannelDomain -settingsItem setToInitialState -SFTP +settingsItem sha -SHA shakable shallowMount shippable -ShippingCountryRule -ShippingMethodPriceCollector -ShippingMethodRoute -ShippingMethodRule -ShippingStreetRule -ShippingZipCodeRule sho -ShopActivatedEvent -ShopDeactivatedEvent -ShopDeletedEvent shopId shopName -ShopNameAware -ShopNameStorer shopUrl shopware -Shopware +shopware's shopwarelabs shopwarepartners -shopware's -Shopware's shorthands -SimpleHttpClient simples simplexml -Sinon -SitemapPage -SKEs skipOnFeature skipTestIfInActive sku slowlog sm smartbar -SMS -SMTP snakeCase -SnippetFileInterface -SomeCoreClassTest -Sonarcube -SonarQube sortings -SPA's -SPAs sql -SQS src srcset -SSHes -SSL stableVersion stackable -Stackhero -StackHero -StackOverflow stacktrace stateId -StateMachineRegistry stateMachineState -StateMachineState -StateMachineStateEntity -StateMachineStateField statesfacade -StatesFacade -StaticEntityRepository statusCode +stdout stemmer stemmers -StockUpdate -StockUpdateFilterProvider -StockUpdater stopwords -Storable -StorableFlow storages -StoreApiResponse -StoreApiRoute storefrontApiRequest -StorefrontController -StorefrontResponse storer -Storer -STP -StringField -StringFields strlen struct -Struct structs stylesheet stylesheets @@ -1479,54 +1619,26 @@ subcontent subdirectories subdirectory subfolder -SubjectAware -SubjectStorer suboptimal subprocessor -Subprocessor subprocessors -SuggestPage supervisord svg -SVG -SVGs sw -SwagAdvDevBundle -SwagB -SwagBasicExample -SwagBasicExampleTheme -SwagDigitalSalesRooms -SwagMigrationBundleExample -SwagMyPlugin -SwagMyPluginSW -swoole swSelect +swoole symfony -Symfony symfony's -Symfony's symlink symlinks -SyncApi -SynchronousPaymentHandlerInterface -Synopsys systemconfigfacade systemd -TaxProvider -TaxProviders -TaxProviderStruct -TCP teardown templated -TemplateDataAware -TemplateDataStorer -TemplateNamespaceHierarchyBuilder templating +testFoo testability -TestCase testenv -testFoo -TestStockUpdateFilter testsuite testsuites textarea @@ -1534,205 +1646,96 @@ th theming themself timeframe -TimeRangeRule tinyint -TinyMCE tipps -TipTap -TipTap's tl -TLS +to's todo tokenized -ToMany tooltip tooltips -Tooltips -ToOne -to's totalAmount tradeoff -transactional -TransactionalAction transactionCapture transactionId -TranslatedField -TranslationDataSet -TranslationsAssociation -TranslationsAssociationField +transactional transpiling -TreeBreadcrumb -TreeBreadcrumbField -TreeLevel -TreeLevelField -TreePath -TreePathField -TreeSelect triggerDeprecated -TriggerReload truthy tsx -TTL -TwigJS typeAndCheck typeAndCheckSearchField -TypeError -TypeError's -typehint -typehinted typeLegacySelectAndCheck typeMultiSelectAndCheck -TypeScript typeSingleSelect typeSingleSelectAndCheck +typehint +typehinted ui -UI -UML un -Unassigning uncomment uncommenting uncompiled und unhandled -UninstallApps uninstallation uniqBy -UnitCollection -UnitEntity -UnitTests unminified -UnoCSS unprefixed unregister -Unregistering unsecure unserialize unstorage unstyled untrusted -Untrusted untyped -UpdateContext -UpdatedAt -UpdatedAtField -UpdatedBy -UpdatedByField updateDestructive -UpdateHtaccess updateViaAdminApi -UpperCamelCase upsert -Upserting url -UrlAware urls -UrlStorer -USD userAware -UserAware -userland userRecovery -UserStorer -Util +userland utils -Utils uuid -Uuid -UUID -UUIDs -UUIDv -UX validator -Validator validators varchar -VARCHAR -VCL -VCS ve -Vercel verifier -versionable -VersionDataPayload -VersionDataPayloadField -VersionField versionId +versionable viewport viewportHeight viewports vimeo -VirtualHosts -Vitepress -Vitest -VM vscode -VSCode vue -Vue -Vuei -VueJs -VueJS -Vue's vuex -Vuex -VueX -WarehouseGroup -WarehouseGroups -WCAG webhook -Webhook webhooks webkit -Webkit -WebKit webpack -Webpack webpackMerge webserver -Webserver -WebSocket wednesday -WeekdayRule -WhitelistRule -WhitelistRuleField whitespace whitespaces wil wishlist -WishlistPage -WishlistWidget -WriteEvents -WriteProtected -WSL www xasjkyld -Valkey -Xdebug -XDebug xhost's -XHR -XKey xkeys xl -XLIFF xml -XmlHttpRequest -XmlUtils -XorRule xpath -XPath -XQuartz xs xsd -XSS -XVFB yaml -YamlFileLoader yml youtube -YYYY zlib zsh -ZSH zstd diff --git a/guides/hosting/configurations/shopware/environment-variables.md b/guides/hosting/configurations/shopware/environment-variables.md index 1e31e16fe..04003e2ae 100644 --- a/guides/hosting/configurations/shopware/environment-variables.md +++ b/guides/hosting/configurations/shopware/environment-variables.md @@ -9,32 +9,32 @@ nav: This page lists all environment variables that can be used to configure Shopware. -| Variable | Default Value | Description | -| ------------------------------------ | ----------------------- | ---------------------------------------------------------------------------------------- | -| `APP_ENV` | prod | Environment | -| `APP_SECRET` | (empty) | Can be generated with `openssl rand -hex 32` | -| `APP_CACHE_DIR` | {projectRoot}/var/cache | Path to a directory to store caches (since 6.6.8.0) | -| `APP_BUILD_DIR` | {projectRoot}/var/cache | Path to a temporary directory to create cache folder (since 6.6.8.0) | -| `APP_LOG_DIR` | {projectRoot}/var/log | Path to a directory to store logs (since 6.6.8.0) | -| `INSTANCE_ID` | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | -| `JWT_PRIVATE_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| `JWT_PUBLIC_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | -| `LOCK_DSN` | flock | DSN for Symfony locking | -| `APP_URL` | (empty) | Where Shopware will be accessible | -| `BLUE_GREEN_DEPLOYMENT` | 0 | This needs super privilege to create trigger | -| `DATABASE_URL` | (empty) | MySQL credentials as DSN | -| `DATABASE_SSL_CA` | (empty) | Path to SSL CA file | -| `DATABASE_SSL_CERT` | (empty) | Path to SSL Cert file | -| `DATABASE_SSL_KEY` | (empty) | Path to SSL Key file | -| `DATABASE_SSL_DONT_VERIFY_SERVER_CERT` | (empty) | Disables verification of the server certificate (1 disables it) | -| `MAILER_DSN` | null://localhost | Mailer DSN (Admin Configuration overwrites this) | -| `OPENSEARCH_URL` | (empty) | Open Search Hosts | -| `SHOPWARE_ES_ENABLED` | 0 | Open Search Support Enabled? | -| `SHOPWARE_ES_INDEXING_ENABLED` | 0 | Open Search Indexing Enabled? | -| `SHOPWARE_ES_INDEX_PREFIX` | (empty) | Open Search Index Prefix | -| `COMPOSER_HOME` | /tmp/composer | Caching for the Plugin Manager | -| `SHOPWARE_HTTP_CACHE_ENABLED` | 1 | Is HTTP Cache enabled? | -| `SHOPWARE_HTTP_DEFAULT_TTL` | 7200 | Default TTL for HTTP Cache | -| `MESSENGER_TRANSPORT_DSN` | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default`) | -| `MESSENGER_TRANSPORT_LOW_PRIORITY_DSN` | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio`) | -| `MESSENGER_TRANSPORT_FAILURE_DSN` | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure`) | +| Variable | Default Value | Description | +| -------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------- | +| `APP_ENV` | `prod` | Environment | +| `APP_SECRET` | (empty) | Can be generated with `openssl rand -hex 32` | +| `APP_CACHE_DIR` | `{projectRoot}/var/cache` | Path to a directory to store caches (since 6.6.8.0) | +| `APP_BUILD_DIR` | `{projectRoot}/var/cache` | Path to a temporary directory to create cache folder (since 6.6.8.0) | +| `APP_LOG_DIR` | `{projectRoot}/var/log` | Path to a directory to store logs (since 6.6.8.0) | +| `INSTANCE_ID` | (empty) | Unique Identifier for the Store: Can be generated with `openssl rand -hex 32` | +| `JWT_PRIVATE_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| `JWT_PUBLIC_KEY` | (empty) | Can be generated with `shopware-cli project generate-jwt --env` | +| `LOCK_DSN` | `flock` | DSN for Symfony locking | +| `APP_URL` | (empty) | Where Shopware will be accessible | +| `BLUE_GREEN_DEPLOYMENT` | `0` | This needs super privilege to create trigger | +| `DATABASE_URL` | (empty) | MySQL credentials as DSN | +| `DATABASE_SSL_CA` | (empty) | Path to SSL CA file | +| `DATABASE_SSL_CERT` | (empty) | Path to SSL Cert file | +| `DATABASE_SSL_KEY` | (empty) | Path to SSL Key file | +| `DATABASE_SSL_DONT_VERIFY_SERVER_CERT` | (empty) | Disables verification of the server certificate (1 disables it) | +| `MAILER_DSN` | `null://localhost` | Mailer DSN (Admin Configuration overwrites this) | +| `OPENSEARCH_URL` | (empty) | Open Search Hosts | +| `SHOPWARE_ES_ENABLED` | `0` | Open Search Support Enabled? | +| `SHOPWARE_ES_INDEXING_ENABLED` | `0` | Open Search Indexing Enabled? | +| `SHOPWARE_ES_INDEX_PREFIX` | (empty) | Open Search Index Prefix | +| `COMPOSER_HOME` | `/tmp/composer` | Caching for the Plugin Manager | +| `SHOPWARE_HTTP_CACHE_ENABLED` | `1` | Is HTTP Cache enabled? | +| `SHOPWARE_HTTP_DEFAULT_TTL` | `7200` | Default TTL for HTTP Cache | +| `MESSENGER_TRANSPORT_DSN` | (empty) | DSN for default async queue (example: `amqp://guest:guest@localhost:5672/%2f/default`) | +| `MESSENGER_TRANSPORT_LOW_PRIORITY_DSN` | (empty) | DSN for low priority queue (example: `amqp://guest:guest@localhost:5672/%2f/low_prio`) | +| `MESSENGER_TRANSPORT_FAILURE_DSN` | (empty) | DSN for failed messages queue (example: `amqp://guest:guest@localhost:5672/%2f/failure`) |