Skip to content

Matomo

Install required packages

sudo apt-get install docker docker-compose mysql-server

Create necessary folders and files before we getting started

mkdir -p ~/docker/matomo/docker

Create docker-compose.yml

cat << "EOF" > ~/docker/matomo/docker-compose.yml
version: "3"

services:
  db:
    image: mariadb
    command: --max-allowed-packet=64MB
    restart: always
    environment:
      - MARIADB_DATABASE=matomo
      - MARIADB_USER=${MARIADB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
    volumes:
      - ~/docker/matomo/db:/var/lib/mysql

  app:
    image: matomo
    restart: always
    volumes:
      - ~/docker/matomo/matomo:/var/www/html
    ports:
      - 127.0.0.1:8080:80
EOF

cat << "EOF" > ~/docker/matomo/.env
MARIADB_USER=matomo
MARIADB_PASSWORD=SI0sazoOy0M&Rpc
MARIADB_ROOT_PASSWORD=SI0sazoOy0M&Rpc
EOF
  • Start Docker Container for Matomo
cd ~/docker/matomo
docker compose up -d
  • Stop Docker Container for Matomo
docker matomo stop

Create mysql-user

CREATE USER '<user>'@'%' IDENTIFIED BY '<password>';
CREATE DATABASE IF NOT EXISTS matomo;
GRANT ALL ON matomo.* TO '<user>'@'%';
FLUSH PRIVILEGES;

CREATE USER 'matomo'@'%' IDENTIFIED BY '<password>';
CREATE DATABASE IF NOT EXISTS matomo;
GRANT ALL ON matomo.* TO 'matomo'@'%';
FLUSH PRIVILEGES;

Configure nginx

Redirect proxy for matomo

cat << "EOF" > /etc/nginx/sites-available/stats.nr1.nu
server {
    listen 80;
    listen [::]:80;
    server_name stats.nr1.nu;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name stats.nr1.nu;

    ssl_certificate /etc/letsencrypt/live/stats.nr1.nu/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stats.nr1.nu/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/;
    error_page 404 /404.html;
    index index.html index.htm index.nginx-debian.html;

        location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF
ln -s /etc/nginx/sites-available/stats.nr1.nu /etc/nginx/sites-enabled/stats.nr1.nu
sudo nginx -t
sudo systemctl reload nginx
certbot -d stats.nr1.nu --nginx -m wuseman@nr1.nu