Skip to content

Web Services

Available

A Web Service is a long-running container: your API, a full-stack app, a 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 and we build the image, using your Dockerfile if there is one and auto-detecting the stack (Node, Python, Go, Java today) if there isn’t.
  • From a registry image: point at any public or private Docker image.

Supported Git providers: GitHub, GitLab, Bitbucket.

For the full platform model, covering the deployment lifecycle, deploy states, the ephemeral filesystem and 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 and 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, so 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 covers the container model, lifecycle, states, storage and health checks.
  • Deploying covers auto-deploy from Git and the manual actions.
  • Dashboard walks through what every tab does.
  • Domains covers the default subdomain and custom domains.
  • Scaling & resources covers CPU, RAM, disk, autoscaling and sleep.

Front-end only?

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

IP geolocation by DB-IP