Deploy your first app

Deploy an app from any source with one wizard.

Deploying is one wizard with three cards. Only the middle card changes with the source you pick. The build runs on the server you choose, never on the control plane.

Deploy it

Open the wizard

On the Overview, open Add new, then Application.

Pick where the code comes from

Five sources: GitHub, Git, Docker Image, Compose and Upload. Click one to go to the next card. Template opens the catalogue instead.

The New app wizard, first step: the five sources plus Template

You can also drag an archive onto the Overview or onto the wizard. Deplo opens the Upload step with the file and the name already filled in.

Fill in that source

This is the only step that changes with the source.

GitHub source step, the Connect GitHub call to action shown when no App is connected yetThe 'Use a repository URL' path

If no GitHub App is connected yet, click Connect GitHub and follow GitHub's screens. Deplo creates the App for you, nothing to copy and paste. Choose the repositories it may see, then pick the repository and branch. See GitHub.

Set up the app

GitHub and Git only. Deplo has already read the repository, so this card is filled in:

  • App name, taken from the repository.
  • The framework it found, and the container port that framework uses.
  • Build command and Deploy command, read from your package.json and written for your package manager. Reset empties a field and lets the builder decide.
  • Automatic deployments, on, so every push to that branch deploys.

Deploy

Click Deploy, bottom right. The server, the URL and the build method are already set. For a repository or an upload, the agent detects the framework and builds an image with Railpack by default, so you need no Dockerfile.

You land on the live build log. Closing the tab or reloading the page does not cancel anything.

What is under Advanced

Every card with the Deploy button has an Advanced drawer. It shows the target server on its label.

SettingWhat it is
Deploy toWhich server runs it. A single-machine install has one, already picked.
Environment variablesType them, or tick the team's shared variables. Both reach the first build.
Build methodRailpack, Nixpacks, a Dockerfile, or a static site, with its version and the container port.
PortDocker images only: the port routing uses, read from the image and editable here.
Build pathThe sub-folder to build from, for a monorepo.
Build onAnother server to build on. Automatic uses a build server if you have one.
GitDeploy on push or on tag, watch paths, submodules.
Extra compose flagsCompose stacks only: what to append to docker compose up.

What you get

When the badge turns Running, the app header shows the production URL and a Visit button.

What you get once it is running: production deployment, domain, status and build time

That first URL is a free deplo.site hostname that points at your server with no DNS setup. It is served over plain HTTP, because a deplo.site hostname cannot have a certificate. See Add a domain for a hostname with HTTPS.

The tabs you now have

TabWhat is there
OverviewThe production deployment, the last four builds, the URL
DeploymentsEvery build, with Redeploy, Rollback and Delete
DomainsAdd your own hostname
EnvironmentVariables for this app
LogsWhat the container is printing, live
MonitoringCPU, memory, network and disk for this app
BackupsSchedules and restores
SettingsSource, build, storage, resources, access, danger zone

Console, Cron jobs and Pull requests appear once you turn them on or once they have something to show.

Good to know

  • The name is permanent. The display name can change, the slug used in URLs and volume names cannot.
  • The first build is the slow one. Later builds reuse the server's build cache. Docker Image apps never build.
  • A private repository needs a connection, not a key in the URL. Connect the provider once in Settings -> Git and every app reuses it.
  • A private registry needs credentials in Settings -> Registries, not in the image reference.
  • Error means the last deploy failed, not that the app is down. See App status.

Troubleshooting

SymptomWhat to check
The build fails on a missing commandYour repository has no build or start script, so the builder guessed. Set both in Settings -> Deployments. Applies to GitHub, Git and Upload.
The app starts and the URL times outThe container listens on a different port than the one Deplo routes to. Fix the port in Settings -> Deployments, or per hostname in Domains.
The repository picker is emptyThe GitHub App has no access to it. Click Manage connected apps and grant the repository on GitHub.
pull access denied on a Docker Image appThe image is private and no registry credential matches. Add one in Settings -> Registries.

More in Deploys and builds.

Next steps

Did this page help you?

On this page