In the spirit of openness, I'd like to document what I'm using to publish this site. And its my site, so I'm going to! Here's a list of my tool chain.
Nikola - A static site generator. Turns rst files into the beautify HTML you see. I first heard of this on HPR 1577 and I've used it for a few projects since. I really like the idea of static site generation. No databases, no vulnerability filled front end. Just a text file, a web server, and a browser.
Vim - My editor of choice. Or maybe its a lifestyle. Either way. About 15 years ago I put some time into learning vim. I don't even remember why. But now that I have, I know how to use it fairly well (thou not more than a few days go by between instances of "wait, Vim can do that too?"). At this point, I'm not changing because I have editor inertia.
Git - Distributed version control. Git is just cool. I am probably just scratching the surface of what it can do, but I like it, and it makes me less dependent on a specific computer.
Rsync - For rapid deployment. Nikola has a built in process to deploy sites from your PC to your server (if you're not doing this all in one place. I use rsync and ssh keys for this.
Apache - Web service. Its old, its well known, and it's already running my my VPS
Linux - Because its gotta run somewhere. Linux is my operating system of choice for everything. No surprises here.
Now, lets break it down into how I combine these tools.
I have a directory on my computer initialized as both a nikola site and a git repository. When I got to create a new post, I use nikola to create the appropriate file, then open it up with vim and write what I have to write.
These files are in rst, a simple markup language that nikola can compile into HTML. This allows me to quite clearly divorce the content of the site (these files) from the appearance of the site (the theme, containing CSS, layouts, etc). HTML was always designed to be able to do this, but rst does it better.
Once the page is done, I test it locally. If I'm satisfied, I'll commit it to my local git repo, then push it upstream just before I'm ready to publish. In my git repository I have several branches. One for content, one for configuration changes, and one for theme work. And 'master' which is the special "production" branch. Working in 'master' is usually considered poor practice, so I don't.
Deployment is built into nikola, with a bit of configuration. I have it setup to rsync the files to my server directly. It works well. Apache & Linux are really just the platform for serving the files up. It could just as easily be running on ISS (well, easy for some people, probably not for me), or Nginx, running on Linux or Windows. I use Linux+Apache because its the stack I have, and I've used.
So that's how thoughts go from my brain to yours.