Skip to content

Installation Requirements

Ensure that your system meets the following requirements before installing or upgrading CiviCRM.

If you are curious what technologies other organizations are using to run CiviCRM, you can look at the CiviCRM Stats.

Server Environment

Operating System

If your server meets all of the requirements described on this page, CiviCRM should function correctly. There are no explicit operating system requirements. However, it's worth noting that CiviCRM is far more widely deployed and tested on UNIX-based operating systems, in particular Linux (e.g. Ubuntu, Debian, etc.), than with Microsoft Windows. You can still use CiviCRM fine from Windows desktops when the hosting environment runs Linux.

Hosting

In general, CiviCRM is a demanding web application which requires substantial server resources. It may not perform well on all hosting platforms. Learn more about choosing your hosting platform.

CMS

A CMS, or Content Management System, is a type of application which controls and manages the content of a website. CiviCRM must be installed within one of these compatible CMS platforms.

See the page on choosing a CMS for more information about the advantages and disadvantages of each compatible CMS platform.

Backdrop

Drupal

Joomla

WordPress

PHP

PHP Version on the Command Line

The PHP version used on the command line is important and should match the version used by the web server. Using PHP 7.1 (or lower) on the command line and using PHP 7.2 (or higher) on the web server can cause issues.

It is also important to ensure that the same PHP extensions/modules are loaded on the command line and the web server.

PHP Version

CiviCRM 5.27 ESR CiviCRM 5.x.x stable
PHP 7.4 incompatible Testing has shown that as of CiviCRM 5.28 can be run but issues are still being worked on in this lab issue
PHP 7.3 compatible and recommended compatible and recommended
PHP 7.2 compatible and recommended - but see note below about resaving the SMTP password compatible and recommended but see note below about resaving the SMTP password
PHP 7.1 compatible but not recommended due to to PHP end-of life in Dec 2019 compatible but not recommended due to to PHP end-of life in Dec 2019
PHP 7.0 incompatible incompatible as of 5.25.0
PHP 5.6 incompatible incompatible

PHP Extensions

To install these extensions, you will typically install a separate package within your server's package manager (e.g. apt-get on Ubuntu).

Required for CiviCRM Core

  • PHP BCMath - required for calculating financial values in CiviCRM Core.
  • PHP Curl - required for many payment processors, the extension manager, and the CiviCRM News dashlet.
  • PHP DOM XML - required by CiviCase.
  • PHP Multibyte - required for internationalisation and proper encoding of fields.
  • PHP Zip - required for unzipping auto-downloaded extensions so they can be installed from the browser.
  • PHP INTL - required for outputting localized formatted number strings from CiviCRM 5.28 onwards

Required for Third-Party Functionality or CiviCRM Extensions

  • PHP SOAP - required to use the SOAP processor (required for the CiviSMTP service)

PHP 7.1 and the MCrypt library

  • PHP MCrypt - the MCrypt extension is no longer recommended for new installations.

    PHP 7.2 Compatibility

    7.2 upgrade warning - 7.2 does not support MCrypt and if MCrypt is not installed the SMTP password (if entered) will need to be re-saved once you update your PHP version to 7.2.

    PHP 7.1 cannot access SMTP credentials

    CiviCRM will incorrectly attempt to decrypt the SMTP password using the MCrypt library when executed using PHP 7.1. If PHP 7.2 or higher was used to save the SMTP password. This can occur if the PHP version on the command line does not match the web server version.

PHP Configuration

  • Set memory_limit between 256 and 512 megabytes
  • Don't enable the deprecated open_basedir or safemode PHP directives. Otherwise you will have an error when automatically installing most of the extensions.
  • Don't use MAMP XCache - Several people have reported "white screen of death" trying to run CiviCRM with MAMP's XCache enabled (check MAMP > Preferences > PHP > Cache).

MySQL

CiviCRM requires MySQL (or compatible) database software.

MariaDB and Percona are forks of the MySQL project and can be used as drop-in replacements for MySQL.

Other database servers (such as PostgreSQL) are not compatible with CiviCRM.

MySQL Version

Your MySQL version should be 5.7.5 or greater or MariaDB 10.0.2 or greater. As of version 5.28 the minimum install version for CiviCRM is 5.6 users on versions before that are advised to upgrade their MySQL instance to a recommended version. CiviCRM may not run correctly on MySQL 5.6 as these versions don't support some of the functionality CiviCRM uses to ensure that database actions don't compete for the same resources.

