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.
1. Connect GitHub (optional, but recommended)
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:
- Clone or pull the repo.
- Write your environment variables into
.envon the server. - Build — either from your
Dockerfile, or via Railpack if you don't have one. - Start the container(s) and attach them to the shared edge network.
- Generate and publish the reverse-proxy route for your domain (or a default one if you haven't set a custom domain yet).
- 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.