# Your first deployment

You need a devpush dashboard, a Linux server you administer and a GitHub repository containing a Compose file. [Install devpush](/docs/self-hosting/) if you do not have a dashboard yet.

For a first test, use the [example app](https://github.com/hunvreus/devpush/tree/main/examples/compose-web): service `web`, port `3000`, health path `/health`.

## 1. Connect a server

In your team, open **Servers → Add server**. Run the generated command on the server and wait for **Connected**. Only owners and admins can enroll servers.

Keep the command private: its enrollment credential expires after one hour. The server needs inbound ports 80/443 for public applications. See [Servers](/docs/servers/) for requirements.

## 2. Create a project

Choose **New project**, connect your GitHub account if prompted and grant the GitHub App access to the repository. Select the repository, server and Compose file.

Add required variables and a health check path, then create the project. This saves the configuration without deploying. Production uses the repository's default branch.

devpush suggests a route when the Compose file has an unambiguous HTTP target. Confirm its service and internal port in **Settings → Routes**, or add one if none was suggested. Without a route, the app has no managed public URL. You can also change the health check path later in **Settings → Build & Deploy**.

## 3. Deploy

Open **Deployments → Deploy**, select the environment, branch and commit, then follow its logs. When it succeeds, choose **Visit**.

A push to the environment's branch deploys again automatically. GitHub webhooks require a publicly reachable dashboard; localhost supports manual deployments only.

## Troubleshooting

| Problem | Check |
| --- | --- |
| Missing repository | GitHub App installation and your repository access. |
| Installer cannot download the agent | [Agent release availability](/docs/agent-releases/) and installer output. |
| Disconnected server | Installer output and the agent's access to the dashboard. |
| Failed deployment | Build logs, required variables and Compose health checks. |
| App unreachable | Route service/port, DNS and inbound ports 80/443. |

Next: [environments](/docs/projects/), [custom domains](/docs/domains/) or [backups](/docs/backups/).
