I know my site doesn’t exactly have any dedicated watchers, but if anyone noticed a period of downtime earlier this week, it’s because I was migrating from hosting on FatCow to hosting on a rented VPS through DigitalOcean. I also moved my domain registration from FatCow to Gandi.net. In this post, I plan to cover the hows, whys, and some lessons learned.

I’ll start with the juicy stuff.

Why?

There are a couple of reasons, but the root of it all is that I got fed up with FatCow. It’s not clear how their pricing varies increases from year to year, and it’s obnoxious how, every few months, I find myself signed up for another “free trial” of some service out of which I have to opt. I can roll my own solution for less money, and with greater control.

Why move away from FatCow?

Like I said above, money and annoyance. I have a few sites with FatCow, and the oldest is about to round the three year mark. When I signed up, I was offered a trial rate of around $30 for the first year. That’s a very good deal. I barely used the site, but I ignored a few emails and, lo and behold, I found myself renewed automatically to the tune of $70-something. Okay, that’s still not significantly more than $5/month. Pretty darn good for unlimited hosting, the fact that I’m not using it notwithstanding. I turned off automatic renewal.

A few months ago, I got a message saying that FatCow couldn’t automatically renew that site because the card information I had stored was bad. I logged in, turned automatic renewal off again, and looked at the invoice – they were about to bill me $200-something for April 2014-April 2015! No way! That’s way too much.

I just renewed Agocs.org to the tune of $70-something with FatCow, but I decided it was in my best interests to break ties with that company completely, something I will be doing over the next few weeks.

Why Gandi.net?

Bluntly, they have a “no bullshit” policy. That, and they were recommended by a trusted coworker and friend, and they are a French corporation and French law meaningfully allows them to transfer ownership of “Agocs.org” over to me (most American registrars, I have been informed, retain ownership of the domain name and license its usage to you).

The process of getting things set up with Gandi.net was a little rocky, as I will detail below, but they have a bunch of good help text and an extensive knowledge base. I was able to get up and running quickly and with minimal bugging of my more knowledgeable friends.

Why DigitalOcean?

I’ve hosted a few VPSs with DigitalOcean before, and they are a joy to work with. I get full control of a Linux box (something I never got from FatCow), I can choose my web server (Nginx all the way) and database back-end (none for me please!), and set it up however I want. Write a script that uses rsync to publish new articles? Sure! Go nuts! I fought with FatCow for a while about that, and resorted to using FTP (which, once you’ve started using rsync, sucks).

Anyway, one small VPS costs me about five bones per month. Because I’m just the tiniest bit clever, I can host several sites on the same VPS. They’re all static content generated by Octopress, so it’s not like I’m going to outgrow the small server any time soon. It’s really nice.

How it worked

The process was straightforward. I set up the VPS with DigitalOcean first, copied my site over there, installed Nginx, and got that configured. Then I requested a transfer code from FatCow (I suspect, but cannot confirm, that they drag their feet on this), and initiated the transfer through Gandi. The transfer cost me about $13, but that means Agocs.org is mine for an additional year. When the transfer was complete, I created a DNS Zone file through Gandi’s web interface that points to my VPS.

Lessons learned

I made my fair share of mistakes, mostly in setting up the DNS Zonefile. My first attempt looked like this:

* 10800 IN A 162.243.76.63

www.agocs.org worked great, but no email and no plain ol' agocs.org. Email was more critical, so around midnight that night I changed it to this:

* 10800 IN A 162.243.76.63
imap 10800 IN CNAME access.mail.gandi.net.
pop 10800 IN CNAME access.mail.gandi.net.
smtp 10800 IN CNAME relay.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
@ 10800 IN MX 10 spool.mail.gandi.net.

The lines below were cribbed from Gandi.net’s default Zone file. chris@agocs.org worked, but agocs.org did not. I did some research and then made the following change:

* 10800 IN A 162.243.76.63
@ 10800 IN A 162.243.76.63
imap 10800 IN CNAME access.mail.gandi.net.
pop 10800 IN CNAME access.mail.gandi.net.
smtp 10800 IN CNAME relay.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
@ 10800 IN MX 10 spool.mail.gandi.net.

I found out the * record points all _sub_domains to that IP address, but it does not point the root domain (i.e. agocs.org) there. The @ record points the root domain to that IP address.

Finally, I noticed a problem with sent email. The last change I had to make was through Gmail, which was sending agocs.org traffic through an SMTP server run by FatCow. I’m way too lazy to roll my own SMTP server, so I told Gmail to take care of it.

There you have it.