Click here for the basic version
This Ansible Playbook is designed to setup a Mercury-Like environment on a Production server without the configuration hassle. This playbook was forked from WPEngine's Mercury Vagrant. It includes the ability to install multiple hostnames and installs of WordPress on one server super easily.
Note: Remember not to run weird scripts on your server as root without reviewing them first. Please review this playbook to ensure I'm not installing malicious software.
This Playbook will setup:
- Percona DB (MySQL) (Looking for MariaDB? Try this)
- HHVM (Default PHP Parser)
- PHP-FPM (Backup PHP Parser)
- Nginx
- Varnish (Running by default)
- Memcached and APC
- Clean WordPress Install (Latest Version)
- WP-CLI
- SSH onto a newly created server
1.5. Add necessary Apt package (if not already installed) with
sudo apt-get install software-properties-common
- Add Ansible with
sudo add-apt-repository ppa:ansible/ansible
- Update Apt with
sudo apt-get update && sudo apt-get upgrade
- Install Git and Ansible with
sudo apt-get install ansible git
- Clone this repository with
git clone https://github.com/zach-adams/hgv-deploy-full/
- Move into
hgv-deploy-full
- Edit the
hosts
file and changeyourhostname.com
to your host name. If you have more than one website that you want to install on this server add each on a new line. - Edit the name of
yourhostname.com
file in thehost_vars
folder to your hostname. If you have more than one website that you want to install on this server copy the current one and name it the hostname of the website. - Change your sites specific information including passwords inside the hostname file inside the
host_vars
directory - Run Ansible with
sudo ansible-playbook -i hosts playbook.yml -c local
. If you have any errors please open a new issue in this repository. - Remove the cloned git directory from your server with
rm -rf hgv-deploy-full/
- Run
/usr/bin/mysql_secure_installation
to install MySQL and secure it. Your root password will be blank by default - Restart Varnish and Nginx with:
sudo service varnish restart && sudo service nginx restart
- You're good to go! A new WordPress install running HHVM and Varnish should be waiting for you at your hostname/s!
This only works on sites that were installed using the method above. Always backup your server before running code that could break it.
- Backup your server
- Follow steps 1-6 above
- When you come to your
hosts
file follow the same steps however do not include any previous installations of WordPress or hostnames, only list the new ones you want. - Likewise with your
host_var
folder - Follow steps 9-12 and if you run into any issues or errors post them in this repository!
If you are having issues making changes or having issues with the backend while using Varnish, you can turn it off and just use Nginx while maintaining good performance. Here's how you can do that:
- Open each of the Nginx configurations of the sites installed on your server with
sudo nano /etc/nginx/sites-available/your-hostname.com
- Change
listen = 8080;
tolisten = 80;
- Make sure you do this to all sites installed on your server
- Stop Varnish and Restart Nginx with
sudo service varnish stop && sudo service nginx restart
- You should be good to go! If you do not have a caching plugin installed I would highly recommend one.
Your Nginx configuration should automatically facilitate switching to PHP-FPM if there's an issue with HHVM, however if you want to switch back manually you can do so like this:
- Open your Nginx configuration with
vim|emacs|nano /etc/nginx/sites-available/( Your Hostname )
- Find the following section towards the bottom:
location ~ \.php$ {
proxy_intercept_errors on;
error_page 500 501 502 503 = @fallback;
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass hhvm;
}
- Change
fastcgi_pass hhvm;
tofastcgi_pass php;
- Restart Nginx with
sudo service nginx restart
- You should now be running PHP-FPM! Check to make sure using
phpinfo();
Please report any issues through GitHub or email me at [email protected] and I'll do my best to get back to you!