# Quickstart: deploy a GitHub repo to a VPS in 5 steps Deploy a GitHub repo to a fresh Ubuntu VPS in five steps: sign in, add the server with one command, add the repo, review the plan, and deploy it live. Sign in with GitHub, run the Add server command on a fresh Ubuntu LTS server, pick your repository, check the plan ox detected, and press Deploy. ox builds the app on your server and starts it as a systemd service behind Caddy. Traffic moves to it once its health check passes. A simple repo needs no config file. To try ox before you deploy your own app, fork one of the [example projects](https://console.t12.sorv.dev/docs/examples). The five steps, each with what to press or read in the dashboard: sign in with GitHub, add a server by running the command it shows as root, make a project from the repository, check what ox will run, and deploy. Beside each is the command that does the same from a terminal. ## Before you start You need these. ox installs everything else. - A GitHub account and a repository with an app in it. - A fresh Ubuntu LTS server with at least 1 GB of memory, 10 GB of free disk, ports 80 and 443 free, and IPv4 internet access. - Root login to that server over SSH, with your own key or the root password. ox turns password login off, so if the server has no key of yours, Add a server can put your GitHub SSH keys on it. ## 1. Sign in with GitHub Open [the sign-in page](https://console.t12.sorv.dev/login) and press **Continue with GitHub**. ox asks GitHub only for what it needs to read your repositories and get push events. ## 2. Add a server In the dashboard, press **Add a server**. Three short steps follow: what the server needs, how you will log in once ox turns password login off (your SSH keys from GitHub, or the key the server already has), and **Get my command**, one command with a fresh token in it. Run it on the server as root. The page shows when the server connects. On the server, as root: ```sh curl -fsSL https://deploywithox.com/install/ | sudo bash ``` The script installs the ox agent and Caddy. When it finishes, the server shows up in the dashboard. The token in the command works once and expires, so copy a new command from the dashboard for each server. ## 3. Add the repository as a project Press **New project**, pick the server, pick the repository, and press **Continue**. You can also do this from a terminal. Install the ox CLI and sign in once. The steps below show the command for each button. The same from a terminal: ```sh curl -fsSL https://deploywithox.com/install.sh | sh ox login ox new --server ``` ## 4. Review the plan The **What ox will run** card shows the start command, build steps, services and variables ox detected from the repo. Fill in what it still needs, such as a `SECRET_KEY`. [Variables](https://console.t12.sorv.dev/docs/operate/variables#set) explains how to set a secret. If detection got something wrong, add an [ox.toml](https://console.t12.sorv.dev/docs/config) to the repo for just that part. The [framework guides](https://console.t12.sorv.dev/docs/guides) show a complete one for Django, Next.js, FastAPI, Node, Laravel, Rails and static sites. Check the repo before the first deploy: ```sh ox check # offline: validate ox.toml, show the plan and missing variables ox review # what the first deploy still needs ``` ## 5. Deploy and follow the log Press **Deploy**, or run the command below. The log streams while ox builds, migrates and starts the new release. Traffic switches once the health check passes. Deploy from a terminal: ```sh ox deploy --wait # stream the run, exit with its result ox logs --follow # the app's logs ``` If the run fails, the log names the failed step and the fix, and nothing changes for your visitors. [Troubleshooting](https://console.t12.sorv.dev/docs/troubleshooting) covers the common failures. ## Next steps after your first deploy - [Add a custom domain with HTTPS](https://console.t12.sorv.dev/docs/operate/domains): create one A record and Caddy gets the certificate. - [Read your app's logs](https://console.t12.sorv.dev/docs/operate/logs) live, or search them. - [Roll back a deploy](https://console.t12.sorv.dev/docs/operate/rollback) that went wrong, without a rebuild. - [See your daily backups](https://console.t12.sorv.dev/docs/operate/backups) and add an S3 bucket. - [Use the CLI](https://console.t12.sorv.dev/docs/cli) for everything the dashboard does. - [See what ox locked down](https://console.t12.sorv.dev/docs/security) on your server, and check it yourself. The [Operate](https://console.t12.sorv.dev/docs/operate) section covers the rest of running your app. Last updated 2026-10-08. The page as HTML: https://console.t12.sorv.dev/docs/quickstart