Colophon for GOV.UK at launch
A large but not exhaustive list of the key components, tools and services that have gone into the construction of GOV.UK. The tools we use will change and evolve over time so this list represents the state of things on October 17th 2012 when GOV.UK takes over from Directgov and Businesslink. We prepared similar lists for the alpha of GOV.UK and for the beta and hope to produce similar documents at key stages of the site’s evolution.
Frontend:
- HTML/CSS/JS - using HTML5 where appropriate, with a heavy focus on accessibility, and validating where we can
- We use jquery as our primary javascript library
- Video playback with the Nomensa Accessible Media Player
- Backend admin systems make use of Twitter Bootstrap
- We use SCSS, as seen in our frontend toolkit
- We’ve worked with A2-Type for font production.
The core of the servers:
- We’re making use of Infrastructure As A Service from Skyscape
- We use Akamai as our Content Delivery Network
- Our servers are running Ubuntu GNU/Linux 10.04, we’re hoping to upgrade to 12.04 soon.
- Servers are managed with Puppet, using PuppetDB
- Web serving is handled by nginx, proxying to unicorn for our ruby applications. We’re also using gunicorn to run some supporting services. One of the team wrote Unicorn Herder to make Unicorn play nicely with upstart.
- We load balance internally with haproxy and cache requests using Varnish
Redirection:
- nginx deserves an extra mention as it’s letting us do all our redirection
- we’re using perl to manage and test our redirections
- there’s some php to add useful links to the “gone” pages where DirectGov and Businesslink content has been retired
- node.js was used to build a side-by-side browser for reviewing the redirections
Applications:
- The majority of our applications are written in ruby, based on either Ruby on Rails or Sinatra.
- A few components are written in Scala and built on top of Play 2.0
- We’re running Mapit from MySociety which is built on top of Django
Databases and other storage:
- We use MongoDB for most systems, with a few apps also making use of MySQL. PostgreSQL is used by Mapit and Puppet.
- Most search on the site is powered by Elasticsearch, though solr is currently the backend for the need-o-tron.
- A few event-driven systems use RabbitMQ
Monitoring, managing and alerting:
- We gather metrics from our apps with statsd
- We collect logs with logstash
- We monitor systems with ganglia
- Graphite helps us make many, many graphs to understand what’s going on
- Nagios tells us if we need to act on any of that data
Supporting Tools:
- All our code is tested by Jenkins, which we also use to deploy it to servers
- We track usage of the site with Google Analytics, using their API heavily to build dashboards
- We occasionally use New Relic RPM for performance reviews
- DNS is hosted by ja.net / Dyn
- Email (internal alerts) sending via Amazon SES
- Font handling and preparation with FontForge and FontTools
- We keep on track and in touch using Google Apps, Pivotal Tracker and Campfire
- Github helps us manage and discuss our code
- Zendesk keeps the feedback flowing
- We use jekyll & heroku for some of our prototyping
- We’ve built all sorts of internal dashboards. They’re very much our playground and you can find them written in a mixture of Ruby, Clojure, Node.JS, and PHP
10 Comments
Post a comment



What do you use for testing besides Jenkins? As I understand it Jenkins is just a CI framework and needs to call tests in other technologies. How do you test browser compatibility for example?
Each of our apps is free to test using whatever makes sense for it and we rely on having a shell script called jenkins.sh to tell jenkins how to test it.
The ruby apps are using a mixture of Test::Unit, Minitest, rspec and cucumber. There’s some jasmine for some of our javascript, and a few other bits and pieces beside. We’re also using brakeman for static analysis of ruby code and have some other hooks to pull out coverage reports and the like.
Awesome stuff looking good
Are you using a content management system?
We have a range of custom built content management tools rather than using anything off the shelf. There’s a bit more about that in two of my previous posts: http://digital.cabinetoffice.gov.uk/2011/10/03/beautiful-house/ and http://digital.cabinetoffice.gov.uk/2012/10/12/coding-in-the-open/
Worth noting that RabbitMQ is largely built in the UK, specifically London.
What QMS packages do you maintain? and if yes, who are they mainly used by?
Thnx
We don’t use any formal QMS packages. All our code goes through a peer review process, and is automatically tested with a variety of tools according to the framework/language in use. A Continuous Integration server ensures these tests are always run on new code and means the whole team can see failures.
Product Managers are then responsible for overall quality and accepting changes, and an extra round of review is done before any code is deployed to the staging and production servers.
Can you provide model of how gov.uk integrates with enterprise technologies that are already deployed within the government estate? For example use of services that are developed in commercial prodducts, SAP or Oracle rules determination. Many such products propvide SOAP interface and therefore can readily be used by web apps.
What, if any, technical standards are you developing for gov.uk web apps that may need to integrate with existing stacks including commerical software.