Self-hosted Website Analytics without breaching user's privacy
We all love free but nothing in life is truly free. There is a cost to almost everything and if you’re not paying with money then you’re paying with something else. My go-to analytics platform in the past has been Google Analytics, it’s free and fully featured but there’s a catch. It’s free for me but what about the users who want to visit my blog? They pay with their privacy. I’m much more aware of privacy concerns than I was even just a few years ago, I want to do my part to ensure that users that come to my site aren’t tracked unnecessarily. This is where the journey to a more privacy-focused analytics platform begins.
Try Fathom Analytics, it's open source and easy to self-host. Put user's privacy at the forefront of your web analytics.
What are we trying to solve?
Unlike a large business trying to ascertain who’s visiting their website, what demographic they fit in how likely they are to buy something, I just want a ballpark figure of how many people are reading my articles so I can cater my articles to my audience. I just need to collect simple stats for Benevolent Bytes while protecting user’s privacy.
How are we solving privacy-focused analytics?
With a bit of research, I found Fathom Analytics. Their tagline from their website caught my eye.
Fathom Analytics provides simple, useful website stats without tracking or storing personal data of your users.
Fathom gives me enough to make an informed decision and hopefully doesn’t add unnecessary bloat to my site. They offer a hosted service or you can host it yourself which is what I opted for considering I started hosting my blog using Ghost on Digital Ocean.
Fathom vs. Google Analytics?
Fathom gives you a pretty limited number of metrics to track but it’s enough to get the job done.
- Top pages
- Top referrers
- Bounce rate
- Average time people spend on your site
This is a minimal offering compared with Google Analytics but it’s all I’m looking for. I don’t need to know which browser or device a user is using. I just want to know what’s doing well, I’m not concerned with where they are reading from or what they’re clicking on. This isn’t going to suit everyone but Fathom is right for me and it might be right for you if you want something simple and lightweight.
I’m in! How do I set it up?
Setup is pretty straightforward, I am hosting everything on DigitalOcean because it’s honestly the best hosting platform I’ve used so far. It’s got transparent pricing, a great UI and cheap hosting options that are value for money. If that’s not your thing, you can try it out on any host that runs linux. (I’ve been using Ubuntu 18.04 specifically because it was the simplest to setup).
If you want to give Digital Ocean a try, I’m using it to host Benevolent Bytes and Fathom Analytics and it’s great! If you don’t have an account already then start off with $50 when you use my referral link. By signing up with DigitalOcean, you help support my site and try out a hosting platform which I think is one of the best around.
Setup a droplet
If you're not using DigitalOcean then you can skip this step and setup an Ubuntu machine on your host of choice.
The first step once you login to your dashboard is to create a new droplet.
Dashboard when you login to DigitalOcean
We're going to configure our droplet with Ubuntu 18.04, you could give FreeBSD a go as Fathom also has a precompiled release ready to download. I'm using a standard plan at the moment at the $5 per month tier. It's surprisingly decent for the task and I haven't encountered any issues so far.
Create a droplet, Distribution, Plan and machine
Choose a datacenter region, you could choose one closer to your intended audience, by default Singapore is chosen. It's also important to set up some authentication. I prefer an SSH key because it's convenient. You can add keys to your account and then choose which ones you'd like to allow to login here. Alternatively, if that's too much hassle then one-time password will be sufficient. You can set it up and not have to worry about it.
Create a droplet, datacenter and authentication
Finally we can complete the setup, I've chosen a SSH key which will allow easy login for the next step. Go ahead and create the droplet. Add some tags if you'd like to find it again (depending on how many droplets you have) and choose a memorable hostname, the default one is descriptive but not recognisable.
Create a droplet, final screen
Our droplet is created, it might take a few seconds before it's ready. Now that it's up and running, we need to connect to it via SSH, install Fathom and configure it.
Droplet is created!
Setting up Fathom on our Ubuntu Droplet
Setting up Fathom is pretty straightforward, we can get it up and running within a minute. The first step is to SSH into our machine, copy the IP address of our droplet and run the following command like so:
If everything is setup correctly, you should be logged in. If you're not using an SSH key then you'll need to type in a password (email via email).
SSH into our new droplet
Let's download Fathom, I'm using Fathom 1.2.1 for Linux.
The <a href="github.com/usefathom/fathom/releases">releases can be found here</a>
Once that's complete, we need to extract it to out bin directory and make it executable:
tar -C /usr/local/bin -xzf fathom_1.2.1_linux_amd64.tar.gz chmod +x /usr/local/bin/fathom
We can test it's working with
fathom --version, if you get a version string like in the screenshot below then you're all set. We can run the server now but we should configure it first.
Download Fathom and install it
Let's make a directory to house our Fathom data:
mkdir ~/fathom-analytics cd ~/fathom-analytics/ nano .env
The .env file will be our configuration where we can setup the kind of database we want to use and the port the server will be served from.
FATHOM_SERVER_ADDR=9000 FATHOM_GZIP=true FATHOM_DEBUG=true FATHOM_DATABASE_DRIVER="sqlite3" FATHOM_DATABASE_NAME="fathom.db" FATHOM_SECRET="random-secret-string"
I'm going to use an SQLite database because it's easy and I don't want to setup an external database. It's possible to use a different database like MySQL or Postgres as well. Take a look at the configuration options if you need something more customized. Make sure you set the FATHOM_SECRET to something unique, this is used for signing session cookies.
Now that we're configured, let's see if Fathom is working!
fathom server to start the server and navigate to your server. In my case, my server's IP is
220.127.116.11 and I set my
FATHOM_SERVER_ADDR to 9000, so http://18.104.22.168:9000 will show the page below.
Fathom up and running
You're almost good to go but have you noticed anything? There's no authentication which isn't secure so let's add a user. Stop your server and run the following command with your email and password of choice.
fathom user add --email="email@example.com" --password="look-at-my-strong-password"
Setup a user on your Fathom instance
Now that's done, start your server up with
fathom server and you'll see your new login page.
Fathom secured with our user credentials
You should now have Fathom Analytics running on your very own server all within a few minutes. There are a few steps I recommend taking from the Fathom installation guide like using NGINX to get SSL running and setting up Fathom to start on boot for those cases when you need to restart your server and you want to ensure you don't miss a vital step.
- All about Fathom
Take a look at the official website to see why you might want to use Fathom, there is a comparison between the Community Edition (what I'm currently using) and their hosted version which adds some extra peace of mind. Eventually they are planning on advancing their platform but version 1.0 is pretty great self-hosted or otherwise.
- Fathom Installation Instructions
This is the guide which my article is based on, the setup and configuration is simple. If you want the bare essentials to get it up and running, skip my article and take a look here.
- Fathom Releases
You'll want to download a release for your chosen host OS unless you want to build it from source. I'm using 1.2.1 which is the latest version at time of wiring.
- $50 DigitalOcean credit
Want to follow along, get some credit to play around in DigitalOcean. I use it for my personal projects even though I have access to some other cloud hosting providers for free, I pay for DigitalOcean because it's so easy to use and is great at what it does.
I hope you agree that user privacy is an important right to protect on the internet. As creators, we want to know that we're making an impact and we want to gauge how our products and content is doing. We can still get valuable information without giving up the user's data. Take a look at what metrics you want to track and see if a platform like Fathom or another privacy-focused analytics platform fits with your vision.
If you liked setting up your own stuff then why not see why I self-hosted my blog with Ghost. If you hadn't realised, your viewing this blog on Benevolent Bytes which is powered by self-hosted Ghost and I use self-hosted Fathom Analytics too.
I use it too! It's just fantastic. The only thing i miss (and as i know they are working on it) is a view where i can see referral-page stats (so i can know the page the referral is linking).
Also maybe it's worth to consider using an actual database for high traffic sites, sqlite can slow down a lot.
An extra bit is disabling debug in configuration, you don't really need it in production :-)
Thanks for the tips, it's definitely worthwhile looking at a separate droplet with Postgres or MySQL for higher traffic. I'm not seeing anywhere near enough traffic to put a strain on my humble SQLite db at the moment but it's worthwhile keeping an eye on.