geometrikks

geometrikks

Docker app from GilbN's Repository

Overview

GeoMetrikks is a real-time geolocation analytics tool that tails your nginx access logs, performs GeoIP lookups, and visualizes traffic on a live interactive map - no external services required.

Features:

  • Live GeoIP map with real-time request visualization
  • Traffic analytics dashboard with configurable date ranges
  • Searchable access log history with filtering and sorting
  • WebSocket-backed live log tail
  • Batch import of archived logs

Requires a TimescaleDB + PostGIS database - install the companion "geometrikks-timescaledb" template from this same repository first, or point this container at your own TimescaleDB+PostGIS instance. Also requires a free MaxMind GeoLite2 account for GeoIP data (https://www.maxmind.com/en/geolite2/signup). See the repository README for full setup steps.

GeoMetrikks Unraid Templates

Unraid Community Apps templates for GeoMetrikks - a real-time geolocation analytics tool that tails nginx access logs, does GeoIP lookups, and visualizes traffic on a live interactive map.

This repository ships two Docker templates:

Template What it is
geometrikks-timescaledb TimescaleDB + PostGIS database - install this first
geometrikks The GeoMetrikks app and web UI

Setup

1. Install the database

Add geometrikks-timescaledb from Community Apps. Set a POSTGRES_PASSWORD - you'll reuse this exact value in step 2. Leave POSTGRES_USER (geouser) and POSTGRES_DB (geometrikks) at their defaults unless you have a reason to change them.

The DB Port config (default 5432) is exposed to your LAN so the app container can reach it.

2. Install the app

Add geometrikks from Community Apps and fill in:

  • DB_HOST - your Unraid server's IP address (e.g. 192.168.1.50)
  • DB_PASSWORD - the same password you set for geometrikks-timescaledb in step 1
  • APP_ADMIN_USER / APP_ADMIN_PASSWORD - your web UI login or APP_AUTH_DISABLED=true
  • Nginx Logs path - point this at wherever your reverse proxy writes its access logs (defaults to a SWAG-style path; change it for Nginx Proxy Manager, Caddy, or whatever you actually run)

Leave DB_PORT/DB_USER/DB_DATABASE at their defaults unless you changed the matching values in step 1.

3. Get a free MaxMind GeoLite2 key

GeoMetrikks needs MaxMind's free GeoLite2 database for GeoIP lookups:

  1. Sign up at https://www.maxmind.com/en/geolite2/signup
  2. Create a license key under your account
  3. Set MAXMINDDB_USER_ID and MAXMINDDB_LICENSE_KEY on the geometrikks template

Without these, GeoMetrikks runs in degraded mode (no GeoIP lookups) until you add them.

4. Open the web UI

http://<your-unraid-ip>:8000/ - log in with the admin credentials you set in step 2.

Notes

Media gallery

1 / 6

Install Geometrikks on Unraid in a few clicks.

Find Geometrikks in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Geometrikks Review the template variables and paths Click Install

Requirements

Requires a reachable TimescaleDB+PostGIS database (see the companion geometrikks-timescaledb template) and a free MaxMind GeoLite2 account for GeoIP downloads.

GeoMetrikks parses a specific nginx log_format. Add it to the http block in your nginx.conf:


log_format geometrikks '$remote_addr - $remote_user '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" $host "$http_user_agent" '
        '"$request_time" "$upstream_response_time"';


Then set your access_log to use this format:

access_log /var/log/nginx/access.log geometrikks;


Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/gilbn/geometrikks:latest
Last Updated2026-07-20
First Seen2026-07-20

Runtime arguments

Web UI
http://[IP]:[PORT:8000]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

WebUIPorttcp

HTTP port for the GeoMetrikks web UI.

Target
8000
Default
8000
GeoIP DataPathrw

Persistent storage for the downloaded MaxMind GeoLite2 database. This container runs as fixed UID/GID 1000 (not Unraid's usual nobody:users 99:100) - before first start, create this folder and run 'chown -R 1000:1000' on it or the container will fail to write the GeoIP database.

Target
/app/data/geoip
Default
/mnt/cache/appdata/geometrikks/geoip
Nginx LogsPathro

Host directory containing your nginx access logs, mounted read-only. Default assumes SWAG - change to your reverse proxy's log directory (Nginx Proxy Manager, etc.).

Target
/var/log/nginx
Default
/mnt/cache/appdata/swag/log/nginx
APP_ADMIN_USERVariable

Web UI login username.

Default
admin
APP_ADMIN_PASSWORDVariable

Web UI login password. Required unless APP_AUTH_DISABLED=true.

APP_AUTH_DISABLEDVariable

Set true ONLY if this container sits behind an authenticating reverse proxy (Authelia, Tailscale, etc).

Default
false
MAXMINDDB_USER_IDVariable

MaxMind account ID, for GeoLite2 database auto-download. Free account: https://www.maxmind.com/en/geolite2/signup

MAXMINDDB_LICENSE_KEYVariable

MaxMind license key, for GeoLite2 database auto-download.

LOGPARSER_LOG_PATHSVariable

Nginx access log file(s) to tail, container-side path(s). Single path or a JSON list ['/var/log/nginx/access.log', '/var/log/nginx/access2.log'] for multiple files.

Default
/var/log/nginx/access.log
LOGPARSER_HOST_NAMEVariable

Hostname label attached to ingested log events.

Default
Unraid
DB_HOSTVariable

IP address of your TimescaleDB container - typically your Unraid server's IP if you installed the companion geometrikks-timescaledb template.

DB_PASSWORDVariable

Database password. Must match POSTGRES_PASSWORD in the geometrikks-timescaledb template.

DB_PORTVariable

Database port.

Default
5432
DB_USERVariable

Database user. Must match POSTGRES_USER in the geometrikks-timescaledb template.

Default
geouser
DB_DATABASEVariable

Database name. Must match POSTGRES_DB in the geometrikks-timescaledb template.

Default
geometrikks
API_LOG_LEVELVariable

Application log verbosity (DEBUG, INFO, WARNING, ERROR).

Default
INFO
DB_ECHOVariable

Enable SQLAlchemy query logging.

Default
false
DB_ECHO_POOLVariable

Enable SQLAlchemy connection pool logging.

Default
false
DB_MAX_OVERFLOWVariable

Max connections above pool_size.

Default
10
DB_POOL_SIZEVariable

Database connection pool size.

Default
5
DB_POOL_TIMEOUTVariable

Connection pool timeout in seconds.

Default
30
DB_POOL_RECYCLEVariable

Connection recycle time in seconds.

Default
3600
DB_POOL_DISABLEDVariable

Disable connection pooling.

Default
false
DB_POOL_PRE_PINGVariable

Enable pool pre-ping to check connections before use.

Default
true
DB_DROP_ON_STARTUPVariable

DESTRUCTIVE - drops all tables on startup. Development only. Leave false.

Default
false
GEOIP_LOCALESVariable

JSON list of GeoIP locales to use.

Default
[&quot;en&quot;]
GEOIP_VALIDATE_DB_PATHVariable

Fail settings validation when the GeoIP database file is missing.

Default
false
GEOIP_VALIDATE_LOCALESVariable

Validate that the specified GeoIP locales are supported.

Default
true
GEOIP_REFRESH_DAYSVariable

Re-download the GeoLite2 database when older than this many days.

Default
7
LOGPARSER_POLL_INTERVALVariable

Interval in seconds to poll the log file for new entries.

Default
1.0
LOGPARSER_SEND_LOGSVariable

Send parsed logs to the database.

Default
true
LOGPARSER_BATCH_SIZEVariable

Max records before a forced commit.

Default
100
LOGPARSER_COMMIT_INTERVALVariable

Max time interval in seconds between database commits.

Default
5.0
LOGPARSER_SKIP_VALIDATIONVariable

Skip validation of log lines.

Default
false
LOGPARSER_STORE_DEBUG_LINESVariable

Store all raw log lines in the debug table, not just malformed ones.

Default
false
ANALYTICS_RAW_RETENTION_DAYSVariable

Days to keep raw geo_events and access_logs data.

Default
180
ANALYTICS_DEBUG_RETENTION_DAYSVariable

Days to keep access_log_debug data.

Default
30
ANALYTICS_HOURLY_RETENTION_DAYSVariable

Days to keep hourly continuous aggregate data.

Default
60
ANALYTICS_CAGG_REFRESH_INTERVAL_MINUTESVariable

Minutes between continuous aggregate refreshes.

Default
5
ANALYTICS_COMPRESSION_AFTER_DAYSVariable

Days after which to compress hypertable chunks.

Default
7
SCHEDULER_ENABLEDVariable

Enable scheduled background tasks.

Default
true
SCHEDULER_LOCATION_REFRESH_INTERVAL_MINUTESVariable

Minutes between GeoLocation.last_hit refresh jobs.

Default
10
MAP_HOME_LATITUDEVariable

Optional destination latitude for live request routes. Set both home coordinates to override external-IP auto-detection.

MAP_HOME_LONGITUDEVariable

Optional destination longitude for live request routes.

MAP_AUTO_DETECT_HOMEVariable

Resolve the server's public IP at startup and geolocate it when home coordinates are unset.

Default
true
MAP_PUBLIC_IP_URLVariable

JSON endpoint used for public-IP discovery; response must contain an 'ip' field.

Default
https://api64.ipify.org?format=json
MAP_PUBLIC_IP_TIMEOUTVariable

Timeout in seconds for public-IP discovery.

Default
3.0
APP_NAMEVariable

Application name shown in API metadata.

Default
GeoMetrikks API
APP_DESCRIPTIONVariable

Application description shown in API metadata.

Default
Real-time GeoIP lookups and traffic analytics API
APP_DEBUGVariable

Enable debug mode. Development only.

Default
false
APP_ENVIRONMENTVariable

Application environment name.

Default
production