There are two kinds of hosting. Platform hosting (Vercel, Netlify, Railway) gives you zero config but no server access. VPS hosting (DigitalOcean, Hetzner) gives you full SSH access but expects you to configure everything yourself.
Most developers want something in between: SSH into a real Linux server, run whatever they want, but skip the nginx config, SSL certificates, firewall rules, and process manager setup.
That middle ground exists. Here’s what it looks like.
The VPS Configuration Tax
When you spin up a VPS and SSH in, you’re looking at 6-8 tasks before your app is reachable:
- Install your runtime - Node.js, Python, PHP, or whatever your app needs
- Configure nginx - write a reverse proxy config, set up server blocks, handle static file serving
- Set up SSL - install certbot, configure auto-renewal, update nginx to use the certs
- Configure the firewall - UFW rules for ports 80, 443, 22, and your app port
- Set up a process manager - PM2, systemd, or supervisord to keep your app running after SSH disconnects
- Configure DNS - point your domain to the server IP, wait for propagation
- Set up log rotation - before your disk fills up with access logs
- Handle updates - keep the OS, runtime, and packages patched
That’s 2-4 hours of work for a developer who’s done it before. Longer for someone doing it the first time. And you do it again for every new project.
The frustrating part: none of this is your app. It’s infrastructure. Your app was done 3 hours ago.
What Platform Hosting Gets Wrong
Vercel, Netlify, and Railway solved the config problem. Push code, get a URL. No nginx, no SSL, no firewall.
But they took away the server. You can’t:
- SSH in to debug a production issue
- Check disk usage or running processes
- Install system-level dependencies
- Run a cron job
- Use SQLite (it needs a persistent filesystem)
- Tail logs in real time
- Run background workers alongside your web server
For frontend-only apps, that’s fine. For anything with a backend, persistent state, or system-level needs, you need a real server.
The Middle Ground: SSH Without Config
What if you could get a server that’s already configured? Runtime installed, nginx proxying to your app port, SSL provisioned, firewall locked down, domain assigned - all before you SSH in for the first time.
That’s the model InstaPods uses. Here’s what the workflow looks like:
# Deploy your app
instapods deploy my-app --preset nodejs
# SSH in whenever you need to
ssh instapod@my-app.nbg1-1.instapods.app
The first command gives you a running server with:
- Node.js 20 installed
- Nginx configured as reverse proxy
- SSL certificate provisioned
- Domain assigned (custom domain support included)
- Firewall configured
- Process management handled
The second command drops you into a real Linux shell. Full SSH access. You can install packages, edit files, check processes, tail logs - whatever you’d do on a VPS.
What You Can Do With SSH Access
Having SSH access to your hosting server matters for things you can’t do through a deploy pipeline:
Debug production issues in real time
# Check what's actually running
ps aux | grep node
# Watch logs as requests come in
tail -f /var/log/app.log
# Check memory and disk
free -h
df -h
Install system dependencies
# Need ImageMagick for image processing?
sudo apt-get install imagemagick
# Need FFmpeg for video transcoding?
sudo apt-get install ffmpeg
# Need a specific library for Python ML?
sudo apt-get install libopenblas-dev
Run one-off scripts
# Database migration
node scripts/migrate.js
# Data import
python3 scripts/import-data.py
# Cache warmup
curl http://localhost:3000/api/warmup
Use SQLite
SQLite needs a persistent filesystem. Serverless platforms can’t run it reliably because the filesystem isn’t guaranteed to persist between invocations. With SSH hosting, SQLite works exactly like it does on your local machine.
How to Choose
Here’s a quick decision framework:
Use platform hosting (Vercel/Netlify) when:
- Your app is a static site or frontend-only
- You don’t need server access
- You don’t need persistent storage
- Your framework is officially supported
Use a raw VPS when:
- You need custom kernel modules or hardware access
- You’re running multiple services with complex networking
- You have a dedicated DevOps team
- You enjoy server administration (some people do)
Use SSH-enabled managed hosting when:
- You want server access without the config work
- Your app has a backend (Node.js, Python, PHP)
- You use SQLite or need persistent filesystem
- You want to debug production issues via SSH
- You’re a developer, not a DevOps engineer
The Cost Comparison
| Hosting Type | Monthly Cost | SSH Access | Config Required | Time to Deploy |
|---|---|---|---|---|
| Vercel (Pro) | $20/mo | No | None | 2 min |
| DigitalOcean Droplet | $6/mo | Yes | 2-4 hours | 2-4 hours |
| Railway (Starter) | ~$5-15/mo | No | None | 5 min |
| InstaPods (Launch) | $3/mo | Yes | None | 60 seconds |
The raw VPS is cheapest per dollar, but your time has a cost. If you value your time at $50/hr and spend 3 hours on server config, that $6/mo Droplet cost you $156 in the first month.
Getting Started
If you want SSH access without the configuration overhead:
- Deploy your app:
instapods deploy my-app --preset nodejs(or python, php, static) - Your app is live with SSL, domain, and nginx - all configured
- SSH in anytime:
ssh instapod@my-app.nbg1-1.instapods.app
Your server, your rules - without the DevOps tax.