Attention

You can now run different PHP versions per project: Release v3.0.0-beta-0.1

8. Change container versions

One of the core concepts of the Devilbox is to easily change between different versions of a specific service.

Table of Contents

8.1. Implications

8.1.1. Configuration changes

Be aware that every version has its own configuration files in the cfg/ directory. If you switch to a different version, you might end up with a different custom configuration. This however only applies, if you have already customized the configuration for your current service.

8.1.2. Data changes

You also have to be aware that all database services (e.g.: MySQL, PostgreSQL, MongoDB, etc) use a per version data directory. If you change the database version you might find that you have an empty database when starting another version.

This is simply a pre-caution to prevent newer versions from upgrading the database files and accidentally making them incompatible for older versions.

If you want to take your data along, do a backup before switching the version and then re-import after the switch:

8.2. Examples

8.2.1. Change PHP version

8.2.1.1. Stop the Devilbox

Shut down the Devilbox in case it is still running:

# Navigate to the Devilbox directory
host> cd path/to/devilbox

# Stop all container
host> docker-compose stop

8.2.1.2. Edit the .env file

Open the .env file with your favourite editor and navigate to the PHP_SERVER section. It will look something like this:

.env
#PHP_SERVER=5.2
#PHP_SERVER=5.3
#PHP_SERVER=5.4
#PHP_SERVER=5.5
#PHP_SERVER=5.6
#PHP_SERVER=7.0
PHP_SERVER=7.1
#PHP_SERVER=7.2
#PHP_SERVER=7.3
#PHP_SERVER=7.4
#PHP_SERVER=8.0
#PHP_SERVER=8.1
#PHP_SERVER=8.2

As you can see, all available values are already there, but commented. Only one is uncommented. In this example it is 7.1, which is the PHP version that will be started, once the Devilbox starts.

To change this, simply uncomment your version of choice and save this file. Do not forget to comment (disable) any other version.

In order to enable PHP 5.5, you would change the .env file like this:

.env
#PHP_SERVER=5.2
#PHP_SERVER=5.3
#PHP_SERVER=5.4
PHP_SERVER=5.5
#PHP_SERVER=5.6
#PHP_SERVER=7.0
#PHP_SERVER=7.1
#PHP_SERVER=7.2
#PHP_SERVER=7.3
#PHP_SERVER=7.4
#PHP_SERVER=8.0
#PHP_SERVER=8.1
#PHP_SERVER=8.2

8.2.1.3. Start the Devilbox

Now save the file and you can start the Devilbox again.

# Navigate to the Devilbox directory
host> cd path/to/devilbox

# Start all container
host> docker-compose up php httpd bind

8.2.2. Change web server version

8.2.2.1. Stop the Devilbox

Shut down the Devilbox in case it is still running:

# Navigate to the Devilbox directory
host> cd path/to/devilbox

# Stop all container
host> docker-compose stop

8.2.2.2. Edit the .env file

Open the .env file with your favourite editor and navigate to the HTTPD_SERVER section. It will look something like this:

.env
#HTTPD_SERVER=apache-2.2
#HTTPD_SERVER=apache-2.4
HTTPD_SERVER=nginx-stable
#HTTPD_SERVER=nginx-mainline

As you can see, all available values are already there, but commented. Only one is uncommented. In this example it is nginx-stable, which is the web server version that will be started, once the Devilbox starts.

To change this, simply uncomment your version of choice and save this file. Do not forget to comment (disable) any other version.

In order to enable Apache 2.2, you would change the .env file like this:

.env
HTTPD_SERVER=apache-2.2
#HTTPD_SERVER=apache-2.4
#HTTPD_SERVER=nginx-stable
#HTTPD_SERVER=nginx-mainline

8.2.2.3. Start the Devilbox

Now save the file and you can start the Devilbox again.

# Navigate to the Devilbox directory
host> cd path/to/devilbox

# Start all container
host> docker-compose up php httpd bind

8.2.3. Change whatever version

When you have read how to change the PHP or web server version, it should be fairly simple to change any service version. It behaves in the exact same way.

The variable names of all available services with changable versions are in the following format: <SERVICE>_SERVER. Just look through the .env file.

See also

The following variables control service versions:
PHP_SERVER, HTTPD_SERVER, MYSQL_SERVER, PGSQL_SERVER, REDIS_SERVER, MEMCD_SERVER, MONGO_SERVER

8.3. Gotchas

If two versions are uncommented at the same time, always the last one takes precedence.

Consider this .env file:

.env
#PHP_SERVER=5.2
#PHP_SERVER=5.3
#PHP_SERVER=5.4
PHP_SERVER=5.5
#PHP_SERVER=5.6
PHP_SERVER=7.0
#PHP_SERVER=7.1
#PHP_SERVER=7.2
#PHP_SERVER=7.3
#PHP_SERVER=7.4
#PHP_SERVER=8.0
#PHP_SERVER=8.1
#PHP_SERVER=8.2

Both, PHP 5.5 and PHP 7.0 are uncommented, however, when you start the Devilbox, it will use PHP 7.0 as this value overwrites any previous ones.

8.4. Checklist

  1. Stop the Devilbox
  2. Uncomment version of choice in .env
  3. Start the Devilbox

See also

Troubleshooting