Finally found one solution: Codespeed. It's a fairly simple Django server, originally created for comparing Python interpreter performance (see it in action here), but it works well for pretty much any benchmark.
The documentation is a little out of date, but Django is nice and simple so it's not too hard to set up.
Also it has the slightly odd concept of "Executables", which corresponds to the python interpreter used for the benchmark. My code is C++ so I have just interpreted this as the compiler, so I have "Clang -O3", "GCC -O0" and so on.
Result submission is via HTTP POST, which can be authenticated with HTTP Simple Auth (it isn't by default currently so anyone can submit results).