As consumers are increasingly aware of the privacy issues on the modern web, that trend has opened up space for some interesting privacy-friendly tools to help you charge your business. For many years, Google Analytics was pretty much the only analytics suite worth its salt, but nowadays you can choose from many sound options.

If you want to own your data and be in charge of the tools you’re using, it’s nice to look at some of the alternatives, like Plausible.

Plausible is a lightweight and open-source website analytics tool. No cookies and fully compliant with GDPR, CCPA, and PECR. It’s fully open-source, and it’s quite easy to install.

Goals of the tutorial

You will install the fully operational analytics suite Plausible, ready to embed it into any number of websites to collect data from.

Prerequisites

  • A machine running Ubuntu 20.04 (eg. smallest droplets on DigitalOcean/Vults will suffince).
  • A Fully Qualified Domain Name (FQDN) assigned to your server’s IP address.

Installing required software

As you always should, once logged into the Ubuntu instance – update and upgrade all the packages by running:

$ sudo apt-get update -y
$ sudo apt-get upgrade -y

Installing git and nginx

We will need git, as well as nginx for the later part of this tutorial, so let’s install them also:

$ sudo apt-get install nginx
$ sudo apt-get install git

Installing Docker

Plausible uses many open source packages, but luckily, it makes it easy for us to set it up by using Docker.

To install Docker, we first need to add its official GPG key, and set up the stable repository:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Note: You might notice the word focal in the last command, which is the code name of the previous Ubuntu version – Ubuntu 20.04. That’s because the team from Docker doesn’t update their packages immediately after a new distro release. Don’t worry, most of the time everything will work with the packages from the previous Ubuntu version.

Now, we run the update once more, and run the installation of Docker’s packages:

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io

Cloning Plausible

Navigate to the root nginx directory, clone Plausible, and switch to its directory:

$ cd /var/www
$ git clone https://github.com/plausible/hosting
$ cd hosting

Configuration

Inside the Plausible directory, there is only one file that we will want to edit – plausible-conf.env

Inside of the plausible-conf.env you will find the following:

ADMIN_USER_EMAIL=replace-me
ADMIN_USER_NAME=replace-me
ADMIN_USER_PWD=replace-me
BASE_URL=replace-me
SECRET_KEY_BASE=replace-me

These are the minimum variables that you need to fill for Plausible to work, but we will add some more.

One thing you’ll need to generate is the secret key, which you can do by running the following command, which will output a random string 64 characters long:

$ openssl rand -base64 64

Take a look at the example of the fully filled plausible-conf.env. You will need to replace the values shown with your own values:

[email protected] #replace with your email (should be working one)
ADMIN_USER_NAME=admin #name it anyway you want
ADMIN_USER_PWD=adm1nPassword123 #the stronger, the better
BASE_URL=https://analytics.example.com #this is your URL, use the domain attached to this instance's IP, must start with http/https
SECRET_KEY_BASE=ZN5JhjiQ+TGJP8hMRerTAXtu/7bmd3eZitRaIqlvaQXdkHrODe6wxSLN4izMOPbqpRnTpghI6FJX3Bvf8RVMRQ== #generated key with the above command

[email protected] #can be anything
SMTP_HOST_ADDR=smtp.google.com #gmail, zoho, whatever you use
[email protected] #smtp username
SMTP_USER_PWD=smptProviderPassword123 #smpt password
SMTP_RETRIES=3

Once you populated your plausible-conf.env file, save it with your favorite editor. We are now ready to launch Plausible.

Running Plausible

This is simple, just run:

docker-compose up --detach

Before we can open our browser, and check our new shiny analytics suite, we must first take care of our domain and the proxy.

Set up nginx reverse proxy

Open up the following file with your favorite editor, for example nano, like this:

$ sudo nano /etc/nginx/sites-enabled/default

Change the contents of the file, so it looks like this:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name analytics.example.com; #change this to your url

    location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Save the file, and restart the nginx service:

$ sudo service nginx restart

Install SSL certificate

Because we added the https prefix in the Plausible configuration file, going to our domain right now will return 502 – Bad Gateway. To make it running, there’s only one step left – installing the SSL certificate.

Fortunately, with LetsEncrypt it’s really easy!

Run the following commands to install certbot:

$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

After the certbot is installed, run:

$ sudo certbot --nginx

You will be presented with a prompt that will ask you to enter your email address, accept the terms and choose the domain (the one you entered in the nginx config will be displayed).

After that is done, let’s restart the nginx once more:

$ sudo service nginx restart

First Login to Plausible

Congratulations. Everything is ready! Open up your browser and navigate to https://analytics.example.com.

You will see a login screen. Enter the details you have provided in the Plausible configuration file. After that, you will receive a confirmation email you also typed in there.

If for some reason you don’t receive the email, and you’re sure you entered the correct SMTP settings previously – don’t worry, we can activate the user running the following command in the root directory of Plausible on our server:

$ docker exec hosting_plausible_db_1 psql -U postgres -d plausible_db -c "UPDATE users SET email_verified = true;"

You are now ready to use all the features that Plausible offers. For information about using the suite, check out the Plausible official documentation.