# 1) Create a non-root user
adduser app
usermod -aG -weight: 600;">sudo app # 2) Basic SSH hardening (edit carefully)
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
-weight: 500;">systemctl -weight: 500;">restart ssh # 3) Firewall: allow SSH + HTTP/HTTPS
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force -weight: 500;">enable # 4) Install Caddy as a simple reverse proxy (or static server)
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y debian-keyring debian-archive-keyring -weight: 500;">apt-transport-https
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y caddy # Put a simple index page
echo 'Hello from a $5 VPS' > /var/www/html/index.html # Configure Caddy (replace with your domain)
cat > /etc/caddy/Caddyfile <<'EOF'
:80 { root * /var/www/html file_server
}
EOF
-weight: 500;">systemctl -weight: 500;">restart caddy
# 1) Create a non-root user
adduser app
usermod -aG -weight: 600;">sudo app # 2) Basic SSH hardening (edit carefully)
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
-weight: 500;">systemctl -weight: 500;">restart ssh # 3) Firewall: allow SSH + HTTP/HTTPS
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force -weight: 500;">enable # 4) Install Caddy as a simple reverse proxy (or static server)
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y debian-keyring debian-archive-keyring -weight: 500;">apt-transport-https
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y caddy # Put a simple index page
echo 'Hello from a $5 VPS' > /var/www/html/index.html # Configure Caddy (replace with your domain)
cat > /etc/caddy/Caddyfile <<'EOF'
:80 { root * /var/www/html file_server
}
EOF
-weight: 500;">systemctl -weight: 500;">restart caddy
# 1) Create a non-root user
adduser app
usermod -aG -weight: 600;">sudo app # 2) Basic SSH hardening (edit carefully)
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
-weight: 500;">systemctl -weight: 500;">restart ssh # 3) Firewall: allow SSH + HTTP/HTTPS
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force -weight: 500;">enable # 4) Install Caddy as a simple reverse proxy (or static server)
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y debian-keyring debian-archive-keyring -weight: 500;">apt-transport-https
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
-weight: 500;">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/-weight: 500;">apt/sources.list.d/caddy-stable.list
-weight: 500;">apt -weight: 500;">update && -weight: 500;">apt -weight: 500;">install -y caddy # Put a simple index page
echo 'Hello from a $5 VPS' > /var/www/html/index.html # Configure Caddy (replace with your domain)
cat > /etc/caddy/Caddyfile <<'EOF'
:80 { root * /var/www/html file_server
}
EOF
-weight: 500;">systemctl -weight: 500;">restart caddy - CPU is bursty: You may get 1 vCPU, but sustained heavy CPU can throttle.
- RAM is the real ceiling: 512MB–1GB is common. Memory spikes will crash apps before CPU does.
- Disk varies wildly: Some plans use fast NVMe, others slower SSD. Disk I/O is a hidden bottleneck.
- Bandwidth may be capped or “included”: Egress overages can ruin the “cheap” part.
- Support is minimal: At this price, you’re expected to be self-sufficient. - RAM (prefer 1GB over 512MB)
- Disk type and size (NVMe > SSD > HDD; also check if it’s local vs network storage)
- Outbound bandwidth/egress (especially if serving media or downloads)
- Region availability (latency and compliance matter)
- IPv4 included? (some providers charge extra or are IPv6-first) - Monthly flat: simple budgeting.
- Hourly with a monthly cap: good for bursty dev/test, but watch idle instances you forget. - Reverse proxy + TLS termination (Nginx/Caddy)
- Small REST API (Go, Node, Python with sane limits)
- Static site + a tiny backend
- Cron jobs / workers (web scraping, scheduled tasks)
- Personal VPN / WireGuard (if bandwidth allowances fit) - Docker stacks with many containers
- Elasticsearch / heavy databases
- WordPress with lots of plugins (it can run, but it’s often pain) - digitalocean is known for a clean UI and good docs. You’re often paying a little premium for “it just works” ergonomics, which can be worth it if you value speed over squeezing pennies.
- hetzner tends to win on raw value (especially in EU regions), but the product surface feels more “infrastructure-first” than “developer-first.” If you’re comfortable reading specs and managing your own setup, it can be hard to beat.
- linode (now under Akamai) has historically been a strong middle ground: straightforward VPS, decent network, predictable pricing.
- vultr offers lots of regions and quick provisioning; good if you need a specific location and don’t want complexity.
- cloudflare isn’t a VPS provider in the traditional sense, but it’s relevant: pairing a small VPS with Cloudflare’s DNS/proxy/CDN can reduce bandwidth load and hide your origin IP. That can make a $5 box feel bigger than it is.