Configuring Multiple Shopware Environments

Shopware is able to handle multiple environments using the SHOPWARE_ENV environment variable. This can be used to load different config files and to separate cache files.

How the environment is handledAnchor link for: how the environment is handled

This environment variable is picked by shopware.php and bin/console and then propagated to the kernel:

$environment = getenv('SHOPWARE_ENV') ?: 'production';
$kernel = new Kernel($environment);

As you can see, if no environment is given, production is used as the default.

Generated filesAnchor link for: generated files

The environment is taken into account for the cache directories and log files. Running Shopware with each of the environments dev, production and testing will result in the following directory tree:

var
├── cache
│   ├── dev_201601120732/[...]
│   ├── production_201601120732/[...]
│   └── testing_201601120732/[...]
└── log
    ├── core_dev-2016-01-25.log
    ├── core_dev-2016-01-26.log
    ├── core_dev-2016-01-27.log
    ├── core_production-2016-01-25.log
    ├── core_production-2016-01-26.log
    ├── core_production-2016-01-27.log
    ├── core_testing-2016-01-25.log
    ├── core_testing-2016-01-26.log
    └── core_testing-2016-01-27.log

Config loadingAnchor link for: config loading

The config loading order is defined in engine/Shopware/Configs/Default.php. The config loader looks for a file named config_[ENVIRONMENT].php first. If that file does not exists it falls back to config.php.

On my development machine all my installations contain a file named config_dev.php. This configuration is usually optimized for development, increases error verbosity and disables some caches etc.

<?php
$defaultConfig = require 'config.php'; // config generated by ant build-unit

return [
    'db' => $defaultConfig['db'],

    'errorHandler' => [
        'throwOnRecoverableError' => true,
    ],

    'front' => [
        'showException' => true,
    ],

    'model' => [
        'cacheProvider' => 'array'
    ],
]

Setting the environmentAnchor link for: setting the environment

ApacheAnchor link for: apache

You can set the environment for your local installation using the .htaccess:

SetEnv SHOPWARE_ENV dev

This also can be done conditionally for a specific Host or Subshop:

SetEnvIf Host "dev.shopware.in" SHOPWARE_ENV=dev

On my local development machine I configured it in the Apache vhost configuration for all installations:

<VirtualHost *:80>
    DocumentRoot "/home/bcremer/www/"
    SetEnv SHOPWARE_ENV dev
</VirtualHost>

NginxAnchor link for: nginx

When using the shopware-with-nginx configuration:

set $shopware_env 'production';

AntAnchor link for: ant

$ SHOPWARE_ENV=dev ant build-unit

Shopware ConsoleAnchor link for: shopware console

This also works for the Shopware Console Commands:

$ SHOPWARE_ENV=dev ./bin/console sw:generate:attributes

Alternatively you can also use the --env option that exists for every console command:

$ ./bin/console sw:generate:attributes --env=dev

Export environment globallyAnchor link for: export environment globally

You can also go so far and set the SHOPWARE_ENV environment variable globally for you shell:

# File: $HOME/.profile
export SHOPWARE_ENV=dev
Back to overview
Top