From Wordpress on Apache to mynt on nginx
Going from Wordpress to mynt.
Purpose:
- smaller footprint, tune down vps (mysql & apache + my bad tuning skills = ram gets eaten up)
- write posts in markdown
- use CLI for faster editing
- posts in git
- local preview for free
Bonuses:
- getting to know a python project (mynt)
- trying out nginx which is recommended for static content
- before: mysql & apache processes hanging around, using 500 mb ram with near 0 load
- response time (with wordpress cache plugin) was 2.49 s for 100.55 KB split on 17 requests (front page)
- $ ab -n 1000 -c 5 http://iamnearlythere.com/ crashes
- take the opportunity to learn less for a redesign, fits with the pregeneration. also, include responsive design (octopress = good influence)
Good to have:
- rsync for deploying
- log 404's
- nice source syntax (see examples on mynt's web)
Procedure:
- Install mynt, requires xcode on osx (for "watchdog" -- an, in my eyes, unnecessary dependency)
- Export all posts from wordpress (I got an XML file out of 3.3.1)
- Run
$ ./wp2mynt.php export-file.xml
(wp2mynt.php is on github) - Modify the theme a bit (far too many h1 used, for example)
- Get a pattern from subtlepatterns.com
- Upload it to a new /var/www/directory-here, add a virtual host section to apache's config with ServerName test.iamnearlythere.com. Forgot to register test.iamnearlythere.com as an A record at my DNS registrar, 30 min wasted.
- Install nginx and set the default mimetype to text/html since I was silly enough to use the URI form of url.com/post-title which made mynt generate posts as files without extensions which by default are served as application/octet-stream by nginx ("want to download this?") and served as text/plain by apache.
- The request dropped to 6 requests at 190 kb, totalling 1.47 s.
- Since the machine now no longer needs apache or mysql:
- Make sure apache doesn't start on reload: $ sudo update-rc.d -f apache2 remove
- Make sure mysqld doesn't start on boot: http://superuser.com/a/139059/9539
- Make sure nginx does start on boot: http://articles.slicehost.com/2007/10/17/ubuntu-lts-adding-an-nginx-init-script (I had to replace the nginx path with /usr/local/nginx/sbin/nginx)
- Allright, I'm done.. ish. When using
$ tail -f /usr/local/nginx/logs/error.log
I notice a bunch of stuff I missed. Redirections here we go - Also, create a Makefile for generating, testing and deploying the blog (mynt generate; rsync)
- It contains multiline strings and feeding vim with input
Result:
- Memory on vps could be turned down from 768 MB to 128, without tweaking nginx. Currently using about 20%.
$ ab -n 10000 -c 25
can be run without any problems what so ever
Conclusion:
I'm pretty sure I suck at micromanaging apache & mysql. And that nginx is pretty fly with static files.
Also, a hiccup: I issued a 301 redirect in one case, and it went badly -- my nginx non-ninja-config-skils made me issue a recursive redirect loop. 301 responses are heavily cached by browsers, I had to delete the cache after removing the direction out of the config file. Do not make this mistake during 'live hours' or with a heavily trafficked page.