I’ve recently moved this site and my personal email domain handling off a paid webhost. Now, everything is handled by Github Pages, Google Domains and Gmail, and the only thing I pay for is the DNS registration. Here’s a brief guide on how you can set this up yourself.
Step 1: move your site to Github pages
- Create a Github repository named
[username].github.io
. Github will serve whatever content is on master under that URL. - Create a
src
branch - this will contain the source content of your static site - Sign up for a TravisCI free account
- Add a
.travis.yml
file to the root ofsrc
and configure your build (details below) - Go to Travis and give it access to your new repository
- Create a personal access token with the
repo
scope and note the value - Go to the Travis build settings for
[username].github.io
and add an environment variable forGH_TOKEN
equal to the access token - Travis should now be able to build from
src
and output the result tomaster
Configuration files:
The .travis.yml
file is needed to configure CI:
1 | sudo: false |
(The fqdn
property is needed so that master will contain a CNAME
file, needed to resolve your Github pages site for a custom domain)
The build.sh
script will need to be written for whatever static site generator you use. In my case I’m using Hexo with a theme I’ve shared on Github:
1 | !/bin/bash |
Checking it has all worked
- Make sure the Travis build is passing
- Verify content is being written to
master
with anindex.html
and aCNAME
file at root - Navigate to
[your-username].github.io
and see your lovely content
Step 2: Set up Google Domains
Google Domains is fairly cheap (a dotcom address is about £10 a year) and highly convenient, but most importantly, it lets you forward emails for a custom domain to Gmail without paying for GSuite. If you want to use another domain registrar, you’ll probably have to sort out an alternative webmail provider.
Signing up to Google Domains is very quick though - the only holdup will be if you’re transferring an existing domain, in which case you’ll need to jump through a couple of hoops handing over an EPP code and (typically) replying to some emails from your old registar.
Once done, Google Domains provides a UI for managing email forwarding via your custom domain to any email your choose. You don’t even have to write any MX records.
At this point, you should be able to send an email to e.g. `me@yourcooldomain.com` and have it land in your Gmail inbox.
Step 3: Set up replying from gmail
So you can receive emails to your custom address, but how do you reply with the same address? You need to set up Gmail aliases.
Rather helpfully, Google have written a guide to do just that. You will need to have 2FA enabled on your account.
Step 4: Pointing your domain at Github Pages
Head to Google Domains / your domain registrar and get ready to write some DNS entries. We’ll need two:
- An
A
record for name@
(meaning: the current domain) pointing to these IP addresses:
1 | 185.199.108.153 |
- A
CNAME
record for namewww
(your subdomain) pointing to[your-username].github.io.
(note the dot at the end)
Save the changes, wait a short while, and check the DNS entries are resolving correctly by clearing your DNS cache (Google how to do this for your OS) and using dig
(*nix) or nslookup
(Windows) to check the IP resolution for your domain.
Sometimes DNS propagation can take a while - if it’s been more than an hour and things still don’t seem right, try a tool like https://www.whatsmydns.net/ that will make DNS lookups on your behalf using servers across the globe. It’s highly possible things are still being cached on your end.
Once this clears everything should be sorted - you’ll be able to see your static website at www.mycooldomain.com
and send/receive emails from your custom domain too. Publishing to your blog is just a matter of pushing content to your src
branch - TravisCI will pick up and deploy changes automatically. And the only thing to pay for is the domain itself.