fbpx

Magento 2 / Web Apps

Magento 2 Command-Line Interface

by , , revisited on


We have by far the largest RPM repository with NGINX module packages and VMODs for Varnish. If you want to install NGINX, Varnish, and lots of useful performance/security software with smooth yum upgrades for production use, this is the repository for you.
Active subscription is required.

This is a stub article at present and it will be expanded with new commands in the future.

Whether you are a seasoned PHP programmer or just a newbie who is trying to get your hands on Magento 2 – you must learn how to use the command line with Magento. Some tasks are simply most efficient to be run on the command line, and some tasks can only be run via the command line.

There are primarily two command-line utilities for Magento 2. Those are magento (located in bin/ directory of your Magento website) and n98-magerun2.

The magento command-line program allows you to accomplish most of the day-to-day tasks, whereas the n98-magerun2 has some extra useful commands available. But let’s start with the basics.

Connect to your Magento website via SSH

In the proper setup, you’d be using a special SSH user for your Magento website. Suppose that you have the de-facto standard stack for Magento 2, which is: Varnish, NGINX and PHP-FPM. In this kind of setup:

  • Varnish worker process runs under varnish user
  • NGINX worker process(es) run under nginx user
  • PHP-FPM site pool runs under magento (or another arbitrary name) user. This is the user you should SSH to!

Connecting via SSH using the same user as what PHP-FPM ensures there are no problems with chmod whatsoever. The PHP-FPM runs under that user, and you upload/change/adjust files using that same user. Thus, there is never a conflict between who has the rights to which directory or a file.

So an obvious rule comes from it: never run any Magento-related commands using the root user or anything other than magento user! Otherwise, they will likely cause some files to change ownership to root and thus break PHP-FPM from being able to access those files.

The bin/magento CLI utility

The standard command-line utility shipped with Magento 2 is the bin/magento program.

To use it, simply SSH to your server under the magento user and run it inside your Magento website directory:

bin/magento

This should give you a long list of available commands. In case you receive the error bash: bin/magento: Permission denied, you need to make it executable first:

chmod +x bin/magento

An easy shortcut

Now, you can alter your user’s PATH in order to be able to just type magento. Edit ~/.bash_profile, and add the following at the bottom. Ensure to adjust the path to your Magento’s bin directory:

PATH=$PATH:/path/to/your/site/bin
export PATH

After you log in to your server again, you can just type magento. You still have to cd to Magento directory though.

Useful magento commands

Regenerate secure admin URI

As a security measure, you may want to regularly change the admin URI:

magento setup:config:set --backend-frontname=backend_$(pwgen -1 --secure)

Get the new/current admin URI

magento info:adminuri

Create Magento administrator user

If you are locked out of administration area, or just want to automated Magento setup process, you can create administrator user from the command line:

magento admin:user:create --admin-user="Username" \
  --admin-password="secret" \
  --admin-email="user@example.com" \
  --admin-firstname="John" \
  --admin-lastname="Smith"

Flush entire contents of cache storage backends

magento cache:flush

magento setup:config:set --http-cache-hosts=127.0.0.1

Setup IP addresses of Varnish instances that serve your Magento 2 website. When your catalog changes, Magento 2 will send PURGE requests to those Varnish instances. You can specify multiple IP addresses delimited by comma, like so:

magento setup:config:set --http-cache-hosts=127.0.0.1,1.1.1.1,2.2.2.2

Plugin specific commands

It is important to know, that third-party Magento 2 plugins may add additional commands to magento utility. So, for example, if you use the excellent Mirasvit cache warmer plugin, you can interactively invoke the warmer with:

magento mirasvit:cache-warmer:crawl

The n98-magerun2 CLI utility

The n98-magerun2 command-line utility adds a whole lot of commands you can run in your terminal, to manage your Magento instance. n98-magerun2 extends the magento utility described above.

So n98-magerun2 admin:user:create ... will work equally to magento admin:user:create ....

You can stick to using only n98-magerun2 because it will expose all the commands that magento has. Just more!

But let’s see how to install it first.

Install n98-magerun2 in CentOS/RHEL 6, 7 or 8

We have packaged n98-magerun2 for CentOS/RHEL, so it’s easy to install and update via yum.

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install n98-magerun2

You can optionally install bash completions package that allows to use TAB for autocompletion of n98-magerun2 commands:

yum -y install n98-magerun2-completion-bash

Install n98-magerun2 in other OS-es (generic)

curl -O https://files.magerun.net/n98-magerun2.phar
chmod +x ./n98-magerun2.phar
mv ./n98-magerun2.phar /usr/local/bin/n98-magerun2

Useful n98-magerun2 commands

n98-magerun2 sys:check

This is quite good to run once right after you install your Magento 2 instance. It will do some sanity checks of your environment and show you whether you’re missing on some PHP extensions or have filesystem ownership problems.

n98-magerun2 sys:cron:history

In doubt whether a particular cron task was run? This command shows the list of recently ran Magento cron tasks.

n98-magerun2 sys:cron:run <task name>

Fire a cron job task now, e.g. n98-magerun2 sys:cron:run newsletter_send_all. Especially useful when you want to run something now, as opposed to waiting until the cron service runs it.

Extra modules for n98-magerun2

You can easily extend n98-magerun2 with an even larger number of interesting commands. The additional commands can be installed as n98-magerun2 modules.

GetPageSpeed module for n98-magerun2

If you have used CentOS/RHEL package for n98-magerun2, you can install our module for it using:

yum install n98-magerun2-module-getpagespeed
n98-magerun2 varnish:tuned

This command allows getting optimal Varnish parameters, based on your Magento database. The output tells you the best values for efficient and failsafe Varnish setup. Sample output:

Largest product category has this number of products: 63
+-------------------+----------------+-------------------+
| http_resp_hdr_len | http_resp_size | workspace_backend |
+-------------------+----------------+-------------------+
| 8192              | 32768          | 65536             |
+-------------------+----------------+-------------------+

Other commands are useful for quicker generation of static assets and code compilation, to reduce downtime during deployment.

There’s always more. Check out clearmage2 for the CLI utility for Magento 2 designed specifically for deploying code changes with virtually no downtime.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.