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.
- HTML/CSS/JS - using HTML5 where appropriate, with a heavy focus on accessibility, and validating where we can
- 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 Fastly as our primary Content Delivery Network provider
- Our servers are running Ubuntu GNU/Linux 12.04.
- Servers are managed with Puppet, using PuppetDB and Hiera
- 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 nginx and cache requests using Varnish
- 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
- 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
- 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