Getting started
Deploy your first app
Connect GitHub, import a repository, check what was detected, and get a live HTTPS address.
Connect GitHub
The panel deploys from GitHub through a GitHub App of your own, which your server creates under your GitHub account or an organization. The app gives the panel access to the repositories you choose, sends it a signed webhook on every push, and lets GitHub show each commit's deploy status. The server never holds git credentials, and the app's private key never leaves the server.
- Open New project. The first time, it asks you to connect GitHub.
- Create the app on GitHub's page. For an organization, enter its name first. GitHub sends you back to the panel.
- Install the app on the repositories you want to deploy. You can add more later from Settings → GitHub.
A public repository can also be deployed from its URL, without connecting GitHub.
Import a repository
- Pick the repository.
- If the app lives in a folder of a monorepo, set the root folder.
- The panel reads
package.jsonand the lockfile and works out the framework, the package manager, the build command and how the app runs. Configure shows what it found, and every value can be changed. See Project settings. - Add environment variables if the app needs them. You can paste a whole
.envfile. - Press Deploy.
The deployment page streams the build log live. When it's done, the app is live at https://<app>.<apps domain>, like https://my-app.203-0-113-7.sslip.io.
Push to deploy
From now on, every push to the project's branch deploys on its own, and GitHub shows its status next to the commit. Redeploy on the project's page builds the latest commit again, and every past deployment can be rolled back to in one click. Deployments explains each step.
Before you go live
Keep data in
DATA_DIR. Each deploy builds into a fresh folder, and that folder can't be written once the app runs. The one folder that survives deploys isDATA_DIR(/srv/apps/<app>/data). Put SQLite databases and uploads there, reading the path fromprocess.env.DATA_DIR:const dataDir = process.env.DATA_DIR || path.join(process.cwd(), "data");Listen on
PORT. The server setsPORTandHOST(127.0.0.1) for your app. Next.js, Nuxt and most frameworks use them on their own; a custom server should listen onprocess.env.PORT.Add your domain on the project's Domains page.
Turn on backups before real data arrives.