You spent two hours with Claude Code, and there’s a working app sitting in ~/Projects/my-thing. Now what? The deploy step is where most Claude Code tutorials end and the actual work begins. This guide picks up there.
We use Claude Code daily and ship the output to real servers. This is the exact deploy workflow we use, plus the gotchas we hit so you don’t have to.
TL;DR
| Step | Command | Time |
|---|---|---|
| 1. Install the InstaPods CLI | curl -fsSL https://instapods.com/install.sh | sh | ~15s |
| 2. Log in (browser opens) | instapods login | ~10s |
| 3. Deploy from inside your project folder | instapods deploy my-app | ~20s |
| 4. Open the live URL | instapods open my-app | instant |
Total time from a working local project to a live URL on your own subdomain: about 60 seconds. No Docker, no nginx, no SSL setup. Free pod on the Launch plan.
If you already know what InstaPods is and just want the commands, scroll to the deploy walkthrough. Otherwise the next section explains why this is different from what you’ve probably been trying.
What Claude Code actually outputs
Claude Code is great at producing finished apps with package.json (or requirements.txt, or composer.json) and a runnable entry point. What it cannot do is decide where that app should run. The output sits on your local disk:
~/Projects/my-thing/
├── package.json
├── server.js
├── routes/
├── public/
└── .env (probably)
That’s a real app. To deploy it you need:
- A server with the right runtime installed (Node 20, Python 3.12, PHP 8.3, etc.)
- A process manager so the app stays running
- A reverse proxy (nginx) routing port 80/443 to your app’s port
- SSL certificates with auto-renewal
- DNS pointing to your server
- Environment variables loaded in production
- A way to ship code updates without manual SSH
Heroku used to do all that for $7/mo with a git push heroku main. Then they killed the free tier and the value collapsed. Vercel and Netlify do most of it but cap you at serverless or static; if Claude built you a Node server with a SQLite database, those platforms don’t fit. Raw VPS gives you full control, plus 2-4 hours of nginx and certbot work every single time.
The deploy step is the wall.
Three paths to a live URL
Pick whichever fits your situation:
Path 1: Raw VPS (DigitalOcean, Hetzner, Linode)
You SSH into a fresh Ubuntu server, install Node or Python or PHP, set up nginx, run certbot, write a systemd service, and copy your code over with rsync or git. Total time: 2-4 hours the first time, 30 minutes once you have the muscle memory. Cost: ~$5/mo.
Good for: anyone who likes server work, anyone with strong opinions about their setup.
Bad for: anyone who wants to spend their time on the app instead of the deploy.
Path 2: Vercel, Netlify, Cloudflare Pages
Serverless functions plus static hosting. Free tier exists. Auto-deploys from GitHub. You’re done in 5 minutes if your app fits the model.
Good for: pure frontend, static sites, Next.js apps that don’t need a long-running server.
Bad for: Claude Code apps that ship as full Node/Python servers with local databases, background workers, or anything that needs a stable process. SQLite breaks. WebSockets are awkward. Cron is extra. Cold starts kill the snappy feel Claude Code gave you.
Path 3: InstaPods (the third option)
One command, real Linux server, HTTPS auto-issued, SSH access for when you need it. From $3/mo flat. No usage billing.
Good for: Claude Code apps that don’t fit the serverless mold. Node servers, Python APIs, PHP apps, static sites with a backend, AI workflow tools, anything self-hosted.
This is the path the rest of the post covers because it’s the path we built.
The deploy walkthrough
The full sequence from Claude Code project to live URL. Assumes you have a working app in a folder and it runs locally with one of: npm start, python app.py, php -S, or just index.html.
1. Install the CLI
curl -fsSL https://instapods.com/install.sh | sh
The script puts a binary at /usr/local/bin/instapods. Works on macOS, Linux, and WSL. No Node or Python needed; the CLI is a static Go binary.
2. Log in
instapods login
Opens your browser, you sign in (or sign up; the free pod doesn’t require a credit card), the CLI captures the auth token. You won’t need to log in again on this machine.
3. Deploy
From inside your project folder:
instapods deploy my-app
That’s the whole deploy step. The CLI:
- Detects your stack (looks at package.json, requirements.txt, composer.json, index.html). Picks the right preset (nodejs, python, php, static).
- Creates a pod on the closest region.
- Uploads your code (respects .gitignore).
- Installs dependencies (npm install, pip install, composer install).
- Starts the app (npm start, gunicorn, php-fpm, nginx).
- Assigns a subdomain at
https://my-app.<region>.instapods.appwith auto-issued SSL.
You’ll see something like:
✓ Detected nodejs (package.json with start script)
✓ Creating pod
✓ Uploading 47 files (1.2 MB)
✓ Installing dependencies (4.3s)
✓ Service running
→ https://my-app.nbg1-1.instapods.app
4. Open and verify
instapods open my-app
Opens the live URL in your default browser. If something is broken, the next section covers how to debug.
Common issues and how to fix them
”My app needs environment variables”
Claude Code usually puts secrets in a .env file. InstaPods skips .env files on upload by design (you don’t want secrets in git history). Set them via the CLI:
instapods env set my-app DATABASE_URL=postgres://...
instapods env set my-app OPENAI_API_KEY=sk-...
instapods deploy my-app # restarts with new env
Or paste them all at once in the dashboard at /dashboard/pods/<name>/env.
”It says ‘no start command found’”
The CLI looks at package.json scripts.start for Node, wsgi.py or asgi.py or app.py for Python, and tries common entry points. If yours is unusual, set a custom start command:
instapods exec my-app -- "echo 'cd /home/instapod/app && python custom_entry.py' > /etc/instapod/start.sh"
instapods reload my-app
Or use a Procfile:
web: python custom_entry.py
InstaPods reads Procfiles the same way Heroku does.
”My database isn’t persisting”
Default pods have a 10GB disk that persists across restarts. If you’re using SQLite, the file is fine. If you’re using Postgres or MySQL, install the service:
instapods services add my-app postgres
That installs Postgres inside the same pod, exposes connection details, and persists the data directory. No extra charges; databases are included in the flat plan price.
”The build takes too long and times out”
Default deploy timeout is 5 minutes. For heavy npm installs (Next.js with 800+ deps), bump it:
instapods deploy my-app --timeout 600
If it still times out, the pod likely doesn’t have enough RAM during build. Move up a plan: instapods resize my-app build (gets you 2 vCPU and 1GB RAM).
”I want auto-deploy on git push”
Connect your GitHub repo:
instapods git connect my-app https://github.com/you/your-repo
Every push to main triggers a redeploy. Or use the MCP server for direct Claude-Code-to-pod handoff (next section).
The MCP integration (Claude Code native)
InstaPods ships an MCP server. Add it to Claude Code’s config and Claude can deploy directly:
{
"mcpServers": {
"instapods": {
"command": "npx",
"args": ["-y", "@instapods/mcp"],
"env": {
"INSTAPODS_TOKEN": "your-token-from-instapods-login"
}
}
}
}
Restart Claude Code, then ask Claude to deploy your project:
“Deploy this to InstaPods. Call it
weather-api.”
Claude calls the MCP tools, the pod gets created, files get pushed, the URL comes back in chat. You stayed in the AI tool the whole time.
We built the MCP because the chat-driven deploy flow matches how Claude Code wants to work. The alternative, copying files into a separate hosting dashboard, breaks the loop.
Cost: what you actually pay
InstaPods plans are flat monthly:
| Plan | CPU | RAM | Disk | Price | Good for |
|---|---|---|---|---|---|
| Launch | 1 vCPU | 512MB | 10GB | $3/mo | Side projects, demos, low-traffic apps |
| Build | 2 vCPU | 1GB | 20GB | $7/mo | Most production Claude Code apps |
| Grow | 2 vCPU | 2GB | 50GB | $15/mo | Apps with a real database + traffic |
| Scale | 4 vCPU | 4GB | 100GB | $25/mo | Production traffic, multiple workers |
| Turbo | 8 vCPU | 16GB | 200GB | $49/mo | High-traffic apps, ML inference |
No bandwidth charges, no per-request billing, no surprise overages. Databases and SSL are included. You can resize up or down any time without redeploying.
When InstaPods is not the right fit
Honesty section. We’re not for everyone.
Skip InstaPods if:
- Your app is purely static and you want a CDN edge cache: Cloudflare Pages or Netlify is cheaper and faster at the edge.
- Your app is a Next.js project with no backend logic: Vercel’s $0 hobby tier is hard to beat.
- You need multi-region for a global production app: we run in
eu-nbgfor now. Multi-region is on the roadmap, not shipped. - You need 24/7 enterprise support with SLAs: we don’t have that yet.
For everything else, especially Claude Code apps that ship as real servers, the math and the workflow favor us.
FAQ
Can I deploy a Claude Code app for free?
Yes. The InstaPods Launch plan is $3/mo and the first pod is free for the first 7 days with no credit card. After that you add a card or the pod stops (data persists for 30 days in case you come back).
Does InstaPods work with Claude Code’s MCP feature?
Yes. We ship a first-party MCP server that lets Claude Code deploy, restart, set env vars, and check logs directly from chat. Add @instapods/mcp to your Claude Code config.
What languages does InstaPods support for Claude Code apps?
Node.js 20, Python 3.12, PHP 8.3, and static (HTML/CSS/JS). Most Claude Code projects land in one of these four. If yours needs Go, Rust, Ruby, or .NET, you can install the runtime via the package manager since pods are real Linux servers with apt.
How does InstaPods compare to Vercel for Claude Code apps?
Vercel is faster for pure Next.js. InstaPods is the better fit for Claude Code apps that ship as full Node/Python servers, need SQLite or local databases, run background workers, or use WebSockets. See InstaPods vs Vercel for the side-by-side.
Can I SSH into the server?
Yes, on every plan. The pod is a real Linux container with SSH access. instapods ssh my-app drops you into a shell. Useful for debugging, running migrations, or installing packages Claude Code didn’t anticipate.
What if Claude Code generates a Docker setup?
We don’t run Docker containers directly; pods are LXC containers (lighter weight). But if Claude Code wrote a Dockerfile, the contents map cleanly to our presets: copy the install steps, copy the start command, and InstaPods runs them natively. We have a migration guide for Docker-based projects.
How do I deploy a Claude Code app with a database?
Use instapods services add my-app postgres (or mysql, redis, mongodb) after the initial deploy. The service runs in the same pod, persists across restarts, and exposes connection details via environment variables.
Can I use a custom domain?
Yes, included on every plan. Add the domain in the dashboard, set the CNAME, SSL auto-issues.
Next steps
If you have a working Claude Code project right now and want to test the deploy in 60 seconds:
curl -fsSL https://instapods.com/install.sh | sh
instapods login
cd ~/Projects/your-claude-code-app
instapods deploy your-app
If you want to read more first, the Deploy from Claude Code hub page covers the workflow in more detail with screenshots, and the Claude Code MCP setup guide walks through the MCP integration step by step.
If you want to compare us against the alternatives before committing, InstaPods vs Vercel, InstaPods vs Railway, and InstaPods vs Heroku are all up.