/docker-matomo

🐳 Matomo (formerly Piwik) image based on Alpine Linux

Primary LanguageShellMIT LicenseMIT

Version Build Status Docker Stars Docker Pulls Docker Repository on Quay Donate Paypal

About

🐳 Matomo (formerly Piwik) Docker image based on Alpine Linux and Nginx.
If you are interested, check out my other 🐳 Docker images!

Features

Included

  • Alpine Linux 3.7, Nginx, PHP 7.1
  • Tarball authenticity checked during building process
  • Config, plugins and user preferences in the same folder
  • GeoLite data created by MaxMind for geolocation
  • Cron tasks to archive Matomo reports and update GeoLite data as a "sidecar" container
  • Ability to pass additional options during cron archive
  • Plugins and config are kept across upgrades of this image
  • SSMTP for SMTP relay to send emails
  • OPCache enabled to store precompiled script bytecode in shared memory
  • Redis enabled and ready to enhance server performance

From docker-compose

Docker

Environment variables

  • TZ : The timezone assigned to the container (default: UTC)
  • LOG_LEVEL : Log level of Matomo UI (default: WARN)
  • MEMORY_LIMIT : PHP memory limit (default: 256M)
  • UPLOAD_MAX_SIZE : Upload max size (default: 16M)
  • OPCACHE_MEM_SIZE : PHP OpCache memory consumption (default: 128)
  • SSMTP_HOST : SMTP server host
  • SSMTP_PORT : SMTP server port (default: 25)
  • SSMTP_HOSTNAME : Full hostname (default: $(hostname -f))
  • SSMTP_USER : SMTP username
  • SSMTP_PASSWORD : SMTP password
  • SSMTP_TLS : SSL/TLS (default: NO)

The following environment variables are used only if you run the container as "sidecar" mode :

  • ARCHIVE_OPTIONS : Pass additional options during cron archive
  • CRON_GEOIP : Periodically update GeoIP data (disabled if empty ; ex 0 4 * * *)
  • CRON_ARCHIVE : Periodically execute Matomo archive (disabled if empty ; ex 0 * * * *)

Volumes

  • /data : Contains GeoIP databases, configuration, installed plugins (not core ones), tmp and user folders to store your custom logo

Ports

  • 80 : HTTP port

Use this image

Docker Compose

Docker compose is the recommended way to run this image. Copy the content of folder examples/compose in /var/matomo/ on your host for example. Edit the compose and env files with your preferences and run the following commands :

touch acme.json
chmod 600 acme.json
docker-compose up -d
docker-compose logs -f

Command line

You can also use the following minimal command :

docker run -d -p 80:80 --name matomo \
  -v $(pwd)/data:/data \
  crazymax/matomo:latest

Notes

Sticky sessions

On a HA environment, enable backend sticky sessions on your load balancer. It's required while installing plugins for example.

Cron

If you want to enable the cron job, you have to run a "sidecar" container like in the docker-compose file or run a simple container like this :

docker run -d --name matomo-cron \
  --env-file $(pwd)/matomo.env \
  -e "ARCHIVE_OPTIONS=--concurrent-requests-per-website=3" \
  -e "CRON_ARCHIVE=0 * * * *" \
  -v $(pwd)/data:/data \
  crazymax/matomo:latest /usr/local/bin/cron

Then if you have enabled CRON_ARCHIVE to automatically archive the reports, you have to disable Matomo archiving to trigger from the browser. Go to System > General settings :

Disable Matomo archiving from browser

Change location provider

As GeoIP module for Nginx is installed and uses GeoIP data, you have to select GeoIP (HTTP Server Module) in System > Geolocation :

Change location provider

Behind a reverse proxy ?

If you are running Matomo behind a reverse proxy, add this to your config.ini.php :

[General]
assume_secure_protocol = 1 # 0=http 1=https
proxy_client_headers[] = HTTP_X_FORWARDED_FOR
proxy_client_headers[] = HTTP_X_REAL_IP
proxy_host_headers[] = HTTP_X_FORWARDED_HOST

Redis cache

To use Redis as a cache (useful if your Matomo environment consists of multiple servers), add this to your config.ini.php :

[Cache]
backend = chained

[ChainedCache]
backends[] = array
backends[] = redis

[RedisCache]
host = "redis" # Docker service name for Redis 
port = 6379
timeout = 0.0
password = ""
database = 14

In case you are using queued tracking: Make sure to configure a different database! Otherwise queued requests will be flushed.

Upgrade

You can upgrade Matomo automatically through the UI, it works well. But i recommend to recreate the container whenever i push an update :

docker-compose pull
docker-compose up -d

How can i help ?

All kinds of contributions are welcomed 🙌!
The most basic way to show your support is to star 🌟 the project, or to raise issues 💬
But we're not gonna lie to each other, I'd rather you buy me a beer or two 🍻!

Paypal

License

MIT. See LICENSE for more details.