• Skip to primary navigation
  • Skip to main content
Sal Ferrarello
  • About Sal Ferrarello
  • Speaking
  • Connect
    Twitter GitHub
You are here: Home / Dev Tips / WP CLI Local by Flywheel without SSH
WP-CLI and Local by Flywheel logos with the SSH logo crossed out

WP CLI Local by Flywheel without SSH

Last updated on April 27, 2020 by Sal Ferrarello

Note
Changes have been introduced in Local Lightning, the newest version of Local by Flywheel and this article has not yet been updated to address how to use WP CLI with this version..

I’ve become a big fan of Local by Flywheel for local WordPress development (i.e. running websites on my Mac). One thing I do find frustrating is the need to SSH into my Local by Flywheel website when I want to run a WP CLI command.

Thanks to some great work by Morgan Estes with his project BigWing/Local-WP-CLI, I learned I can run WP CLI commands from my Mac without SSHing into Local by Flywheel (I’ve not tried this on a Windows machine).

If you’re in a hurry to set this up, you can jump to the Quick Setup below.

Configure WP CLI to work without SSH

The key to making this work is adding two files wp-cli.local.yml and wp-cli.local.php.

Where to Add These Files

Both of these files go in the project root directory. By default the project root directory for a website called mywebsite, would be ~/Local Sites/mywebsite. Before adding any files, the contents of the project root directory should be three folders /app, /conf, and /logs. You two new files with be alongside these directories.

What Goes In These Files

wp-cli.local.yml

path: app/public
require:
  - wp-cli.local.php

wp-cli.local.php

The contents of wp-cli.local.php will vary for each Local by Flywheel website. The information you will need can be found in the Local by Flywheel dashboard for your site under the heading DATABASE.

Screenshot of Local by Flywheel Dashboard Database Settings

In my screenshot the relevant values are:

  • Remote Host: 192.168.94.100
  • Remote Port: 4067

Based on these values, we create the file wp-cli.local.php with the contents

<?php
define('DB_HOST', '192.168.94.100:4067');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');

// Only display fatal run-time errors.
// See http://php.net/manual/en/errorfunc.constants.php.
error_reporting(E_ERROR);

// Disable WordPress debug mode.
// See https://codex.wordpress.org/WP_DEBUG.
define('WP_DEBUG', false);

Confirm WP CLI Works without SSH

To confirm everything is setup correctly from the command line (on your Mac, without SSHing into Local by Flywheel) run:

$ wp option get siteurl

and if everything is working properly, you’ll get back the URL for your website.

Troubleshooting

My most common error at this point is forgetting to have the website running in the Local by Flywheel Dashboard. We can’t use WP CLI with the site, if the site is not running.

How Does this Work?

WP CLI checks for config files named wp-cli.local.yml or wp-cli.yml inside the current working directory (or upwards).
By adding our wp-cli.local.yml to the project root, any command run anywhere inside the project will use our wp-cli.local.yml configuration (WP CLI config documentation).

wp-cli.local.yml

We define the path to the WordPress install in relation to wp-cli.local.yml and we require the file wp-cli.local.php be run before any of the WordPress files.

wp-cli.local.php

We define the database connection information for connecting to the database from outside Local by Flywheel (this is different than the database credentials found in wp-config.php because wp-config.php connects to the database from inside Local by Flywheel). Since our database connection information is set before wp-config.php, our information is used. Since WordPress tries to set these constants after they are already set, PHP throws notices. To suppress these notices we set PHP to only display fatal run-time errors.

Other Methods to Setup

Quick Setup

Run this command from the the project root directory of the site.

$ curl -O https://raw.githubusercontent.com/salcode/ssh-into-local-by-flywheel/master/wpcli-lbf-setup && bash wpcli-lbf-setup && rm -rf ./wpcli-lbf-setup

Running the following at the command line will:

  • download a bash script to create these two files
  • run the bash script (you’ll be prompted for the Database host and Database port)
  • delete the bash script, leaving the two new files behind

Thanks to Justin Sternberg for sharing his similar quick setup in his Dot-Files.

SSH Into Local by Flywheel

While this article is about using WP CLI without SSHing into Local by Flywheel, sometimes you find yourself needing to SSH in for other reasons. I found being unable to directly SSH into a site from the command line frustrating (I wanted to avoid using the Local by Flywheel Dashboard every time I wanted to SSH in). To this end, I created a project on GitHub called SSH into Local By Flywheel. It describes how to create a .dockerid file in your project root directory with the Docker container name for that site. Once that file is in place you can use sshlbf to quickly SSH into Local by Flywheel.

As part of this project I’ve also added the command wpcli-lbf-setup, which is the installation script used in the Quick Setup. If you have this project installed you can use wpcli-lbf-setup even if you’re not connected to the Internet.

Sal Ferrarello
Sal Ferrarello (@salcode)
Sal is a PHP developer with a focus on the WordPress platform. He is a conference speaker with a background including Piano Player, Radio DJ, Magician/Juggler, Beach Photographer, and High School Math Teacher. Sal can be found professionally at WebDevStudios, where he works as a senior backend engineer.

Share this post:

TwitterFacebookLinkedInEmailReddit

Filed Under: Dev Tips, Programming, Solution Tagged With: ssh, WordPress, wp-cli

Reader Interactions

Comments

  1. Kevin says

    August 14, 2018 at 5:59 am

    Good Article! But there is a big problem:
    When I hit “wp option get siteurl” in console it works fine… but have you ever tried to hit ” wp db export ” ? It will refuse the connection: “mysqldump: Got error: 2013: Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 when trying to connect”

    Do you have any solution for that?

    Reply
    • Sal Ferrarello says

      August 14, 2018 at 12:20 pm

      Hi Kevin,

      Glad you’re finding this useful. I’m not sure about the problem you’re seeing, if I run

      wp db export

      it runs successfully and I get a file like local-2018-08-14-715f4c0.sql in my local directory.

      If I were troubleshooting the problem you described, as a next step I’d use the Local by Flywheel “Open Site SSH” and then try wp db export from there.

      Sorry I don’t have an answer. Good luck and if you get things sorted, I’d love to hear about how you got it to work.

      Reply
  2. Torin says

    January 2, 2019 at 7:49 pm

    That solved all my issues. Thank you!

    Reply
  3. Clifton says

    April 25, 2020 at 4:10 pm

    Do you have an update for this article for Local 5.2.8.
    Thanks

    [Note: Clifton included a video clip that further explained that using the new Local Lightning, there is no remote host nor remote port under the database settings.]

    Reply
    • Sal Ferrarello says

      April 27, 2020 at 6:42 am

      Thanks for the comment Clifton. I’ve not yet upgraded to Local Lightning, so I’m not familiar with what settings are needed there. At this point, I don’t have a timeline for making the update. If anyone else reading this has any resources to share, please feel free.

      I’ve also added a note to the top of the article, explaining that these steps do not apply for Local Lightning.

      Reply
  4. andre says

    June 25, 2020 at 5:34 am

    Cool, but I ran the terminal command and clicked through the database host and database port settings without checking them. Now I get a message that I have to check the database settings.

    How can I do that?

    Thanks!

    Reply

Leave a Reply Cancel reply

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

Copyright © 2021 · Bootstrap4 Genesis on Genesis Framework · WordPress · Log in