Self-Hosted VPS
August 2026 - Present
My own server on a Hostinger VPS, home to everything self-hosted: all of MineCall (API, frontend, Control Center and LiveKit), Postgres and whatever project comes next, with Caddy as the single front door.
The problem
Pay-per-use cloud didn't add up for this pattern: LiveKit Cloud bills per participant-minute and a presence app keeps people connected all day, and the asset bucket on GCP had already cost US$33 in twenty days.
Features
- Caddy as the single front door: automatic HTTPS, one vhost per domain and a reverse proxy to each service
- Atalaya, my own monitoring panel: live CPU, memory, disk and network
- The state of the ten watched services, with memory and uptime for each
- Traffic and latency per app: requests, 5xx errors, p95 and top routes
- Server login records and an event log, read from the system journal
- Configurable threshold alerts
- systemd units with CPU and memory limits, so an ongoing call takes priority
- Local PostgreSQL 17 with a nightly backup to a private bucket
- Hardening: key-only SSH, no remote root and fail2ban
- A separate deploy key per repository, with sudoers scoped to just its own service
- A one-folder-per-project convention, so a new project always lands the same way
My responsibility
All mine: provisioning and hardening the VPS (Debian 13, key-only SSH, no root login), a one-folder-per-project convention, systemd units with CPU and memory limits, Caddy with automatic HTTPS and a vhost per domain, local PostgreSQL 17 with a nightly backup to a private bucket, and MineCall's domain in production. On top of it I built Atalaya, my own logging and monitoring panel: live CPU, memory, disk and network, the state of the ten watched services, traffic and latency per app, server logins, an event log and alerts — a single Go binary with the React frontend embedded, no agents and no exporters, reading what the machine already has (/proc, systemctl, journalctl and Caddy's access logs).
Stack
- Frontend
- Caddy as the single entry point — automatic HTTPS, per-domain vhosts, reverse proxy and static hosting; Atalaya, a React dashboard with live charts, embedded in the Go binary
- Backend
- Debian 13, systemd units with CPU/memory limits, PostgreSQL 17, LiveKit SFU, Docker, nightly pg_dump to private object storage, key-only SSH; Atalaya reads /proc, systemctl, journalctl and Caddy access logs into SQLite — no agents, no exporters