For rendering openstreetmap tiles, there are basically two approaches: bitmaps or vector data.
Bitmaps are the classic. Normally you start with something like OSM PBF or geotiff. Then you render it with, for instance, mapnik. Mapnik is configured with xml, which you don’t really want to do. So you now have CartoCSS or MapCSS: much friendlier formats. Those can then be converted to mapnik’s xml with tools like tilemill, kosmtik, manakarto or komap.
So... with data sources and styles, a renderer (mapnik) can create the bitmap tiles. Then you need to host it. TileStache+nginx, apache+mod_tile, etc.
A problem: if you render the same source with multiple styles, you have to do the same work multiple times and that takes lots of calculation time. A solution is “fat vector tiles”: you use mapnik to create a vector tile with lots of feature information out of postgis. Afterwards, you can use mapnik again to combine the fat factor tile with styling to (much more cheaply) render the actual bitmap tile.
You can go further. Vector tiles. The rendering of the pixels is moved to the client (the browser). You could generate fat vector tiles beforehand and store them in mbtiles. The server then combines those fat vector tiles with styling to send vector tiles to the browser.
My name is Reinout van Rees and I work a lot with Python (programming language) and Django (website framework). I live in The Netherlands and I'm happily married to Annie van Rees-Kooiman.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):