Nginx

Adobe Commerce supports nginx 1.x (or the latest mainline version). You must also install the latest version of php-fpm.

Installation instructions vary based on which operating system that you are using. See PHP for information.

Ubuntu

The following section describes how to install Adobe Commerce and Magento Open Source 2.x on Ubuntu using nginx, PHP, and MySQL.

Install nginx

sudo apt -y install nginx

You can also build nginx from source

After completing the following sections and installing the application, we will use a sample configuration file to configure nginx.

Install and configure php-fpm

Adobe Commerce and Magento Open Source require several PHP extensions to function properly. In addition to these extensions, you must also install and configure the php-fpm extension if you are using nginx.

To install and configure php-fpm:

  1. Install php-fpm and php-cli:

    code language-bash
    apt-get -y install php7.2-fpm php7.2-cli
    
    note note
    NOTE
    This command installs the latest available version of PHP 7.2.X. See system requirements for supported PHP versions.
  2. Open the php.ini files in an editor:

    code language-bash
    vim /etc/php/7.2/fpm/php.ini
    
    code language-bash
    vim /etc/php/7.2/cli/php.ini
    
  3. Edit both files to match the following lines:

    code language-conf
    memory_limit = 2G
    max_execution_time = 1800
    zlib.output_compression = On
    
    note note
    NOTE
    We recommend setting the memory limit to 2 G when testing Adobe Commerce and Magento Open Source. Refer to Required PHP settings for more information.
  4. Save and exit the editor.

  5. Restart the php-fpm service:

    code language-bash
    systemctl restart php7.2-fpm
    

Install and configure MySQL

Refer to MySQL for more information.

Install and configure

There are several ways to download Adobe Commerce and Magento Open Source, including:

This example shows a Composer-based installation using the command line.

  1. As the file system owner, log in to your application server.

  2. Change to the web server docroot directory or a directory that you have configured as a virtual host docroot. For this example, we’re using the Ubuntu default /var/www/html.

    code language-bash
    cd /var/www/html
    
  3. Install Composer globally. Composer is required to update dependencies before installing Adobe Commerce or Magento Open Source:

    code language-bash
    curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer
    
  4. Create a Composer project using the Magento Open Source or Adobe Commerce metapackage.

    Magento Open Source

    code language-bash
    composer create-project --repository=https://repo.magento.com/ magento/project-community-edition <install-directory-name>
    

    Adobe Commerce

    code language-bash
    composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition <install-directory-name>
    

    When prompted, enter your authentication keys. Your public key is your username; your private key is your password.

  5. Set read-write permissions for the web server group before you install the application. This is necessary so that the command line can write files to the file system.

    code language-bash
    cd /var/www/html/<magento install directory>
    
    code language-bash
    find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
    
    code language-bash
    find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
    
    code language-bash
    chown -R :www-data . # Ubuntu
    
    code language-bash
    chmod u+x bin/magento
    
  6. Install from the command line. This example assumes that the install directory is named magento2ee, the db-host is on the same machine (localhost), and that the db-name, db-user, and db-password are all magento:

    code language-bash
    bin/magento setup:install \
    --base-url=http://localhost/magento2ee \
    --db-host=localhost \
    --db-name=magento \
    --db-user=magento \
    --db-password=magento \
    --backend-frontname=admin \
    --admin-firstname=admin \
    --admin-lastname=admin \
    --admin-email=admin@admin.com \
    --admin-user=admin \
    --admin-password=admin123 \
    --language=en_US \
    --currency=USD \
    --timezone=America/Chicago \
    --use-rewrites=1 \
    --search-engine=elasticsearch7 \
    --elasticsearch-host=es-host.example.com \
    --elasticsearch-port=9200
    
  7. Switch to developer mode:

    code language-bash
    cd /var/www/html/magento2/bin
    
    code language-bash
    ./magento deploy:mode:set developer
    

Configure nginx

We recommend configuring nginx using the nginx.conf.sample configuration file provided in the installation directory and nginx virtual host.

