My job for more than the last decade has been making websites - mostly for New Zealand Government departments. And I'm always working on ways to make that job easier. Or better.
A number of Government website build projects have a lot of requirements in common. For unfortunate reasons, the final phases, the sign-off, the release and roll-out, seems to be one of the most painful steps. A large part of this is because we have very little consistency in hosting infrastructures between departments. Security, networking, policies and infrastructure seems to be made up from scratch each time. Always with expensive road-bumps because the server environment was unexpectedly different from the one before. This can happen even within the same department.
If only we had a more consistent process in place for hosting and deploying the small-to-mid range websites - those that have so much in common and whose expectations are known - then hundreds of hours could be saved.
I want to introduce and endorse one of the best ways of doing that - Aegir.
Drupal Aegir Multisite management
In the Drupal CMS community, there is strong support for a deployment tool and methodology named “Aegir”. This has been built to serve the needs of large development companies and clients, and provides a central point to manage any number of websites on any number of servers. Deployed sites can also be managed directly as usual, and with care the management of these sites can also be shared between different 'hostmaster' tools (as a central Aegir management site is called) Best of all, it layers on top of existing Drupal development processes (it does not 'own' sites, just talks to them) so adoption of this tool can be incremental, not all-in-one.
It is of course fully open-source, extensible with any other Drupal CMS modules, and customizable.
Features of Aegir
- Good front-end, fully scriptable back-end – As well as a management UI that supports layered permissions and user control, all actions can also be automated through straightforward scripts.
- Fully automated site provisioning – users can make a new site directly through the UI.
- Pre-made site recipes – Install profiles are used to kick-start a 'type' of site, with a number of chosen features in place, which is then customizable.
- Automated deployments – Database backups, connections to remote hosting targets, full site replication are done through the admin interface. This can put some of the release procedure back in the hands of site clients instead of working though hassles and confusion with project managers, sysadmins and developers.
- Good support for upgrades – Module updates, and even CMS version upgrades can be trialled through the Aegir management console. This is performed with full rollback, and can ease a lot of the upgrade pain – especially on sites that followed best practices by NOT using branched or custom code.
- Good community support for additional integration. DNS tools, monitoring tools, failover, throttling etc. Development is active and it is being scaled to the requirements of huge enterprises with many different workflow requirements.
At all times, the deployed individual sites are self-contained, and can be exported from an Aegir environment to be hosted on any other suitable technology stack. Also, existing Drupal sites of any version can be imported to or registered with the Aegir management console – with a certain amount of care and dependency on how tightly-bound the old site was to its infrastructure. This eliminates any vendor lock-in, and also can allow the network(s) to expand to other hosting services as needed.
It can be adapted to provide both software-as-a-service for clients, a developer tool for staging and testing, and an administrator tool for deployment. Additional client nodes (Databases and web hosts) can be added and shared amongst suppliers - in a much more consistent way than ever before possible.
In some ways this system is similar to 'puppet' or other multi-machine management applications used by sysadmins to manage server OS and software.
Aegir is a tool I have started using just to manage provisioning of our Development environments and prototypes. I've not been able to roll it out onto our full enterprise-level Government sites (yet) though, mostly because the projects started last year didn't really fit. I'm pushing for this in future projects though, for more commodity-level sites, and I think that getting this approach out there and in use would really help smooth out the current release processes that can slow us down.