Installation
Run Pulsimo on your own server with Docker Compose, from published images or from source.
Pulsimo runs on your own server with Docker Compose. Everything it needs, including PostgreSQL, Redis, VictoriaMetrics and VictoriaLogs, starts in the same Compose project, so one Linux machine is enough to get going.
Requirements#
| Minimum | Recommended for production | |
|---|---|---|
| CPU | 4 vCPU | 8 vCPU |
| Memory | 8 GB | 16 GB |
| Disk | 20 GB free | 50 GB SSD, more if you keep long metric and log history |
| Software | Docker 20.10+ with Docker Compose v2 | the same |
| OS | Linux (Ubuntu 20.04+, Debian 11+ or similar) | the same |
Browsers reach the web app on port 3000 and the API on port 8080. Both can be
changed in .env. Check that Docker works before you start:
docker --version
docker compose versionChoose how to run it#
| Published images | From source | |
|---|---|---|
| Compose file | docker-compose.prod.yml |
docker-compose.yml |
| What happens | Pulls ready-made pulsimo/* images |
Builds every service on your machine |
| Setup script | ./setup-prod.sh |
./setup.sh |
| Best for | Servers, trying Pulsimo out | Developing Pulsimo itself |
Both use the same .env file and behave the same once running. The rest of this page uses
the published images; for a source build, drop -f docker-compose.prod.yml from the
commands.
Install with the setup script#
The script checks Docker and the machine's resources, detects the server's IP address,
writes .env with freshly generated secrets, starts every service and waits until the web
app and the API answer.
chmod +x setup-prod.sh
./setup-prod.shWhen it finishes, open http://<server-ip>:3000 and continue with
First sign-in.
Install by hand#
-
Create the configuration. Start from the template that ships next to the Compose file:
cp .env.example .env -
Set the address and the secrets. At a minimum, set the address people will use and replace the three secrets:
HOST_IP=192.168.1.100 # the server's IP or name POSTGRES_PASSWORD=<openssl rand -base64 24> JWT_SECRET=<openssl rand -base64 32> METRICS_SECRET_KEY=<openssl rand -base64 32>HOST_IPmatters: the web app calls the API athttp://HOST_IP:8080, so with the defaultlocalhostnobody but the server itself can sign in. Behind a domain or HTTPS, setNEXT_PUBLIC_API_URLandNEXT_PUBLIC_WS_URLinstead (see Configuration). -
Start Pulsimo.
docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -dThe
migrationscontainer prepares the database and exits; every other service waits for it and for PostgreSQL to be healthy. -
Check that everything is up.
docker compose -f docker-compose.prod.yml ps curl -s http://localhost:8080/health
First sign-in#
- Open
http://<HOST_IP>:3000. - Click Register and create your organization. The first account is its administrator.
- Add someone else as an administrator too (Users → Add user), so you are never locked out of user management. See Users and access.
Then follow the Quick start to add your first endpoint and alert channel.
What runs#
| Service | What it does |
|---|---|
frontend |
The web app (port 3000) |
api-gateway |
REST API and live updates for the web app (port 8080); log ingestion |
checker |
Runs endpoint checks and evaluates monitors that use metrics |
notification |
Sends alerts to Slack, Discord, Teams, Google Chat, email and webhooks |
metrics-collector |
Scrapes metric sources, discovery, SLOs, anomalies, capacity, alarm rules |
dependency-tracker |
Builds the dependency map |
maintenance-scheduler |
Retention, roll-ups and database upkeep on a schedule |
migrations |
Applies database migrations on start, then exits |
postgres |
Configuration, checks, incidents and users (PostgreSQL 17) |
redis |
Live updates and events between services |
victoriametrics |
Stores metrics (internal only) |
victorialogs |
Stores logs (internal only) |
vmalert |
Evaluates the recording rules Pulsimo generates |
How they fit together is on the Architecture page.
Upgrade#
Published images are tagged with a version. Set the one you want in .env and recreate
the services:
PULSIMO_VERSION=<new version>docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -dDatabase migrations run automatically on start. To roll back, set the previous version and run the same two commands. Take a database backup before upgrading (see Running in production).
Stop or remove#
docker compose -f docker-compose.prod.yml down # stop, keep all data
docker compose -f docker-compose.prod.yml down -v # stop and DELETE all datadown -v removes the volumes with your database, metrics and logs. There is no undo.
Next steps#
- Quick start: your first endpoint, alert channel and metric source.
- Configuration: every
.envvalue. - Running in production: HTTPS, firewall, backups.