How to build your blog with Scheme programming language

1. Why bother to do it?

Well, I love Scheme. That's all.

OK, seriously, Scheme is cool enough to hassle, especially after you've learned SICP.

2. Preparetion

2.1 Which implementation?

I picked GNU Guile Scheme for the work. Because it appears in almost every GNU/Linux distro.

But you may need to install Guile2 rather than Guile-1.8:

sudo apt-get install guile-2.0
2.2 How about the blog engine?
- Hey! I'll shut this page if you tell me to output HTML with bunch of `display' calling!
- Don't worry, we're not going that way.

Here's a nice blog engine provided by Andy Wingo, Tekuti is its name. Tekuti is a Git based blog engine, so there's no more SQL-injection risk. All the data are handled by Git on the server side.

I know many folks like to build their blog on github nowadays. All you need is a static-page-generator, I could write another tutorial for this on Scheme too! But you don't have to use github if you've already had a VPS, right?

Anyway, this blog is built with Tekuti.

I suggest you try my fork of Tekuti, it's easier to use:

git clone

And compile then install it:

./configure && make && sudo make install

3. Configuration

3.1 Tekuti config

You have to modify your own config file.

cd nala-tekuti/tekuti
cp config.template config.scm
emacs config.scm

There're several items in config.scm, but the most significant is `*admin-user*' and `*admin-pass*'. Change them to your prefered admin name and passwd. And you may modify others as you wish.

3.2 Nginx config

Although Tekuti can run independently with its own inner-server, it's better to take advantage of reverse-proxy in Nginx, rather than disposing 8080 port to internet.

You may add these line to your /etc/nginx/nginx.conf:

     location /blog {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Then restart you Nginx:

sudo service nginx restart

4. Run your blog

Now you can start you blog engine:

sudo service tekuti start

Then visit the site http://your_domain_name/blog if you're lucky enough ;-)

Happy hacking!