Overview
A VPS (Virtual Private Server) is the sweet spot for most indie developers, small teams, startups, and anyone who wants full ownership without managing cloud complexity. Applad connects over SSH, synthesizes and applies a Docker Compose configuration from your project config, manages everything, and leaves. No persistent agent. Just Docker containers running your app.Supported Providers
Any machine you can SSH into:- DigitalOcean Droplets
- Hetzner Cloud
- Linode
- AWS EC2 (as VPS, not platform)
- GCP Compute Engine (as VPS, not platform)
- Bare metal servers
- Home servers
- Raspberry Pis
- On-premise servers
A single mid-range VPS can comfortably run a production Applad instance serving thousands of users.
Prerequisites
On Your VPS
- Docker installed — the only requirement
- SSH access — with your public key added to
~/.ssh/authorized_keys - Firewall configured — ports 80, 443 open for web traffic
On Your Machine
- Applad CLI installed
- SSH key registered — your private key used for authentication
- Project configured —
applad.yamlwith environment targets
Agentless Architecture
Applad is agentless — there is no daemon on your servers. The agentless flow for a typical deployment:- Zero persistent footprint beyond Docker containers
- No agent version mismatch issues
- Works on any machine you can SSH into
- Smaller security surface — no persistent daemon
- Standard Docker tooling for inspection
Configuring VPS Targets
Define your VPS environments inproject.yaml:
project.yaml
You can move along the deployment continuum without changing application code. Only the environment config changes.
First Deployment
1. Preview the Deployment Plan
Always dry-run first:- Every service that would start or restart
- Every config change
- Every migration pending
- Every cloud resource that would be provisioned
- Every SSH connection that would open
2. Apply the Deployment
- Validate all
${VAR}references are satisfied - Check your SSH key has the required scope
- Connect to the VPS over SSH
- Synthesize
docker-compose.ymlfrom your config - Apply changes in dependency order
- Produce a run recap
3. Review the Recap
The Operational Contract: If
--dry-run showed it, it happens. If it didn’t show it, it doesn’t happen.Environment Parity
The same Docker Compose model runs everywhere:Idempotent Operations
Runningapplad up twice produces the same result as running it once. This is guaranteed, not aspirational.
Each resource has an explicit idempotency strategy:
- Containers — compared by image digest and environment hash
- Migrations — tracked by checksum, never re-applied
- Config — compared against last-applied signature
- Cloud resources — checked for existence before provisioning
Drift Detection
Check if reality matches your config without changing anything:Selective Reconciliation
Reconcile only what you need:database,tables,storage,bucketsfunctions,workflows,messagingflags,deployments,realtime,analytics
Access Control
VPS deployments require SSH key scopes:Secrets Management
Secrets for VPS environments live in the admin database, not.env files:
Monitoring and Debugging
View Service Status
SSH to your VPS and use standard Docker tools:Everything is inspectable with tools your team already knows. No Applad-proprietary runtime.
Run Recap History
Everyapplad up is logged with full attribution:
Emergency Rollback
Revert to the last working config:SSL and Domain Management
Applad uses Caddy for reverse proxy and automatic SSL:deployments/web-production.yaml
- Automatic HTTPS via Let’s Encrypt
- Certificate renewal
- HTTP → HTTPS redirect
- SSL termination
Cost Optimization
A typical production setup:- Hetzner CPX21 — 3 vCPU, 4 GB RAM, €8.46/month
- Handles — 1000+ concurrent users, millions of requests/month
- Predictable costs — no per-request pricing, no surprise bills
- AWS Lambda + RDS + S3 + API Gateway = hundreds per month
- VPS = flat rate, full control
Scaling Your VPS Deployment
Start simple, scale as needed:Vertical Scaling
Resize your VPS through your provider’s dashboard. Applad adapts automatically:Horizontal Scaling
Add multiple VPS instances behind a load balancer:project.yaml
Database Scaling
Switch to a managed database without code changes:database/database.yaml
Next Steps
- Add cloud adapters for S3 storage or RDS
- Learn about Docker Compose synthesis
- Set up deployment pipelines with
applad deploy run