These instructions assume you’re using the Ubuntu default location for the nginx virtual host (for example, /etc/nginx/sites-available) and Ubuntu default docroot (for example, /var/www/html), however, you can change these locations to suit your environment.

  1. Create a new virtual host for your site:

    code language-bash
    vim /etc/nginx/sites-available/magento
    
  2. Add the following configuration:

    code language-conf
    upstream fastcgi_backend {
      server  unix:/run/php/php7.2-fpm.sock;
    }
    
    server {
    
      listen 80;
      server_name www.magento-dev.com;
      set $MAGE_ROOT /var/www/html/magento2;
      include /var/www/html/magento2/nginx.conf.sample;
    }
    
    note note
    NOTE
    The include directive must point to the sample nginx configuration file in your installation directory.
  3. Replace www.magento-dev.com with your domain name. This must match the base URL you specified when installing Adobe Commerce or Magento Open Source.

  4. Save and exit the editor.

  5. Activate the newly created virtual host by creating a symlink to it in the /etc/nginx/sites-enabled directory:

    code language-bash
    ln -s /etc/nginx/sites-available/magento /etc/nginx/sites-enabled
    
  6. Verify that the syntax is correct:

    code language-bash
    nginx -t
    
  7. Restart nginx:

    code language-bash
    systemctl restart nginx
    

Verify the installation

Open a web browser and navigate to your site’s base URL to verify the installation.

CentOS 7

The following section describes how to install Adobe Commerce and Magento Open Source 2.x on CentOS 7 using nginx, PHP, and MySQL.

Install nginx

yum -y install epel-release
yum -y install nginx

After installation is complete, start nginx and configure it to start at boot time:

systemctl start nginx
systemctl enable nginx

After completing the following sections and installing the application, we’ll use a sample configuration file to configure nginx.

Install and configure php-fpm

Adobe Commerce and Magento Open Source require several PHP extensions to function properly. In addition to these extensions, you must also install and configure the php-fpm extension if you’re using nginx.

  1. Install php-fpm:

    code language-bash
    yum -y install php70w-fpm
    
  2. Open the /etc/php.ini file in an editor.

  3. Uncomment the cgi.fix_pathinfo line and change the value to 0.

  4. Edit the file to match the following lines:

    code language-conf
    memory_limit = 2G
    max_execution_time = 1800
    zlib.output_compression = On
    
    note note
    NOTE
    We recommend setting the memory limit to 2 G when testing Adobe Commerce or Magento Open Source. Refer to Required PHP settings for more information.
  5. Uncomment the session path directory and set the path:

    code language-conf
    session.save_path = "/var/lib/php/session"
    
  6. Save and exit the editor.

  7. Open /etc/php-fpm.d/www.conf in an editor.

  8. Edit the file to match the following lines:

    code language-conf
    user = nginx
    group = nginx
    listen = /run/php-fpm/php-fpm.sock
    listen.owner = nginx
    listen.group = nginx
    listen.mode = 0660
    
  9. Uncomment the environment lines:

    code language-conf
    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp
    
  10. Save and exit the editor.

  11. Create a directory for the PHP session path and change the owner to the apache user and group:

    code language-bash
    mkdir -p /var/lib/php/session/
    
    code language-bash
    chown -R apache:apache /var/lib/php/
    
  12. Create a directory for the PHP session path and change the owner to the apache user and group:

    code language-bash
    mkdir -p /run/php-fpm/
    
    code language-bash
    chown -R apache:apache /run/php-fpm/
    
  13. Start the php-fpm service and configure it to start at boot time:

    code language-bash
    systemctl start php-fpm
    
    code language-bash
    systemctl enable php-fpm
    
  14. Verify that the php-fpm service is running:

    code language-bash
    netstat -pl | grep php-fpm.sock
    

Install and configure MySQL

Refer to MySQL for more information.

Install and configure

There are several ways to download the Adobe Commerce and Magento Open Source, including:

