Install Skald on your own server
Skald is free to self-host. Docker is the fastest way: one command to start, one to make the first owner.
Before you start
What you need
- A server whose web server access log Skald can read: nginx, Apache or Caddy.
- Docker, or Python 3.11 or newer on Debian, Ubuntu or similar. Nothing else: the standard library is enough.
- HTTPS in front of Skald on a remote server. Sign-in uses a secure cookie, so plain
http://works only atlocalhost.
Site on Vercel, Netlify or behind Cloudflare? Skald can take a log drain, a CDN log or the Skald Worker instead. See hosting choices and the Vercel guide. Rather not run a server at all? Start a 30-day free trial of hosted Skald.
Option 1 · fastest
Docker
-
Start it, with your web server's log mounted read-only
docker run -d --name skald -p 127.0.0.1:8080:8080 \ -v /var/log/nginx:/logs:ro \ -v skald-data:/var/lib/skald \ ghcr.io/spcaeo/skald:latestlatestfollows each release. To pin this one, useghcr.io/spcaeo/skald:2.14.0. The port is published on this machine only. To reach it from elsewhere, put HTTPS in front: your web server proxying to127.0.0.1:8080, or the bundled Caddy (Option 2). -
Make the first owner
docker exec -it skald skald accounts init --org "Example Co" --owner-email owner@example.comThis prints a link to set your password. Open it, set a password and sign in. Your history lives in the
skald-datavolume. -
Fill the history and check it
docker exec skald skald backfill --days 14 docker exec skald skald doctorbackfilladds the days your logs still hold.doctorthen says, one line per part, what works and what to fix.
Settings come from environment variables (SKALD_SITE, SKALD_HOSTS, SKALD_TIMEZONE, SKALD_BASE_URL and others) or a config file mounted at /etc/skald/config.yml. The log must be readable by group adm (gid 4), as it is on stock Debian and Ubuntu.
Countries and cities for a log that has none: mount a GeoIP folder read-only (-v /usr/share/GeoIP:/geoip:ro) and set SKALD_COUNTRY_DB and SKALD_CITY_DB to DB-IP's free country and city files in it. Without them, such values read "Not recorded".
AI answers (optional) asks ChatGPT, Perplexity, Gemini and Claude your questions with your own provider keys: set them write-only in Settings › Integrations, or as SKALD_OPENAI_API_KEY, SKALD_PERPLEXITY_API_KEY, SKALD_GEMINI_API_KEY and SKALD_ANTHROPIC_API_KEY. Nothing is asked, and nothing costs, until a key and a tracking profile exist, and each profile stops at its daily cost cap.
Option 2
Docker Compose
git clone https://github.com/spcaeo/skald && cd skald
docker compose up -d
docker compose exec skald skald accounts init --org "Example Co" --owner-email owner@example.com
docker-compose.yml is at the root of the repository. Edit its log path first if your logs are not in /var/log/nginx.
On a server with your own domain
Let your host's nginx or Caddy proxy /traffic* to 127.0.0.1:8080 over HTTPS, or start the bundled Caddy, which gets a certificate for you:
SKALD_DOMAIN=stats.example.com docker compose --profile https up -d
Option 3 · Debian, Ubuntu and similar
Install script
The quick way, pinned to a release:
curl -fsSL https://raw.githubusercontent.com/spcaeo/skald/v2.14.0/install.sh | sudo bash -s -- --ref v2.14.0
This runs a script from the internet as root. To check it first, download the release and its checksums, verify, then run it:
curl -fsSLO https://github.com/spcaeo/skald/releases/download/v2.14.0/skald-2.14.0.tar.gz
curl -fsSLO https://github.com/spcaeo/skald/releases/download/v2.14.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS # must print: skald-2.14.0.tar.gz: OK
tar -xzf skald-2.14.0.tar.gz && cd skald-2.14.0 && less install.sh && sudo ./install.sh
It installs into /opt/skald, with config in /etc/skald and data in /var/lib/skald, and puts the skald command in /usr/local/bin. Newer releases are listed on GitHub releases.
Option 4
From source
git clone https://github.com/spcaeo/skald && cd skald && sudo ./install.sh
Then the daily run and the live panel come from one command. It runs as the skald user, with /etc/skald/config.yml, so use sudo:
sudo skald check # verify yesterday's figures; store nothing
sudo skald run-daily # check, collect, audit, dashboard, mail (the cron entry)
sudo skald live # "Today so far"; safe every 2 minutes
sudo skald version # brand, version and release
After install
Upgrades and help
- Upgrading:
sudo skald upgradetakes a backup, runs migrations, checks health and rolls back if needed. Docker users can follow the:2tag. Details in the upgrade guide. - Full guide: every option and fix is in INSTALL.md on GitHub. Hardening is in SECURITY.md.
- Stuck? Run
skald doctorfirst. Then report a problem on GitHub.
Not sure yet? Click around the live demo, read every feature and how Skald compares, or see why we built it.
Live demo
Click around the real dashboard with sample data
Every section, 60 days of a made-up site. In your browser, nothing to install, no sign-up.
Hosted Skald
Start free. We set it up for you.
30 days free, no card. Your account is ready within one working day. Or run it yourself, free, with the install guide.