Deploying Apps

Deploying Your First App

Go from a GitHub repo to a live HTTPS URL.

This walks through the fastest path: a GitHub repo to a live URL, in Simple mode. Everything here also works in Advanced mode — you'll just see more optional fields along the way.

From Settings (or the New App form), click Continue with GitHub. This uses the same device-authorization flow the gh CLI uses: DeployOS shows you a short code, opens github.com in your browser, and polls in the background until you approve it — no pasting a personal access token. Once connected, the New App form gets a repo picker instead of a bare URL field. See Connecting GitHub for the full walkthrough, including the token-based fallback.

You can skip this and just paste a repo URL directly, including a private git@github.com:... SSH URL — see the note on deploy keys below.

2. Create the app

Go to Applications → New App and fill in:

  • App name — used for the container name and, by default, its DNS alias inside the network.
  • Repository — pick from the GitHub list, or paste a URL.
  • Custom domain (optional) — leave blank for now if you don't have DNS ready; you can add it later from the app's Config tab.
  • Environment variables (optional) — anything your app reads at runtime. See Environment Variables & Secrets.

In Simple mode that's the whole form. Advanced mode also shows branch, service name, container port, health-check path, replica count, and build method — DeployOS picks sensible defaults for all of them (Railpack build, main branch, port auto-detected).

3. Deploy

Click Create, then Deploy on the app's Deploy tab. You'll see live streamed output:

  1. Clone or pull the repo.
  2. Write your environment variables into .env on the server.
  3. Build — either from your Dockerfile, or via Railpack if you don't have one.
  4. Start the container(s) and attach them to the shared edge network.
  5. Generate and publish the reverse-proxy route for your domain (or a default one if you haven't set a custom domain yet).
  6. A soft health check pings the app inside the network and warns (without failing the deploy) if it doesn't answer.

When it finishes, your app is live. If you set a custom domain, DeployOS also handles the SSL certificate automatically — see Domains & SSL.

Private repositories

If your repo URL starts with git@, the app shows a Get deploy key helper: it generates an SSH key pair on the server and gives you the public half to add under the repo's Settings → Deploy keys on GitHub. This lets that one server clone that one private repo without granting broader account access.

Monorepos

If your app lives in a subfolder rather than the repo root, set Root directory (in Advanced options) to that subfolder. DeployOS builds and deploys from there — one app per subfolder is the supported pattern for a monorepo.

Next: Build Methods explains what actually happens during that "build" step, and One-Click Templates covers deploying something you didn't write yourself.