Skip to content

Web Services

Available

A Web Service is a long-running container — your API, full-stack app, worker behind HTTP, anything that needs a process and CPU/RAM. Optionally attach a persistent disk that survives restarts.

Each service gets a free *.runsite.app subdomain and can serve any custom domain you attach.

Looking for plans or pricing?

Plans, CPU/RAM tiers, free-tier limits and pricing are not documented here — they live on the web app hosting page. This section covers how a service is built, deployed and run.

Runsite always runs your app as an isolated Docker container. You ship one in two ways:

  • From a Git repo — push your code, we build the image. We use your Dockerfile if there is one, otherwise we auto-detect the stack (Node, Python, Go, Java today).
  • From a registry image — point at any public or private Docker image.

Supported Git providers: GitHub, GitLab, Bitbucket.

For the full platform model — deployment lifecycle, deploy states, ephemeral filesystem, health checks — see Runtime.

Most stacks need only a few lines. Pick your runtime — Minimal gets you to a first deploy, Production is a multi-stage build with smaller images and faster cold starts.

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]

The default port is 8080. If your app listens elsewhere, change it in Settings → Build & Deploy.

Don’t have a Dockerfile and your stack is one of Node, Python, Go or Java? Push without one — Runsite will detect the project and build it for you.

Do I need a Dockerfile to deploy a web service?

Section titled “Do I need a Dockerfile to deploy a web service?”

Not for Node, Python, Go or Java — Runsite auto-detects those and builds the image for you. For any other stack, or when you want a reproducible production build, add a Dockerfile and Runsite builds it as-is.

Port 8080, bound to 0.0.0.0 (not localhost). If your app uses a different port, change it in Settings → Build & Deploy.

Why does my service fail with “did not start in time”?

Section titled “Why does my service fail with “did not start in time”?”

Usually the app isn’t listening on 0.0.0.0:8080, or a required environment variable is missing and the app crashes on boot. Check the container logs for the real error. See Troubleshooting for the full checklist.

Are files my app writes to disk kept between deploys?

Section titled “Are files my app writes to disk kept between deploys?”

No. The container filesystem is ephemeral — anything on local disk is lost on restart, redeploy or scale. Store data in managed PostgreSQL, Redis or Object Storage, or attach a persistent disk.

Can I deploy from a Docker image instead of Git?

Section titled “Can I deploy from a Docker image instead of Git?”

Yes. Point a web service at any public or private registry image instead of connecting a Git repository.

  • Runtime — container model, lifecycle, states, storage, health checks.
  • Deploying — auto-deploy from Git and manual actions.
  • Dashboard — what every tab does.
  • Domains — default subdomain and custom domains.
  • Scaling & resources — CPU, RAM, disk, autoscaling, sleep.

Front-end only?

If your project is a static site (React SPA, Astro, Hugo, plain HTML), use Static Sites instead — simpler, served from the edge, always-on.

IP geolocation by DB-IP