Start here
The handful of things worth knowing before your first deploy.
Which Deploy Path Should You Use? A Five-Way Decision Guide
Zip upload, git push, Docker push, prefab template, or existing image — each has a real constraint. Here's how to pick in about thirty seconds.
What Happens When You Redeploy — and Why You Get One Second to Shut Down
A redeploy stops your container, removes it, and builds a new one. Nothing overlaps, so there's real downtime — and your shutdown window is about a second.
How Ports and URLs Work — HTTPS, Raw TCP, and Custom Subdomains
HTTPS bindings get a certificate and a hostname. TCP and UDP get a host and a port that isn't the one you chose. Here's the model, and how to pick a nicer name.
"It Works Locally" — Why Your Bot Breaks the Moment You Deploy
Same code, different machine. Case-sensitive filenames, CRLF line endings, a UTC clock, and missing env vars cause most of it. Here's the checklist.
How Much CPU and RAM Does Your Bot Actually Need?
Presets run from 0.1 vCPU to 2. Start at the bottom, move up only on evidence — and know why a change seems to do nothing until you restart.
You Built an App With AI and Don't Code — How to Put It Online
Zip the folder, drop it in, answer a question about your API key. Here's what actually happens, what it can't do, and the three things that surprise people.
Discord bots
Gateway, interactions, permissions and the failures unique to bots.
Host a Discord Bot Without an HTTP Server
Deploy a Discord gateway bot as a worker with a ZIP, set its token as an environment variable, and check logs and data before leaving it running.
"This Interaction Failed" — Discord's 3-Second Rule Explained
Discord gives your bot 3 seconds to acknowledge a slash command. Defer for anything slower — and know what a redeploy does to work you deferred.
Your Discord Slash Commands Aren't Showing Up — Check These in Order
Usually the invite is missing a scope, or you registered globally and expected instant results. And registering on every boot has a limit you can hit.
Bot Keeps Restarting but Shows as Running? Read the Exit Code
A crash-looping bot reports a healthy status because the container never exits. Here's the log line that tells you the truth, and what each exit code means.
Do I Need to Shard My Discord Bot? Almost Certainly Not Yet
Sharding is required at 2500 guilds and helps far less than people expect below that. And the way you shard matters more than whether you do.
Discord Bot "Missing Permissions" (50013) — Why It Isn't Your Hosting
The bot has the permission and still can't use it. Usually a channel overwrite, or a role hierarchy rule that no permission flag can override.
Telegram bots
Polling versus webhooks, privacy mode, deep links and mini apps.
Telegram Bot Hosting: Polling vs Webhook, and What Each One Needs
Polling needs no ports and no domain. Webhooks need HTTPS on port 443 with a valid certificate. Here's how to pick, and how to run either one.
Anyone Can POST to Your Telegram Webhook — Verify It's Telegram
A webhook URL is just a public endpoint, and nothing filters who reaches it. The secret_token header is two lines of code and the only real check.
Your Telegram Bot Ignores Group Messages — It's Privacy Mode
It replies fine in DMs and goes silent in groups. That's the default, not a bug — and toggling it does nothing until you re-add the bot to the group.
Linking a Telegram Account to Your App With Deep Links
The payload is 64 characters and visible to anyone with the link. Use a one-time token, not a user ID — and store it somewhere a redeploy can't erase.
Telegram Inline Buttons That Spin Forever
The client shows a progress bar until you answer the callback query — even when you have nothing to say. Answer first, then do the work.
Hosting a Telegram Mini App — HTTPS and the Validation Step Everyone Skips
A Mini App is a web page Telegram embeds, so it needs HTTPS with a valid certificate — and an initData check on your server that most tutorials leave out.
AI agents & vibe-coded apps
Shipping what an LLM helped you write, and running agents that call one.
Deploy Apps From Your AI Coding Agent via MCP (Cursor, VS Code, Claude Code)
Connect Cursor, VS Code, or Claude Code to JustRunMy.App's MCP server and deploy, configure, and operate apps directly from your AI agent.
Hosting an AI Agent 24/7 — Calling a Model Is Cheap, Running One Isn't
An LLM agent is nearly the perfect small-container workload: idle, waiting on an API. The things that actually bite are slow calls, restarts, and state.
Your AI Wrote a Dockerfile — Check These Nine Things Before You Push
LLM-written Dockerfiles are usually valid and frequently wrong in the same ways. Three break the build, three deploy fine and then don't work.
LLM API Timeouts and Retries — What Actually Breaks on One Container
The SDK default is a 10-minute timeout retried twice. One stuck request can hold a worker for half an hour, and nothing on the platform notices.
What Hosting an AI App Costs — Spoiler, It's Not the Hosting
Estimate an AI app's hosting costs from CPU, RAM, and disk allocation. A medium API costs $4.15 a month; model API spending is separate.
Your Agent Loop Needs a Stop Condition
An agent decides for itself when it's finished, and sometimes it never does. Four limits stop a tool loop costing you money and getting OOM-killed.
Apps, APIs & stacks
A working Dockerfile and deploy path for the language you actually use.
Deploy a FastAPI App With HTTPS — and Why It 502s if You Bind to localhost
Deploy FastAPI to a container with a free HTTPS certificate. Three things decide whether the URL answers, and getting them wrong still looks like a successful deploy.
Deploying a Node.js App — the Five Signals That Decide Your Build
Zero-config deploys aren't guesswork. Your lockfile, engines field, start script, build script, and port decide exactly what the build agent does.
Deploy a Go App — Static Binary, Tiny Image, Smallest Footprint You Can Run
Go compiles to one static binary, so it deploys as a scratch-based image with almost no runtime overhead. Use a Dockerfile, not the zip uploader.
Deploying a Rust API — The Runtime Is Tiny, the Build Is the Problem
A Rust binary is close to the perfect container workload. Getting one compiled inside a small build container is the part nobody warns you about.
Deploy From GitHub Actions With Git Push — No Vendor Action Needed
Deploy from a GitHub Actions workflow using plain git push to a deploy remote. No marketplace action, no OAuth app, no SSH keys — plus the shallow-clone trap.
Deploying Phoenix on a Small Container — Single Node, and That's Fine
The BEAM is a great fit for a small container. The one thing you can't have is clustering, and most Phoenix apps don't miss it as much as you'd expect.
Data & storage
Volumes, SQLite, Postgres, and what survives a restart.
SQLite or Postgres for Your Bot? One Question Decides It
Not scale — architecture. If one process owns the data, SQLite on a volume wins easily. If two apps need it, you have no choice, because volumes aren't shared.
You Probably Don't Need Redis — Caching for Small Apps and Bots
For a single small app, an in-process cache beats a Redis container on speed, cost, and security. Here's when that's true, and what to do when it isn't.
Nothing Backs Up Your Volumes — Here's How to Do It Yourself
A volume survives redeploys, not mistakes. There are no automatic backups, so here's a dump-and-ship routine that works, and the disk trap to avoid.
Run Background Work Inside Your Web App, Not Beside It
You don't need a second app for a scheduled job. One process with a background task is simpler — and here it's often the only option that shares your data.
When Your Disk Fills Up, Every App in Your Account Stops
Disk is the one resource you don't allocate — it's measured from what you actually wrote. Go over the account limit and nothing restarts until you're under it.
Does Anyone Actually Use My Bot? Counting It Properly
Logs rotate and memory resets on every deploy, so neither can answer it. Twenty lines and a table on a volume can — if you store rollups, not events.
Running it in production
Logs, restarts, watchdogs and the day something breaks.
Your Container Logs Are Ephemeral Twice Over — Plan Around It
Logs rotate at roughly 10 MB and disappear entirely when you redeploy. Here's what's captured, what isn't, and how to keep the parts you'll need later.
There Are No Health Checks — Build the Watchdog Yourself
Nothing probes your app. Restarts react to a process exiting, not to one that's hung, so a deadlocked worker looks perfectly healthy. Here's the fix.
Your Bot Will Be Restarted — Design for It
Crashes, redeploys, and maintenance all restart your process, and you get about a second's notice. Here's how to make that a non-event instead of a bug.
Your Side Project Hit the Front Page — Surviving a Spike on One Container
You can't scale out, so the advice is different. Cache hard, make the common path cheap, and whatever you do, don't deploy in the middle of it.
Hosting Something Only You Can Reach
There's no private or internal-only option — every port binding is public from the moment your app starts. Three real approaches, and the best often opens no port.
Your App Restarts Every Few Days — That's a Memory Leak
A hard RAM cap turns a slow leak into a clock. Exit code 137, a sawtooth pattern, and the pragmatic fix people don't like admitting works.
More guides
Everything else, newest first.
Receiving Email in Your App — Why You Can't Run a Mail Server Here
Mail delivery needs port 25, and TCP endpoints get a high port number instead. Two options actually work, and one of them fits a small container perfectly.
Sending Email From Your App — Use an API, and Own the Domain
Your app's generated hostname isn't a domain you control, so you can't authenticate mail from it. That decides the architecture before anything else does.
Your Worker Doesn't Fit in a Serverless Function — and Never Will
Functions run when invoked. A bot or worker holds a connection nothing invokes. That's structural, not a limit you can raise — here's the hybrid that works.