You are browsing the documentation for version 4.2 of OroCommerce, OroCRM and OroPlatform, which is no longer maintained. Read version 5.1 (the latest LTS version) of the Oro documentation to get up-to-date information.

See our Release Process documentation for more information on the currently supported and upcoming releases.

Set up Environment for OroPlatform Based Application with Docker and Symfony Server

During development, you can use Docker to run various application services (MySQL, Postgres, ElasticSearch, RabbitMQ, Redis and MailCatcher), but for simplicity, performance and reliability have PHP and NodeJS installed locally on a host machine.

Set Up the Environment


There are quick guides to setup Docker and Symfony Server development stack:

Development Stack

  • PHP, Composer, Node.js, and NPM should be installed locally for a better development experience.

  • Symfony Local Web Server is used to make you more productive while developing applications. This server is not intended for production use. It supports HTTP/2, TLS/SSL, automatic generation of security certificates, local domains, and many other features.

  • Docker is used to run application services.

  • Docker Compose is used to manage them all with a single command.


PHP and NodeJS should meet the System Requirements.


  1. To avoid reaching composer API rate limit and to work with enterprise applications, configure GitHub OAuth token:

composer config -g <oauthtoken>
  1. To consume less memory on composer operations, it is highly recommended to install the Symfony Flex composer plugin globally:

    composer global require symfony/flex

Install the Application

  1. Get the Oro application source code .

  2. Run application services in the folder with your application:

docker-compose up -d


On Linux, it may not work if you use Docker as a root user. In this case, consider adding your user to the “docker” group with:

sudo usermod -aG docker your-user
  1. Install application dependencies:

composer install -n
  1. If you are using an Enterprise edition application, update the parameters.yml file. Skip this step if you are installing a Community edition application.

composer set-parameters database_driver=pdo_pgsql search_engine_name=elastic_search message_queue_transport=amqp message_queue_transport_config="{host: '%env(ORO_MQ_HOST)%', port: '%env(ORO_MQ_PORT)%', user: '%env(ORO_MQ_USER)%', password: '%env(ORO_MQ_PASSWORD)%', vhost: '/'}" redis_dsn_cache='%env(ORO_REDIS_URL)%/1' redis_dsn_doctrine='%env(ORO_REDIS_URL)%/2'
  1. Install Oro application. This may take up to several minutes:

symfony console oro:install -vvv --sample-data=y --application-url= --user-name=admin --user-firstname=John --user-lastname=Doe --user-password=admin --organization-name=Oro --timeout=0 --symlink --env=prod -n
Oro application installation in progress

Use a Symfony Server

To automatically apply environment variables exposed by Symfony Server from Docker Compose and to use the proper PHP version, you should run all the symfony application commands using symfony console instead of php bin/console. Use symfony php to run php binaries using proper PHP version and expose environment variables from the application services defined with Docker Compose.


On Windows with WSL2 the website is accessible using https://localhost:8000, instead of

Run Symfony Server in a Dev Environment

symfony server:start -d

Run Symfony Server in a Prod Environment

symfony server:start -d --passthru=index.php

Open the Application in a Browser

symfony open:local

Check Application Logs

symfony server:log

Switch PHP version

You can have multiple versions of PHP versions locally. To use a specific PHP version for the project, go to the project root folder and run:

echo 7.4 > .php-version

This will switch the php version to 7.4 for Symfony Server and all the console commands wrapped with symfony.

Run Message Consumer in the Background

symfony run -d php bin/console oro:message-queue:consume -vv

You can also ask symfony to restart the message consumer when changes happen in src/ folder:

symfony run -d --watch=src php bin/console oro:message-queue:consume -vv


You can kill Symfony server processes with command killall <PID>, you can get PID from the symfony server:status output.

Check Symfony Server Status

symfony server:status

For more details, see: Symfony Local Web Server.

Enable Local Domain Names

By default, projects are accessible at a random port of the local IP.

You can enable local domains by setting up the Local Proxy.

Manage Application Services

All application services are defined in the docker-compose.yml file. By default, the docker-compose.yml file shipped with an application has a set of recommended services for each application:

  • For community edition applications: MySQL and MailCatcher.

  • For enterprise edition applications: Postgres, ElasticSearch, RabbitMQ, Redis and MailCatcher.

Override Docker Compose Configuration Locally

You can use docker-compose.override.yml file to override Docker Compose configuration locally. By default, the file is in .gitignore.


For an enterprise application, you first have to update the parameters.yml file to start working with the application services.

Run Application Services

docker-compose up -d

Check Services Logs

docker-compose logs -f

Check Application Services Status

docker-compose ps

Stop Application Services (No Data Loss)

docker-compose stop

Destroy Application Services with all Volumes (Data Loss)

docker-compose down -v

For more details, see Overview of Docker Compose.


Environment variable not found: “ORO_REDIS_URL”

This error appears when the Symfony server does not pass environment variables from the Docker Compose to the application.

Make sure that all the application services are up and healthy with docker-compose ps. There should be a redis service in the list.

If the list is empty, run docker-compose up -d to start all the services.

An exception occured while establishing a connection to figure out your platform version

Make sure all the application services are up and healthy with docker-compose ps. There should be pgsql or mysql service in the list.

If the list is empty, run docker-compose up -d to start all the services.