One of my old hosting setups is showing its age and becoming awkward to maintain. I have migrated as much as I could into my WPengine account, but a few websites still need to be migrated and I plan on hosting them with Docker containers. Ansible automation all the way.
With website hosting, there’s always some trickery involved in maintaining content. You should consider yourself lucky if you are doing it with source control solution like git – it really helps not only do things in an orderly manner but also scale them to larger team supporting website.
Even if you believe you’ll “just install this once” and then “mostly focus on content”, blogging software would have to be maintained – meaning there will be upgrade times and there will be rollback times. So source control is key to going through such transitions smoothly enough.
I decided to store these old websites in GitHub: it’s a convenient approach I’m increasingly reliant on, it scales well and it gives me versioned control of everything. But this time it’s also giving me a distribution method: instead of downloading code onto my laptop and then somehow transferring latest copy to the server, I can just checkout GitHub repo onto the server directly.
Ansible has a great little module for doing this: git module. It provides much more flexibility that I need right now, all in an intrinsically Ansible easy-to-read way.
How to Pull a Git Repo in Ansible
Here are the parameters and how they work in this example:
repo is the URL of the repository. In my case it’s a private repo I access using SSH – and the beauty if it is Ansible simply passes my SSH key when pulling this repo down. It’s possible to have a deployment SSH keypair, and to refer to SSH key within Ansible code – I just don’t know enough about this approach to decide if it’s better than passing my SSH key with SSH agent dest means the directory where you want your git repo downloaded into accept_hostkey helps with avoiding Ansible lock-outs when connecting to new SSH hosts – it will simply accept such key, and you normally would. USE WITH CAUTION if you’re accessing lesser known third parties for git hosting! force confirms that if there are some local changes in destination directory, they will get overwritten – because really you should not be making changes directly on the code or hosting server past this stage, your git repo will be the only place to be updating.
How To Pull Multiple Repos in Same Contruct Previous example is very easy to convert into a multi-repo arrangement.
First, I define a number of hosts as Ansible variables, like this:
name: Deploy website code from GitHub repositories git: repo: “” version: master dest: /storage/docker/www/ accept_hostkey: yes force: yes with_items:
Thanks for stopping by and chat later!
See Also Ansible GitHub pages with Jekyll GitHub private repos are free! Getting started with Ansible Docker module in Ansible