Requirements for doing a normal installation
eZ Publish makes use of and depends on four important things:
- A web server
- A server-side PHP scripting engine
- The eZ Components library
- A database server
- An image conversion system (optional)
The first three things should be in place before an eZ Publish installation is deployed. The image conversion system is optional and is only needed if you're planning to use eZ Publish with images. The web server and the server-side PHP scripting engine has to run on the same machine. The database server may run on a different computer.
For the moment, the following software solutions can be used:
Web server
Currently, only the Apache web server is supported. On Linux/UNIX based systems, it is recommended to use the latest version of the 2.x branch. Note that it must run in "pre-fork" mode instead of "threaded" mode - the reason for this is because some of the libraries that PHP extensions use might not be thread-safe.
On Windows, it is recommended to use the latest version of the 1.3 branch. (Apache 2.x for Windows is not supported since it only exists in "threaded" mode.)
The Apache web server is the most popular web server on the planet. It is free, open source and can be downloaded from http://www.apache.org.
Server-side PHP scripting engine
Since most of the eZ Publish system is written using the PHP scripting language, a PHP (hypertext pre-processor) server-side engine is needed. Make sure you have PHP 5.1.6 or later, up to PHP 5.3.x.
Note that it is strongly recommended to use the latest version of the 5.3.x branch. The reason for this is that eZ Publish runs faster on PHP 5.3 than on PHP 5.2 or PHP 5.1. In addition, some extensions may require PHP 5.3 (for example, the eZ Flow extension that comes together with eZ Publish). Make sure you use the PHP version that is required for your specific eZ Components version.
PHP is free software and can be downloaded from http://www.php.net. The following table reveals which functionality PHP needs to have compiled-in support for.
Name | Description |
---|---|
MySQLi extension (recommended) |
Required if a MySQL database will be used. |
Required if a PostgreSQL database will be used. |
|
Required (see below). |
|
Required (see below). |
|
Required (enabled in PHP by default). |
|
Required (enabled in PHP by default). |
|
Required if ImageMagick is not installed. |
|
Recommended (see below). |
|
Recommended (see below). |
|
Required. |
|
Recommended. |
Zlib extension
Make sure that zlib support in PHP is enabled, otherwise the setup wizard will not be able to unpack downloaded packages during the installation process.
DOM extension
In most cases, DOM functions are enabled by default as they are included in the PHP core. However, some Linux distributions have PHP without compiled-in support for DOM. Instead, they provide DOM as a shared module in a separate RPM package called "php-xml".
PHP CLI
It is strongly recommended to have PHP CLI installed, otherwise some features like notifications, delayed search indexing, upgrade scripts, the collaboration system (content approval), clearing caches from within the command line, etc. will not work.
CURL
It is recommended to enable CURL support, otherwise some features like outbound connections via proxy and SSL support for eZSoap will not work.
PHP memory limit issue
eZ Publish needs at least 64 MB in order to complete the setup wizard. If you are using PHP 5.2.0 or earlier version, you'll have to increase the default "memory_limit" setting which is located in the "php.ini" configuration file. (Don't forget to restart Apache after editing "php.ini".) Normal operation requires about 16 MB. However, it is highly recommended that you keep the 64 MB setting since eZ Publish consumes a lot more memory as soon as you reindex the search, execute upgrade scripts, etc. Multilingual sites will also require at least 64 MB.
If you are using PHP 5.2.1 or later, there is no need to change the default "memory_limit" setting (it is set to 128 MB by default).
PHP timezone
You need to set the "date.timezone" value in the "php.ini" configuration file. If this setting is not specified, you will most likely receive error messages like "It is not safe to rely on the system's timezone settings" when running eZ Publish on PHP 5. The following example shows how the corresponding line in "php.ini" looks like:
date.timezone = <timezone>
Refer to the PHP documentation for the list of supported timezones. Don't forget to restart Apache after editing "php.ini".
eZ Components library
eZ Publish is an object-oriented application where each class definition is stored in a separate PHP source file. Instead of having a list of needed includes at the beginning of each source file, eZ Publish 4 makes use of the __autoload() function. When eZ Publish is installed, all class definitions of the eZ Publish kernel will have their paths listed in the "autoload/ezp_kernel.php" file. In addition, the "autoload/ezp_extension.php" file will contain an array of paths for class definitions that are a part of the extensions that come with eZ Publish. These arrays will most likely need to be updated in the future (for example, when you install new extensions or configure existing ones using the "Setup - Extensions" part of the administration interface). This requires eZ Components version 2007.1.1 or higher to be installed. In particular, you need to install the File and Base components ("ezcBase" and "ezcFile"), otherwise eZ Publish will not be able to update autoload arrays.
eZ Components is an enterprise ready general purpose PHP components library used independently or together for PHP application development. eZ Components can be downloaded from http://ezcomponents.org/download. In the future, eZ Components will be bundled with eZ Publish. Refer to http://ezcomponents.org/docs/install for information about how to install eZ Components.
Important note
Starting from version 2008.1, the eZ Components library requires PHP version 5.2.1 or higher up to PHP 5.3.x.
Database server
eZ Publish stores miscellaneous data structures and actual content using a database. This means that a database server has to be available for eZ Publish at all times. Follow this link to the eZ Publish requirements page to find which database solutions eZ Publish is compatible with.
The setup wizard will automatically detect the database server as long as it is running on the same computer that functions as the web server. eZ Publish 4 requires a UTF-8 database.
Note that eZ Publish 4 does not support clustering for PostgreSQL databases. The clustering code is optimized for best performance and focused on MySQL databases using the InnoDB storage engine.
Even if you are not going to run eZ Publish in a clustered environment, the use of InnoDB is required. This storage engine makes it possible to use transaction-safe tables in a MySQL database. (Database transaction support is enabled by default in eZ Publish. This feature makes the system less vulnerable to database errors and inconsistencies due to aborted requests.) Contact your database administrator if you are unsure about whether InnoDB is available on your server.
If you want to use PostgreSQL, make sure the "pgcrypto" module is installed. On Linux/UNIX, you may need to install a separate package called "postgresql-contrib" (refer to the PostgreSQL documentation for more information), which contains the "pgcrypto" module. The "pgcrypto" module provides cryptographic functions for PostgreSQL, including the "digest" function, which is needed for eZ Publish. When setting up a PostgreSQL database for eZ Publish, you will have to register these functions in the database. Refer to the "Setting up a database" part of the "Installing eZ Publish on a Linux/UNIX based system" and "Installing eZ Publish on Windows" documentation pages (depending on the target OS) for more information.
Known issue with running PHP5.3 on MySQL: Some people (like Windows users with both IPv4 and IPv6 installed ) experience problems connecting to the database server using host names like "localhost"... If you experience problems, try using IPv4 address like "127.0.0.1". This is due to a connectivity problem when running PHP5.3 on MySQL. So, please replace the database server name "localhost" with the IP address of the machine, or "127.0.0.1", which is reserved for the local host.
Session parameters
In order to support ezpSessionHandlerDB, session.hash_function and session.hash_bits_per_character in php.ini should be combined with the goal of never generating keys longer then 32 bytes.
Default PHP settings (MD5):
session.hash_function = 0 session.hash_bits_per_character = 4
Recommended settings (SHA-1):
session.hash_function = 1 session.hash_bits_per_character = 5
Oracle compatibility
The version 1.8 of the eZ Publish Extension for Oracle® Database makes it possible to use Oracle as a database for eZ Publish 4.0.1 and higher. Note that earlier versions of the extension are not compatible with eZ Publish 4.
Image conversion system (optional)
In order to scale, convert or modify images, eZ Publish needs to make use of an image conversion system. One of the following software packages (both are free) can be used:
- GD2 (comes with PHP)
- ImageMagick (http://www.imagemagick.org)
ImageMagick supports more formats than GD and usually produces better results (better scaling, etc.). The setup wizard will automatically detect the pre-installed image conversion system(s).
The installation and setup of required software solutions (outlined above) is far beyond the scope of this document. Please refer to the homepage and documentation of the different software solutions.
Supported browsers
For the supported browser list please check the administration interface chapter.
Limitation on some file systems when storing large number of content files
eZ Publish stores all disc related content (eg Images, PDF's etc) in var/storage like the structure from content tree, creating one folder for each object. In most file systems used under Linux (especially ext2 + ext3) there exists a hard LIMIT TO 32000 directories per folder. So it is not possible to store more than 31999 objects under one folder.
To get around this limitation without changing the file system, you can split your content tree so that you don't have more than 32k content files (example: images) in the same folder.
Examples of file systems that supports more file/folder entries per folder.
- ReiserFS: roughly 1.2 million per directory
- ZFS: 2^48 (a really big number: 281474976710656)!
eZ Publish on NFS file systems
Please be aware that it's not advisable to run eZ Publish on NFS file systems as you may experience issues. The cause of the issues may be performance, as NFS will slow down on heavy network traffic, slow access to files, or file access concurrency regarding file lock. Also, eZ Publish currently uses the flock() PHP function, which is not considered stable for NFS shares.
NFS should only be used to store distributed data such as cache, or binary files, in clustered environments.
Balazs Halasy (14/09/2010 8:57 am)
Ricardo Correia (11/10/2013 10:55 am)
Comments