MySQL 8

As of version 5.24 CiviCRM has been shown to be able to run on MySQL 8 through the execution of our test matrix. Not all of the Content Management Systems support MySQL 8, CiviCRM MySQL 8 support is being tracked in this open issue for MySQL 8 support. It is also worth knowing that both Backdrop and Drupal 7 have open issues with regards to MySQL 8 support. Drupal 8 supports MySQL 8 as of version 8.6, Current versions of WordPress and Joomla appear to be compatible with MySQL 8

MySQL Configuration

  • Support for the innodb storage engine is required.
  • The thread_stack configuration variable should be set to 192k or higher.
  • Trigger support is required.
  • The ONLY_FULL_GROUP_BY mode should be turned off on production sites - although this is mostly precautionary now.

    • In MySQL 5.7+ the SQL mode ONLY_FULL_GROUP_BY is enabled by default which causes some errors due to some of CiviCRM's SQL queries that were written with the assumption that this mode would be disabled.
    • Administrators are advised to turn off this SQL mode by removing the string ONLY_FULL_GROUP_BY from the sql_mode variable. The following SQL query will do the trick.

      SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
      
    • See also:

    • If you plan to have multiple languages used in your CiviCRM installation it is strongly recommended that you ensure that locale is set to a UTF8 locale and also ensure that you set utf8 as the standard encoding for MySQL. To alter locale you can configure as per Ubuntu instructions, Debian, CentOS. To set the default encoding for MySQL you should follow the steps provided in this Stack Overflow post
    • In order to support a future data migration from utf8 to the utf8mb4 character set, it is recommended, though not yet required, to add the following configuration directives on MySQL 5.5 or 5.6 (these are the default values on MySQL 5.7):
    [mysqld]
    innodb_large_prefix=true
    innodb_file_format=barracuda
    innodb_file_per_table=true
    
  • In MySQL 8 the default authentication plugin changes from mysql_native_password to caching_sha2_password. This may cause issues with your PHP layer. Fortunately you can revert this change by specifying your chosen authentication plugin in your MySQL configuration:

 [mysqld]
 default_authentication_plugin=mysql_native_password

Also in MySQL 8 the following variables, used fairly extensively in CiviCRM installs, have been removed innodb_large_prefix and innodb_file_format. In MySQL 8 binary logging is also turned on by default which many users may want to turn off, this can be achieved by adding to your MySQL configuration file:

 [mysqld]
 skip-log-bin

MySQL Time

CiviCRM performs various operations based on dates and times – for example, deactivating expired records or triggering scheduled reminders. To perform these operations correctly, the dates and times reported by PHP and MySQL should match. If the dates or times are mismatched, then one or more of the following may be the problem:

  • PHP and MySQL may be running on different servers, and the clocks may be out-of-sync. Configuring automatic clock synchronization is the best solution.
  • PHP, MySQL, and/or the operating system may be configured to use different default timezones. Verify the configuration of each.
  • The content management system (Drupal, Joomla, or WordPress) or one of its plugins may manipulate the timezone settings without informing CiviCRM's. You may wish to post to Stack Exchange or Mattermost about your problem. Please include any available details about the timezone settings in the operating system, PHP, MySQL, and the CMS; if you have any special CMS plugins or configuration options which may affect timezones, please report them.

MySQL Permissions

The permissions you'll need to assign to the MySQL user that CiviCRM uses will depend on your version of MySQL. The following example assumes you have a database called civicrm and a MySQL user called civicrm_user.

GRANT
  SELECT,
  INSERT,
  UPDATE,
  DELETE,
  CREATE,
  DROP,
  INDEX,
  ALTER,
  CREATE TEMPORARY TABLES,
  LOCK TABLES,
  TRIGGER,
  CREATE ROUTINE,
  ALTER ROUTINE,
  REFERENCES,
  CREATE VIEW,
  SHOW VIEW
ON civicrm.*
TO 'civicrm_user'@'localhost'
IDENTIFIED BY 'realpasswordhere';

Binary Logging

If you want to enable binary logging you will need to choose one of the following. Either:

  • Add the following line to your /etc/my.cnf file.

    log_bin_trust_function_creators = 1
    

    (See the MySQL manual reference for more information.)

  • Or give the SUPER permission (even if your MySQL version is greater than 5.1.6).

    GRANT SUPER ON *.* TO 'civicrm_user'@'localhost';
    

    (More information on triggers is available in the MySQL documentation about Binary Logging of Stored Programs.)