Automation Scripts for WordPress — Part 1 EasyEngine

By Jeff Cleverley, Alibaba Cloud Tech Share Author. Tech Share is Alibaba Cloud’s incentive program to encourage the sharing of technical knowledge and best practices within the cloud community.

In previous tutorials, I have taken us through the process of installing a highly performant LEMP stack on a new Alibaba Cloud Elastic Compute Service (ECS) instance for the purposes of running a WordPress web application. It is important to have an understanding of the components involved in the stack, and installing each component yourself gives you maximum flexibility and provides the most transparent configurations. There are however several open source, command line based, automation tools that can speed up this process, while still providing excellent configuration options in an easy to use process.

In these articles, I will look at two of the most popular options available for this task in the WordPress ecosystem, EasyEngine and Webinoly. I will create test sites with both as a comparison, and also refer back to the previous step by step guide.

EasyEngine

EasyEngine is the most well established of these tools in the WordPress ecosystem, it was created and is maintained by rtCamp solutions, the author of the Nginx Helper Plugin used for FastCGI cache management in my other tutorials. As their website explains, the easy part is installing EasyEngine and WordPress, the hard part is gaining enough traffic to crash their LEMP stack.

Components and options

EasyEngine installs a complete LEMP stack, including Nginx, MySQL, PHP7, but also Postfix. The addition of Postfix for email is a great benefit, meaning any WordPress site created on your VPS will already have transactional email capability and not require an additional solution.

In total EasyEngine has 15 base configurations to automate the creation of different WordPress websites, in addition to other tools. It can also be used to install just a base LEMP stack if all you are interested in is server stack management. Multisite installations is also another strength of EasyEngine, it can be configured to automate the creation of a multisite WordPress network based on either subdirectories or subdomains.

WPCLI — the WordPress command line interface is also installed and configured as a default component in the EasyEngine stack, which I think is very useful. In total EasyEngine has 15 base configurations to automate the creation of different WordPress website, in addition to other tools. It can also be used to install just a base LEMP stack if all you are interested in is server stack management.

In today’s tutorial we will use EasyEngine to automate the creation of a WordPress site on a LEMP stack that is configured to use FastCGI static caching and Memcached Object/DB caching.

Installation Overview

This guide assumes you already have your Alibaba Cloud Elastic Compute Service (ECS) instance already created and have SSH access. EasyEngine will work on Ubuntu 12.04, 14.04 and 16.04, and Debian 7 and 8.

For this article, I created an instance in the US East zone. All commands in this tutorial are issued as a superuser with root permissions using the sudo command. The screenshots were taken whilst operating as a root user directly (not recommended) so have the sudo command omitted.

Step 1. Open the Required Ports

EasyEngine has some port requirements for it to work properly, these are detailed on their installation page and include:

  • Port 22/TCP (Inbound/Outbound) — Standard SSH port
  • Port 80/TCP (Inbound/Outbound) — Standard HTTP port
  • Port 443/TCP (Inbound/Outbound) — Standard HTTPS port
  • Port 22222/TCP (Inbound only) — EasyEngine admin tools port
  • Port 11371/TCP (Outbound only) — To connect to GPG Key Server

However, if you also want to use transactional emails you will also need to open:

In your Alibaba Cloud ECS Management Console, first click Security Groups from the left horizontal navigation:

Image for post
Image for post

From your Security Group Clock to Add Security Group Rules:

Image for post
Image for post

For each port that isn’t configured you will need to include the port range and authorization object. For port range the input is in the following format:

So opening a single port will be 22222/22222.

Authorization object refers to the the IP ranges that are allowed for each port. The following format will allow connections from all IP addresses:

In most cases your security group rules will already include TCP Ports 22, 80 and 443 already configured. You will only need to add the extra EasyEngine specific ports.

Open ports 22222/TCP (Inbound) and 11371/TCP (Outbound) in your Security Group Rules.

Step 2. Configure Your Domain and DNS

Go to Alibaba Cloud DNS by clicking on the menu option in the horizontal left navigation bar, and then click the blue button in the top right to add your domain:

Image for post
Image for post

Once your domain has been added, you will need to configure its DNS settings. Click on the blue ‘configure’ link at the right of the row. We will only be adding the DNS settings required for a basic set up to serve a domain both with and without the www prefix. These include:

  • ‘A’ record with the host ‘@’ and the value of your servers public IP address
Image for post
Image for post
  • ‘CNAME’ record with the host ‘www’ and the value of the domain name
Image for post
Image for post

You will also need to configure your nameserver settings at your domain registrar to use the Alibaba Cloud DNS servers.

The Alibaba DNS server addresses will be provided for you on this page, record them. Visit your domain registrar, and replace their nameservers with the Alibaba Cloud provided settings at your domain registrars DNS settings page. You can usually find this referred to as Custom Nameserver in the applicable settings.

Image for post
Image for post

If you have registered your domain with Alibaba, then this is not required.

Step 3. Install EasyEngine

Installing EasyEngine is…. well… Easy. First connect to your instance by SSH:

Then enter the following command to install EasyEngine:

During the installation procedure you will be asked to enter your name and email address. Once the installation is complete your terminal should look like the following:

Image for post
Image for post

If, during installation, you receive failed installations due to problems with package installations from the Aliyun repositories, then run the installation command again. This usually fixes the issue and EasyEngine installs successfully.

Once this is completed you will have a LEMP stack on your server.

Step 4. Install your WordPress site

Again, using the available EasyEngine commands it is very easy to create a variety of WordPress sites with different configurations. You can find the full list of commands for site creation here.

We are going to create a WordPress site that uses Nginx FastCGI static caching, alongside Memcached for Object and Database caching, and PHP7. To do that is as easy as entering the following command as root:

