Command-line upgrade

You can upgrade your Magento application from the command line if you installed the software by:

  • Downloading the metapackage using composer create-project.
  • Installing the compressed archive.

Do not use this method to upgrade if you cloned the Magento 2 GitHub repository. Instead, see Update the Magento application for upgrade instructions.

Prerequisites

Complete the following prerequisites to prepare your environment before starting the upgrade process:

Using the more manual process of upgrading via the command line allows you to track and control exactly what is being changed in the upgrade.

Manage packages

See the examples at the end of this section for help specifying different release levels. For example, minor release, quality patch, and security patch. Magento Commerce customers can access 2.3.x patches two weeks before the General Availability (GA) date. Pre-release packages are available through Composer only. You cannot find them on the Magento Portal or GitHub until GA. If you cannot find these packages in Composer, contact Magento Support.

  1. Backup the composer.json file.

    1
    
    cp composer.json composer.json.bak
    
  2. Add or remove specific packages based on your needs. For example, if you are upgrading from Magento Open Source to Magento Commerce, remove the Magento Open Source package.

    1
    
    composer remove magento/product-community-edition --no-update
    
  3. Indicate the Magento packages, both the edition (community or enterprise) and the version (2.3.3), that you want to upgrade to.

    Magento Open Source:

    1
    
    composer require magento/product-community-edition=2.3.3 --no-update
    

    Magento Commerce:

    1
    
    composer require magento/product-enterprise-edition=2.3.3 --no-update
    

    To see the full list of available 2.3 versions:

    Magento Open Source:

    1
    
    composer show magento/product-community-edition 2.3.* --all | grep -m 1 versions
    

    Magento Commerce:

    1
    
    composer show magento/product-enterprise-edition 2.3.* --all | grep -m 1 versions
    
  4. Specify additional packages.

    1
    
    composer require --dev allure-framework/allure-phpunit:~1.2.0 friendsofphp/php-cs-fixer:~2.14.0 lusitanian/oauth:~0.8.10 magento/magento-coding-standard:~3.0.0 magento/magento2-functional-testing-framework:2.4.5 pdepend/pdepend:2.5.2 phpmd/phpmd:@stable phpunit/phpunit:~6.5.0 sebastian/phpcpd:~3.0.0 squizlabs/php_codesniffer:~3.4.0 --sort-packages --no-update
    
  5. Remove unused packages.

    If you are upgrading from 2.2.x to 2.3.x, remove unused packages with the following command. It is not needed if you are upgrading from 2.3.x.

    1
    
    composer remove --dev sjparkinson/static-review fabpot/php-cs-fixer --no-update
    

Example - Minor release

Minor releases contain new features, quality fixes, and security fixes. Use Composer to specify a minor release. For example, to specify the Magento Commerce 2.3.0 metapackage:

1
composer require magento/product-community-edition=2.3.0 --no-update

Example - Quality patch

Quality patches primarily contain functional and security fixes. However, they can also sometimes contain new, backward-compatible features. Use Composer to download a quality patch. For example, to specify the Magento Commerce 2.3.3 metapackage:

1
composer require magento/product-community-edition=2.3.3 --no-update

Example - Security patch

Security patches contain security fixes only. They are designed to make the upgrade process faster and easier.

Security patches use the Composer naming convention 2.3.2-px. Use Composer to specify a patch. For example, to download the Magento Commerce 2.3.2-p1 metapackage:

1
composer require magento/product-community-edition=2.3.2-p1 --no-update

(Optional) Recreate the Magento updater

If the Magento updater is installed, remove and recreate it. It is located in the update/ directory.

  1. Backup the update/ directory.

  2. Create a Composer project.

    Magento Open Source version 2.3.3:

    1
    
     composer create-project --repository=https://repo.magento.com magento/project-community-edition=2.3.3 temp_dir --no-install
    

    Magento Commerce version 2.3.3:

    1
    
     composer create-project --repository=https://repo.magento.com magento/project-enterprise-edition=2.3.3 temp_dir --no-install
    

    If you need to use a repository that contains non-public packages, such as internal sandboxes, change the URL in --repository accordingly.

  3. Remove the old update/ directory and move temp_dir/update/ to the update/ directory:

    1
    
    rm -rf update
    
    1
    
    mv temp_dir/update .
    
    1
    
    rm -rf temp_dir
    

Update metadata

  1. Update the "name", "version", and "description" fields in the composer.json file as needed.

    Updating the metadata in composer.json file is entirely superficial, not functional.

  2. Apply updates.

    1
    
    composer update
    
  3. Clean the Magento cache.

    1
    
    bin/magento cache:clean
    

Clean up

Manually clear caches and generated content.

  1. Clear the var/ and generated/ subdirectories:

    1
    
    rm -rf var/cache/*
    
    1
    
    rm -rf var/page_cache/*
    
    1
    
    rm -rf generated/code/*
    

    If you use a cache storage other than the filesystem, such as Redis or Memcached, you must manually clear the cache there too.

  2. Update the database schema and data.

    1
    
    bin/magento setup:upgrade
    
  3. Disable maintenance mode.

    1
    
    bin/magento maintenance:disable
    
  4. (Optional) Restart Varnish.

    If you use Varnish for page caching, restart it:

    1
    
    service varnish restart
    

Check your work

Open your storefront URL in a web browser to check whether the upgrade was successful. If your upgrade was unsuccessful, your storefront will not load properly.

If the application fails with a We're sorry, an error has occurred while generating this email. error:

  1. Reset file system ownership and permissions as a user with root privileges.
  2. Clear the following directories:
    • var/cache/
    • var/page_cache/
    • generated/code/
  3. Check your storefront in your web browser again.

Alternatives

There are alternatives methods that automate parts of the upgrade process:

  1. Upgrade using the script (semi-automated process) Upgrading using the script process is a bit easier and less intensive if you have not made updates to values that the script affects. If you previously made updates, do not upgrade using the script. The script will override your updates.
  2. EXPERIMENTAL: Upgrade using the custom Composer plugin We are developing a custom Composer plugin that enhances the semi-automated upgrade process.

The upgrading scenario is the same for each of these options. Both use Composer and a command line interface.

All scenarios require that you comply with the Prerequisites.