| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| docs/superpowers | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
Umami Analytics Deployment
Docker Compose deployment for a self-hosted Umami instance at observe.bobparsons.dev.
Runtime Shape
ghcr.io/umami-software/umami:postgresql-v2.19.0serves the app on port3000.- Traefik terminates TLS and routes
observe.bobparsons.devover the externaltraefiknetwork (no host port is published). - Umami connects to the existing shared Postgres instance (
postgres-server) over the externalpostgres-network— this repo does not run its own database. - Telemetry is disabled (
DISABLE_TELEMETRY=1). - The deploy workflow exports secrets from Infisical to
.envvia theinfisical/infisicalDocker image (docker run --rm infisical/infisical:latest infisical export ...), so no Infisical CLI needs to be installed on the deploy host; Docker Compose substitutesDATABASE_URLandAPP_SECRETinto the container environment.
Required Forgejo Variables
INFISICAL_PROJECT_IDINFISICAL_API_URLoptional, defaults tohttps://infisical.bobparsons.dev
Required Forgejo Secrets
INFISICAL_CLIENT_IDINFISICAL_CLIENT_SECRET
Required Infisical Keys (prod environment)
DATABASE_URL—postgresql://umami:<password>@postgres-server:5432/umamiAPP_SECRET— generate withopenssl rand -hex 32
Database Provisioning (one-time, manual)
Before the first deploy, connect to the shared Postgres instance and create the database and role:
docker exec -it postgres18 psql -U postgres
CREATE DATABASE umami;
CREATE USER umami WITH ENCRYPTED PASSWORD 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON DATABASE umami TO umami;
ALTER DATABASE umami OWNER TO umami;
Making umami the database owner is the simplest fix for PostgreSQL 15+, where the public schema is owned by pg_database_owner and CREATE on public is no longer granted to PUBLIC by default: owning the database implies ownership of the public schema created inside it, which resolves the permission gap and lets Umami's migrations run without further grants.
Use the same password when setting the DATABASE_URL Infisical secret above. Umami runs its own schema migrations automatically on container startup — no separate migration step is needed.
Host Prerequisites
- DNS for
observe.bobparsons.devpoints to the Traefik host. - Docker and Docker Compose plugin are installed on the Forgejo
deployrunner host. - The Forgejo
deployrunner has Docker socket access. - The external
traefikandpostgres-networkDocker networks exist or can be created by the runner.
Deploy
Push to main or run the Deploy Umami workflow manually.
First Login
After the first deploy, open https://observe.bobparsons.dev and log in with the Umami default credentials (admin / umami). Change the admin password immediately from Settings → Profile.