However, remember earlier I mentioned that EasyEngine also installs WP-CLI? That means we can also use additional WP-CLI commands to automate the creation of the site and speed up the process. These include commands for adding your user, user password and email address.

Let’s utilize this method and enter a command as follows:

You will receive a notification informing you that PHP7 is an experimental feature that requires a positive response, enter yes when prompted. Once the process is completed your terminal will look like this:

Image for post
Image for post

Since WP-CLI is so powerful, we can use it to immediately create alterations on the site. To update your site name and description you can use the following command:

Since we are using Nginx FastCGI caching, these changes won’t be immediately viewable until we flush the cache. To do that cd into your /var/run directory and delete the nginx-cache then restart Nginx with the following commands:

If you have followed along, your terminal will now look something like this:

Image for post
Image for post

Now you can visit your site at your domain name, which in my cas is an-example-domain.com.

Image for post
Image for post

Step 5. Add Let’s Encrypt SSL for HTTPS

EasyEngine also includes commands for the installation of a Let’s Encrypt SSL certificate for HTTPS connections. This command can either be issued during site creation, or with the update command after site creation as follows:

However, as you can see in the following screenshot, I had problems with their implementation. My site domains are pointed at the server correctly with all the DNS configuration needed, but their implementation of Let’s Encrypt certbot repeatedly failed to issue my certificates.

So let’s install Certbot ourselves following the same process as in a previous tutorial.

First we need to install the software-properties-common package so that we may then install additional repositories to the package manager. Issue this command:

Once that is completed, add the Let’s Encrypt package repository:

Then update your package list before installing cerbot:

Since EasyEngine has already configured your Nginx server configuration, all we need to do now is command Certbot to issue your SSL certificate for your domains, including your www domain. Do that with the following command:

Certbot will automate the process of issuing your SSL and updating your Nginx configuration with the certificates locations. It will prompt you to accept its Terms of Service, provide your email address, and ask if you would be willing to share said email address with the Electronic Frontier Foundation.

It will finally require you to select whether or not to redirect HTTP traffic to HTTPS. I suggest you choose to do so. Once the certificate has been successfully installed your terminal should look like this:

Image for post
Image for post

Now you can visit your site via HTTPS and see the “security lock” icon in the URL bar:

Image for post
Image for post

The current SSL certificate will not include strong encryption for the initial handshake. To improve this you should strengthen your Diffie-Hellman parameters. You can complete this additional step by completing Step 10 in this tutorial.

You will also need to issue a cron job to ensure the automatic renewal of your SSL certificate, following the instructions in Step 11 of this tutorial to do that.

Step 6. Configure Server Caching Plugins

When you choose to install a site with EasyEngine using the Nginx caching options, it automates the configuration of Nginx FastCGI caching and installs a Memcached server for object caching.

It also installs the plugins required for your WordPress site to utilize these server caching functions. NGINX Helper plugin for Nginx Caching, and W3 Total Cache for Memcached DB, Object caching, and Browser Caching.

Configure Memcached and Browser Caching with W3TC

In your WordPress admin, visit the ‘Performance’ setting panel, and the ‘General settings’ sub menu from your settings navigation:

Image for post
Image for post

As you can see above, you need to enable Database cache, Object cache, and Browser cache. You also need to select ‘Memcached’ from the Database cache method and Object cache method dropdown selectors.

Configure Nginx FastCGI Cache Purging with NGINX Helper

Now visit the Nginx Helper settings, these can be found in the main settings menu:

Image for post
Image for post

As you can see above, you need to select Nginx FastCgi cache as the Caching method, and ‘Use a Get Request’ as the purge method. You may also alter the other purge conditions as best suits your use needs.

To check that Nginx caching is working you should log out and visit your site. If you inspect the page load using your browsers ‘Network’ tool, you should see an additional Response Header:

Image for post
Image for post

If Nginx caching is working the response will be either:

  • HIT — The page was returned from cached.
  • MISS — The page wasn’t returned from cache, but if you reload you should get a HIT as this caches the page.
  • BYPASS — The page is cached, but wasn’t returned from cache. (usually the case if you are logged in)

Other Useful Commands

As previously mentioned, EasyEngine includes a variety of additional tools and commands to help manage your LEMP stack and WordPress site efficiently and effectively. Please refer to their site for the full rundown of commands, but I would like to introduce some of the most useful ones here quickly.

Logging

To monitor logs for your site EasyEngine uses the following command:

This command can be implemented with different additional commands for different site specific logs.

To view Nginx logs:

To view PHP logs:

To view access logs:

To view WordPress debug logs:

You can monitor PHP-FPM and MySQL logs using:

And may reset logs using the following command:

Again this can be combined with previously mentioned commands to target specific logs, for example to reset the Nginx log for a specific site we would use:

Debugging

EasyEngine has commands for both server level debugging and site level debugging.
Debugging Server Parameters Globally (for all sites)

Use the following command for server level debugging:

With options including:

Debugging Sites

Use the following command for site level debugging:

The options available for site level debugging are:

Summary

As we can see, EasyEngine offers a very mature and effective automation solution for setting up and managing your LEMP stack and WordPress sites from the terminal. It provides everything you need from caching to email, and has a large support forum and vibrant community.

Even given the minor issues with installing their SSL solution, it can be seen that EasyEngine can be used to quickly set up and manage your sites. The inclusion of WP-CLI alongside their Logging and Debugging commands provide additional benefits that make up for this in no small part.

In the next article of this tutorial series, we will be looking at Webinoly.

Reference:

https://www.alibabacloud.com/blog/automation-scripts-for-wordpress---part-1-easyengine_593909?spm=a2c41.11905268.0.0

Written by

Follow me to keep abreast with the latest technology news, industry insights, and developer trends.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store