Server side set up for hosting

Hardware

Here is the minimum server configuration to run Akeneo PIM application:

CPU Quad-core, type Intel Xeon 1220 or above
Memory 8GB minimum
Hard drive SAS HDD 15k RPM, 20GB minimum (RAID 1 minimum recommended)

Warning

Should you use VCPu, keep in mind that VCPus do not provide same level of performance as real CPUs. Amazon servers, for instance, offer only 10 to 25% of performances of a real CPU.

Software

Operating Systems

Akeneo PIM only works on Linux servers. The application’s behaviour has been tested on several operating systems. We cannot guarantee the behaviour of the application on servers different from:

Debian (Linux) ≥ 8 (64 bits)
Ubuntu (Linux) ≥ 14.04 (64 bits)
CentOS / RHEL* (Linux) ≥ 7
  • RHEL stands for Red Hat Enterprise Linux.

Web server and configuration

We can only guarantee the behaviour on the following web server:

Apache web server ≥ 2.4

The web server will also need the following libraries and modules:

mod rewrite Required
mod php5 Required (no CGI, no FastCGI, nor FPM)

PHP required modules and configuration

PHP >= 5.6.24
php5-curl No specific configuration
php5-gd No specific configuration
php5-intl No specific configuration
php5-mcrypt No specific configuration
php5-apcu apc.enable_cli=1
php5-imagick Only required for Enterprise Edition

Warning

function exec() is required in order to handle data import/export, check if it hasn’t been disabled in your php.ini.

Warning

To avoid a security vulnerability, please make sure you are using PHP >= 5.6.24. More details available at: https://github.com/FriendsOfPHP/security-advisories/issues/259#issuecomment-369274526 and https://github.com/php/php-src/commit/0e2447cd11f4b72257e5d2609f923177e9736c3c

Besides these modules, the following configuration is the minimal configuration required:

  • Setup Apache php.ini file /etc/php5/apache2/php.ini

Note

If you have several php versions on your server, these files can be located in /etc/php/x.x/apache2/php.ini and /etc/php/x.x/cli/php.ini.

$ sudo vim /etc/php5/apache2/php.ini
memory_limit = 512M
date.timezone = Etc/UTC
  • Setup CLI php.ini file /etc/php5/cli/php.ini
$ sudo vim /etc/php5/cli/php.ini
memory_limit = 768M
date.timezone = Etc/UTC

Note

Use the time zone matching your location, for example America/Los_Angeles or Europe/Berlin. See http://www.php.net/timezones for the list of all available timezones.

Database servers

Depending on your data volume (number of products, number of attributes per product, number of basic, localized or scopable attributes, number of locales, number of scopes, etc.) you will have to choose a strategy to store your products, which will determine your database server configurations:

  • Full SQL database with MySQL. All your data will be stored in MySQL.
  • Hybrid SQL storage with MySQL and MongoDB. Your product related data will be stored in MongoDB. The other data will still remain in MySQL.

To make an educated choice you should try to find out how many product values your database will store. For example, for one product:

  • A simple attribute will generate only one product value
  • A localized attribute will generate as many product values as you have locales enabled
  • A scopable attribute will generate as many product values as you have channels
  • A localizable and scopable attribute will generate: (number of enabled locales * number of channels) product values

We consider that MySQL can store up to 5 million product values. Here is the complete formula to check if you have more product values than the recommended threshold that MySQL can manage alone:

N products * (
    N simple attributes
    + ( N localized attributes * N enabled locales )
    + ( N scopable attributes * N existing channels )
    + ( N scopable AND localizable attributes * N enabled locales * N existing channels )
) > 5 Million
MySQL (SQL) 5.1 ≤ version ≤ 5.6
MongoDB (NoSQL) 2.4 or 2.6

Warning

Due to changes in its API, MongoDB 3.0 is not supported.

Warning

MySQL 5.7 is not officially supported but works as experimental mode if you disable the ONLY_FULL_GROUP_BY mode.

Depending on the configuration you pick, you will need to respect parts or all of the following requirements.

MySQL

To use this database you will also require the distribution package:

mysql-server Required

and the following PHP modules:

php5-mysql Required

MongoDB

To use this database you will also require the distribution package:

mongodb-server Required

and the following php modules:

php5-mongo Required

Network

The following ports should be opened on the server host for the PIM to work properly:

HTTP or HTTPS 80 or 443 Required
MySQL unix socket or 3306 (if MySQL server on a different host) Required
SSH 22 Required (for deployment)

Files and folders access rights

Most of the application folders and files require only read access. Here is a list of folders that also need write access for the Apache user:

app/cache Contains application cache files
app/logs Contains application log files
app/uploads Contains files uploaded to the application by users or during import processes
web Contains the web assets required by the application

These permissions are the ones required by the Symfony Framework (see its official documentation for more information).

Akeneo PIM application uses an abstraction layer called Flysystem to store media and files uploaded from the application. By default, Flysystem is configured to store these files on the application server, but this configuration can easily be changed in favor of, for example, a distributed remote storage system (see Flysystem documentation for more information).

The app/uploads folder could be located elsewhere depending on the configuration you defined in the parameters.yml of your Akeneo PIM application instance.

Please note that neither the Apache user or the CLI should be the root user of the system.