This example shows a Composer-based installation using the command line.

  1. As the file system owner, log in to your application server.

  2. Change to the web server docroot directory or a directory that you have configured as a virtual host docroot. For this example, we’re using the Ubuntu default /var/www/html.

    code language-bash
    cd /var/www/html
    
  3. Install Composer globally. Composer is required to update dependencies before installing Adobe Commerce or Magento Open Source:

    code language-bash
    curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer
    
  4. Create a Composer project using the Magento Open Source or Adobe Commerce metapackage.

    Magento Open Source

    code language-bash
    composer create-project --repository=https://repo.magento.com/ magento/project-community-edition <install-directory-name>
    

    Adobe Commerce

    code language-bash
    composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition <install-directory-name>
    

    When prompted, enter your authentication keys. Your public key is your username; your private key is your password.

  5. Set read-write permissions for the web server group before you install the application. This is necessary so that the command line can write files to the file system.

    code language-bash
    cd /var/www/html/<magento install directory>
    
    code language-bash
    find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
    
    code language-bash
    find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
    
    code language-bash
    chown -R :www-data . # Ubuntu
    
    code language-bash
    chmod u+x bin/magento
    
  6. Install from the command line. This example assumes that the install directory is named magento2ee, the db-host is on the same machine (localhost), and that the db-name, db-user, and db-password are all magento:

    code language-bash
    bin/magento setup:install \
    --base-url=http://localhost/magento2ee \
    --db-host=localhost \
    --db-name=magento \
    --db-user=magento \
    --db-password=magento \
    --backend-frontname=admin \
    --admin-firstname=admin \
    --admin-lastname=admin \
    --admin-email=admin@admin.com \
    --admin-user=admin \
    --admin-password=admin123 \
    --language=en_US \
    --currency=USD \
    --timezone=America/Chicago \
    --use-rewrites=1
    
  7. Switch to developer mode:

    code language-bash
    cd /var/www/html/magento2/bin
    
    code language-bash
    ./magento deploy:mode:set developer
    

Configure nginx

We recommend configuring nginx using the nginx.conf.sample configuration file provided in the installation directory and nginx virtual host.

These instructions assume you’re using the CentOS default location for the nginx virtual host (for example, /etc/nginx/conf.d) and default docroot (for example, /usr/share/nginx/html), however, you can change these locations to suit your environment.

  1. Create a new virtual host for your site:

    code language-bash
    vim /etc/nginx/conf.d/magento.conf
    
  2. Add the following configuration:

    code language-conf
    upstream fastcgi_backend {
      server  unix:/run/php-fpm/php-fpm.sock;
    }
    
    server {
    
      listen 80;
      server_name www.magento-dev.com;
      set $MAGE_ROOT /usr/share/nginx/html/magento2;
      include /usr/share/nginx/html/magento2/nginx.conf.sample;
    }
    
    note note
    NOTE
    The include directive must point to the sample nginx configuration file in your installation directory.
  3. Replace www.magento-dev.com with your domain name.

  4. Save and exit the editor.

  5. Verify that the syntax is correct:

    code language-bash
    nginx -t
    
  6. Restart nginx:

    code language-bash
    systemctl restart nginx
    

Configure SELinux and Firewalld

SELinux is enabled by default on CentOS 7. Use the following command to see if it’s running:

sestatus

To configure SELinux and firewalld:

  1. Install SELinux management tools:

    code language-bash
    yum -y install policycoreutils-python
    
  2. Run the following commands to change the security context for the installation directory:

    code language-bash
    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/app/etc(/.*)?'
    
    code language-bash
    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/var(/.*)?'
    
    code language-bash
    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/media(/.*)?'
    
    code language-bash
    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/static(/.*)?'
    
    code language-bash
    restorecon -Rv '/usr/share/nginx/html/magento2/'
    
  3. Install the firewalld package:

    code language-bash
    yum -y install firewalld
    
  4. Start the firewall service and configure it to start at boot time:

    code language-bash
    systemctl start firewalld
    
    code language-bash
    systemctl enable firewalld
    
  5. Run the following commands to open ports for HTTP and HTTPS so you can access the base URL from a web browser:

    code language-bash
    firewall-cmd --permanent --add-service=http
    
    code language-bash
    firewall-cmd --permanent --add-service=https
    
    code language-bash
    firewall-cmd --reload
    

Verify the installation

Open a web browser and navigate to your site’s base URL to verify the installation.

recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995