End to End Guide to Deploy WordPress UltraStack Using Ansible and Git

The InMotion WordPress UltraStack is a curated set of services and configurations developed to provide what we believe is the best way to run a WordPress stack. We took the standard LAMP stack and extended it to also leverage Nginx as a caching layer and then used Redis to serve as an object cache.

Previously, this was only offered through our WordPress hosting plans. However, we decided to make our UltraStack configurations open-source. We also built Ansible Roles (available on Galaxy) that will provision it all for you. We also added some additional features as well, such as automatically obtaining and installing SSL certificates from Lets Encrypt.

In this tutorial, you’ll deploy WordPress UltraStack to your target Linux server using Git to clone the playbook down, Ansible Galaxy to download the roles, and Ansible to deploy the playbook. The resulting installation will give you what we believe to be the best possible WordPress installation. Follow the guide below in order to learn how to deploy WordPress UltraStack using Ansible and Git.


  • A CentOS 7/8, Debian 8/9/10, or Ubuntu 16.04/18.04 server with at least 1 CPU Core, and 2GB of Ram
  • A Control Node with Python and Git installed which can be a local machine or our InMotion Ansible Control Node

Our Ansible Control Node comes free with our Cloud Server Hosting plans.

Step 1 – Installing Ansible

In this step, you’ll install Ansible for your current user via pip, the Python package manager. If you do not have pip installed, you will need to run the following commands below to install it:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py --user

Once pip is installed or if you already have pip, run the following to install Ansible. Otherwise, see other methods to install Ansible manually.

$ pip install --user ansible

Step 2 – Use Git to Clone UltraStack Playbook

Once Ansible is installed you can use Git to clone the InMotion WordPress UltraStack Playbook by running the following command below. If you do not have Git installed, you can follow official Git instructions to install it.

$ git clone \

Then move into the directory by:

$ cd wordpress-ultrastack-ansible

Step 3 – Use Ansible Galaxy to Install the Playbook Roles

Now that we have the playbook cloned, you will need to install all the role dependencies using Ansible Galaxy via the commands below. Learn more about Ansible Galaxy.

$ ansible-galaxy role install -r playbook-requirements.yml
$ ansible-galaxy collection install -r playbook-requirements.yml

To verify that all the roles are installed you can run the following:

$ ansible-galaxy list  
# /home/user/.ansible/roles  
- inmotionhosting.mysql, 1.0.1  
- inmotionhosting.nginx_proxy, 1.0.1  
- inmotionhosting.redis, 1.0.1  
- inmotionhosting.php_fpm, 1.0.1  
- inmotionhosting.wordpress_ultrastack, 1.0.1  
- inmotionhosting.apache, 1.0.1  
# /etc/ansible/roles

Step 4 – Create your Inventory File

The WordPress UltraStack playbook comes with a sample inventory file that you can use. You can learn more about how to create Ansible Inventory files. First, you will want to copy the inventory file by running:

$ cp inventory.sample.yml inventory.yml

Then, edit your inventory.yml file to look like the following:

NOTE: To reduce space, the file comments have been removed in the example below.

    use_ultrastack: true
    use_letsencrypt: false
      system_user: "wordpress"
      site_domain: "domain.tld"
      site_email: "[email protected]"
      site_user: "example_username"
      site_pass: "example_password"

You will want to change these items explained below:

  • your_domain.com – This should be the server that you want to target for the installation, this can be a domain or an IP address.
  • system_user – Linux system user that the WordPress installation will be owned by and created under this user’s document root directory.
  • system_domain – The domain associated with the WordPress installation. Simply use the domain name itself without defining a protocol or trailing ‘/’ characters.
  • site_email – The email address of the WordPress administrator.
  • site_user – The username of the WordPress administrator. It is very important to change this variable from the default.
  • site_pass – The password of the WordPress administrator. It is also very important to change this variable from the default.

Step 5 – Deploy WordPress Using Ansible

Now that we have everything sorted away with the playbook, we can finally deploy this on your target server. To do so, use the ansible-playbook command like below:

$ ansible-playbook -i inventory.yml site.deploy.yml

Depending on the machine, this can take a few minutes to deploy.

With that you have the InMotion WordPress UltraStack installed on your server. To start using it, simply go to https://your_domain.com/wp-admin. There are a few options available to configure your WordPress UltraStack installation and for more information on what those customizations look like, you can view our sample inventory file on GitHub.

For more tutorials using Ansible, check out our Ansible Education Channel.

John-Paul Briones Content Writer II

John-Paul is an Electronics Engineer that spent most of his career in IT. He has been a Technical Writer for InMotion since 2013.

More Articles by John-Paul

Was this article helpful? Let us know!