Multi Environment
Pimcore supports different configurations for different environments (dev, test, stage, prod, ...) as well as custom configurations including a fallback mechanism.
The PIMCORE_ENVIRONMENT
variable
To switch to a different environment, you have to set the environment variable PIMCORE_ENVIRONMENT
with a value of
your choice (eg. development or test). PIMCORE_ENVIRONMENT
is an equivalent of Symfony's standard SYMFONY_ENV
so
you can use whatever you prefer.
Having the variable set, there is a special loading order for all configuration files.
Loading example for PIMCORE_ENVIRONMENT = dev
:
app/config/pimcore/system_dev.php
var/config/system_dev.php
app/config/pimcore/system.php
var/config/system.php
The value of PIMCORE_ENVIRONMENT
is used as a part of the file name separated by _
. If you haven't set the environment
variable, the loading order of configuration files looks like, below.
app/config/pimcore/system.php
var/config/system.php
Note: If you put your configurations into
app/config/pimcore/
they might not writable by the Pimcore backend UI. This can be especially useful when having automated building environments and don't want the user to allow changing settings.
Set a new Environment name
If you need add a new environment which is not an existing one by default (those are prod
, dev
and test
) you need
to manually create a config file for the project in app/config/config_<environment>.yml
.
Note: The default
test
environment should only be used for running tests as it is configured to handle sessions with thesession.storage.mock_file
. As consequence, logging into the admin interface is not possible in a browser context.
To create a new config, e.g. staging, which is based on the dev config, you must set staging
as PIMCORE_ENVIRONMENT and
create the following config file app/config/config_staging.yml
:
imports:
- { resource: '@PimcoreCoreBundle/Resources/config/pimcore/dev.yml' } # loads default dev configuration
- { resource: config.yml }
By default, dev-bundles as the profiler are restricted to the dev
environment. If you want to load those bundles in your
environment, you need to modify the kernel in app\AppKernel.php
to include those bundles in your environment. Have a look
at the Pimcore Kernel to see what
is loaded in the default dev
environment.
For instance for an new environment called staging
using web profiler, you can add something like the following:
<?php
use Pimcore\HttpKernel\BundleCollection\BundleCollection;
use Pimcore\Kernel;
class AppKernel extends Kernel
{
public function registerBundlesToCollection(BundleCollection $collection)
{
$collection->addBundle(new \AppBundle\AppBundle);
}
protected function getEnvironmentsForDevBundles(): array
{
// override environments which should add dev bundles (e.g. the profiler)
return ['dev', 'test', 'staging'];
}
}
If you set PIMCORE_ENVIRONMENT
to a new environment name before installation, all those steps need to be done before
running the installation.
Setting the Environment
There are several ways to set the value of PIMCORE_ENVIRONMENT
- depending on the environment and context you are using.
Apache mod_php
Add the following line to the virtual host configuration file.
SetEnv PIMCORE_ENVIRONMENT dev
PHP FPM
Add the following line to your pool.d
configuration file.
env[PIMCORE_ENVIRONMENT] = "dev"
CLI
If you used a Unix system you would set the variable by CLI, like below.
PIMCORE_ENVIRONMENT="dev"; export PIMCORE_ENVIRONMENT
Console Commands
When running ./bin/console
application, set the environment by --env=dev
.
./bin/console --env=dev ...
.env
Pimcore loads a .env
file if it exists. See DotEnv Component Documentation
for details.
# .env
PIMCORE_ENVIRONMENT=dev
Switching Environments Dynamically
Add this to your .htaccess to switch dynamically between your environments:
RewriteCond %{HTTP_HOST} ^localhost
RewriteRule .? - [E=PIMCORE_ENVIRONMENT:dev]
RewriteCond %{HTTP_HOST} ^staging\.site\.com$
RewriteRule .? - [E=PIMCORE_ENVIRONMENT:stage]
RewriteCond %{HTTP_HOST} ^www\.site\.com
RewriteRule .? - [E=PIMCORE_ENVIRONMENT:prod]
Debug Mode & Environments
In order to include some specific debugging tools (profiler, toolbar, ...), Pimcore implicitly sets the
environment to dev
when enabling the debug mode in system settings and if no environment is defined manually as described
above.
Influencing default behaviour
Pimcore ships with sensible defaults on which environment to use in which case, e.g. by automatically using the dev
environment
if Pimcore is in debug mode and by automatically enabling the kernel debug flag for the dev
and test
environments. If
you need to influence that behaviour (e.g. because you have additional environments) you can do so by changing the environment
config during the startup process. For example, if you want to specify the
default environment to use when Pimcore's debug mode is enabled by no environment is explicitely defined:
<?php
// /app/startup.php
/** @var \Pimcore\Config\EnvironmentConfig $environmentConfig */
$environmentConfig = \Pimcore\Config::getEnvironmentConfig();
$environmentConfig->setDefaultDebugModeEnvironment('prod');
Supported Configurations
For examples, please see: