I have tried to stay away from Google Analytics since 2013, I have explored some Google Analytics Alternatives, because I wanted to avoid setting cookies on my visitor’s browsers.

I have installed Pikik, now known as Matomo, also in 2013, and run my self-hosted instance for some years, but then I run out of time and left my blog running with no attention from my part, being a static generated blog, I just set it on an Apache server, and removed everything else.

Sin April this year, I have decided to pay attention to my blog again, and wanted to see some statistics, fortunately and thanks to Marko Saric I have came to Plausible, I have tested it and wrote a Plausible Analytics review post, where it can be seen that I really like the solution.

I like it, because it respects privacy, just like Matomo, but I prefer its simple and clean interface over Matomo’s one.


I really enjoy self-hosting everything, even self-hosting email, so, as soon as I knew Plausible was ready to self-host, I wanted to give it a try, some days ago, I read this post and finally decided to try to self-host Plausible, I followed the instructions in that page, and also read the official instructions and adapted it a little.

I decided to write this post, so anyone can follow this step by step guide and end-up with a Plausible Analytics server running on Docker. So, let’s do it.

Preparing the server

You will need a host server, I will use Ubuntu 20.04, with Docker and Docker Compose installed on it.

sudo apt update && sudo apt upgrade


sudo apt install docker-compose

Docker Compose

Following both guides previously mentioned, I have come with this docker-compose.yml file:

version: "2.3"

    image: plausible/analytics:latest
    restart: unless-stopped
    command: sh -c "/ db migrate && / run"
      - db
      - clickhouse
      - geoip
      - 8589:8000 # Use any host's port you want, I am using 8589, because I have it free to use with Caddy.
      - SECRET_KEY_BASE=4da5858b289e07537d3cebb29e62be4bc2de04b76531384d13173057a492e89e63e3bf27e4414ab877746dfc52a13a37e843ca44d9e5a09509986ec4003d899b # Change this key
      - SIGNING_SALT=0e4e49e91d2d4e49ede4881d1ace6d89 # Change this key too
      - DATABASE_URL=postgres://plausible:plausible@db:5432/plausible
      - HOST=plausible.yourdomain.tld # Change to the domain you wan to have Plausible Available
      - SCHEME=https
      - MAILER_ADAPTER=Bamboo.SMTPAdapter
      - MAILER_EMAIL=no-reply@yourdomain # Change this to reflect the address where emails are going to come from
      - SMTP_HOST_ADDR=mail.yourdomain # Change this to your server, you can use mailgun, or google smtp
      - SMTP_HOST_PORT=465 # Change to fit your server
      - SMTP_USER_NAME=username # This can be, if you are using Google SMTP
      - SMTP_USER_PWD=you-pass # Change with your SMTP password
      - GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb
      - geoip:/geoip:ro

    image: yandex/clickhouse-server:latest
    restart: unless-stopped
      - ./clickhouse:/var/lib/clickhouse
        soft: 262144
        hard: 262144

    image: postgres:12-alpine
    restart: unless-stopped
      - ./postgres:/var/lib/postgresql/data
      - POSTGRES_PASSWORD=plausible
      - POSTGRES_USER=plausible

    image: prodrigestivill/postgres-backup-local:12-alpine
    restart: unless-stopped
      - ./scratch/db-backups:/backups
      - db
      - POSTGRES_HOST=db
      - POSTGRES_PASSWORD=plausible
      - POSTGRES_USER=plausible
      - POSTGRES_DB=plausible

    image: maxmindinc/geoipupdate
      - GEOIPUPDATE_ACCOUNT_ID=123456 # Change with your own key, you can sign-up at:
      - GEOIPUPDATE_LICENSE_KEY=asdfasfdasdfadsf # Change it with your own key
      - GEOIPUPDATE_EDITION_IDS=GeoLite2-Country
      # update every 7 days
      - geoip:/usr/share/GeoIP

  caddy:  ## Use this section, only if you are not already using a reverse proxy, like Caddy, or Nginx in front your you applications
    container_name: caddy
    restart: always
       - '80:80'
       - '443:443'
       - '/var/www:/usr/share/caddy'
       - 'caddy_data:/data'
       - 'caddy_config:/config'
       - '$PWD/caddy.conf:/etc/caddy/Caddyfile'
    image: 'caddy:2.1.1-alpine'

    driver: local
  caddy_data: # Remove this if you are not going to use Caddy
  caddy_config: # Remove this if you are not going to use Caddy

Initial Setup

Once you have your docker-compose.yml file created, it is time to setup Plausible, actually it is time to create and setup the databases, I have followed The Orange One instructions, but added one line in order to create the database, otherwise you end up with an error.

docker-compose up -d db clickhouse

Now, attach the plausible container in order to create and migrate the database

docker-compose run plausible sh

Once inside, create the database:

/ db createdb

And run the migrations script:

/ db migrate

Now, we will create the admin account, to do so, run these commands:

export ADMIN_USER_NAME=admin
export ADMIN_USER_EMAIL=your_email
export ADMIN_USER_PWD=your_password
/ db init-admin
exit # Exit the container

Final steps

You need to add in your DNS provider a record to point your domain, to the IP where you are installing Plausible Analytics. And if you are using the Caddy section I am using in the above docker-compose.yml file, you need to create a simple caddy.conf file in the same folder, it should have at least this:

plausible.yourdomain.tld { # Should be the same as the HOST variable in the Plausible section of the docker-compose.yml file
        reverse_proxy # Use your IP and the port you are using on ports in plausible section of docker-compose.yml file

We are now ready to restart the container

docker-compose down

And run it for the first time:

docker-compose up -d


Privacy is important, and one should always try to respect it, the visitors to your site, do not want to be tracked, plausible and other solutions like Matomo, or GoAccess (Spanish) or AwStats do respect it.

You can get an account at Plausible Analytics or host it yourself using these instructions.