I have used a lot of WordPress Deploy systems and tried a lot of ways do deploying WordPress. Some things I tried were not so smart, some of them outright stupid. There is really nothing worse than waiting 15 min for your WordPress site to deploy only to see that you missed a 10px margin. Puff 15 more minutes gone. I have been there. Or you are about to show a site to a client when you realize this tiny mistake that you have fixed locally but you didn’t deploy yet. Facepalm.
Before we talk about possible solutions, let us talk about what an optimal (magical) WordPress deployment system looks like. Our magic system should focus on:
- Time – Deploy almost immediately
- Ease of use – Be a single command
- Rollback – Should be reversible
There are definitely other criteria like time your production site is down or security or price and many more, but in my eyes Time, Ease of use and Rollback ability are the most important ones to me.
WordPress Deploy – What options do you have?
Old School WordPress Deploy – FTP and MYSQL export
The traditional way of deploying a WordPress site is using plain simple old school FTP and MYSQL. I will save myself beating an old horse to death and point you to the best resource out there:
- Works on all hostings
- Very Time consuming
- Many errors possible
- Rollback? What is that…
Plugin WordPress Deploy
A bit more advanced, but still super time consuming. The good part here is that it takes a way a lot of the error source from the manual old school WordPress deployment method plus on every time you make the manual transfer, you can keep the downloaded package and keep it as backup. This was my preferred solution for a long time.
The plugin I have used many times is: BackupBuddy
There are a ton of plugins that do this, to find other plugins to deploy use any of these keywords: clone, transfer, deploy, backup, migrate
- Works on all hostings
- Manual errors almost eliminated
- Save copy as Backup
- Time consuming
WordPress Manager Plugin Deploy
Another option to deploy your site is to use one of the many WordPress Managers out there like ManageWP, MainWP or InifiniteWP. There are many more out there, all of which I have only started to test yet, for a better overview, check out:
Ps, one I will investigate soon is WordShell. A bit geeky, but right down my ally.
=== Update 27 Dec 2014
I did buy and try WordShell. I did really like their patch feature, meaning if you change/hack a plugin (which you shouldn’t), it will try and add your changes into the next version.
I had quite a hard time to get it to run the first time. Rollback did not work for me and some sites I could not setup. This wouldn’t have been a problem except that support was not responding after answering twice.
Summary: Stay away from it.
- Offer backup
- Extra worker plugins
- Connect to localhost isn’t easy
- Work with mouse from dashboard
Version Control Deploy
Now we start talking. I hope you are using some version control (if not, check out this video series: Git Introduction). This is really handy to keep your files in sync and also deploying your files. You are left alone though when it comes to your database. Your options for the database are
- doing a manual deploy (come on, I was expecting more from you)
- you could use a tool like WP-Migrate-DB (or the pro version https://deliciousbrains.com/wp-migrate-db-pro/) by @bradt
- you can write a deploy script for your DB (if you are doing this, you may as well write a deploy script for everything)
Another plus of this method could be that you are on a host that supports and welcomes version control deployment, like WPEngine or SiteGround the big downside though is that you must have SSH access which is not always the case. There seems to be one solution though to deploy with GIT via FTP: GIT-FTP
- Fast for files, slow for db
- SSH access
- DB needs special treatment
- Learning curve
Deployment Frameworks and Scripts
We got there. All of these frameworks and scripts are not specifially tailored to WordPress. They all share one common thing, the ability to execute commands on a remote server. For this you need SSH and the ability to connect to your remote host via SSH. There are solutions with less flexibility like:
- Grunt and WordPress Deploy
or you can tackle full blown deployment frameworks like
- Capistrano. Check out WP-Stack by @markjaquith
- Fabric. This seems like a good start: WP-Project-Tools
- Mina, with an Intro to WordPress Deployment
- Very fast
- Easy to use (once setup)
- rollbacks (not for Grunt using WordPress Deploy)
- Learning curve to setup
WordPress Deployment without SSH
I want to touch on the options you have if you dont have SSH. If you need to deploy to a host without SSH, you can use any of the following methods
- Old School Deployment (No risk no fun…)
- WordPress Plugin Deployment
- Deployment app like FTPloy
- Command line GIT-FTP or Wordmove (or possibly WordShell)
- ???? (what do you use that isn’t listed?)
What I currently use
Right now I am currently using Grunt and WordPress Deploy for all my deploying. The main disadvantage is that I dont have a rollback option. The good news is that on every deploy I get a backup of my db and of course I am using GIT to version control my code. For any hosting without SSH I still use good old BackupBuddy.
In the future I plan to checkout WordShell and want to invest some of my time into Fabric since I really like Python. Far down the road it would be really cool to have a solution that would do incremental db deployments. I feel like this should be possible seeing solutions from: http://blogvault.net/incremental-backups/, https://vaultpress.com and https://wpstagecoach.com.
You made it until the end, you must be more geek than I am Do you have a good method for deploying WordPress? If you have a good solution, pls share it in the comments.
Are you interested in WordPress Front End Development, check out this overview of WordPress Front End Developer Tools you could potential be using.