# Deploy an app from GitHub

> Connect a repository once. Every push after that deploys itself.

Source: https://docs.dashfordevs.com/v1/cloud/deploy-an-app · Topic: DashForDevs Cloud · Updated: 2026-11-07

1.  **Connect GitHub.** In **cloud.dashfordevs.com → App Platform**, choose **Connect to GitHub** and install the DashForDevs \[GitHub App\](https://docs.github.com/en/apps/using-github-apps/installing-a-github-app-from-a-third-party) on your account or organization. Pick which repositories it may see.
    
2.  **Create an app.** Choose the repository, the branch and, for a monorepo, the source folder.
    
3.  **Check the build settings.** If the repository has a `Dockerfile`, we use it. Otherwise we detect the language from its files (`package.json`, `requirements.txt`, `pyproject.toml`, `go.mod` and others) and suggest build and run commands you can edit. Set the port your app listens on and a health check path.
    
4.  **Add environment variables** (below), and attach a Cloud database if it needs one.
    
5.  **Create.** We fetch the commit, build an image, and start it behind our load balancer. Follow the build and deploy logs live.
    

```dfd-diagram
{
  "type": "flow",
  "title": "From git push to live",
  "layout": "LR",
  "nodes": [
    { "id": "push", "label": "git push", "kind": "person" },
    { "id": "gh", "label": "GitHub webhook", "kind": "event", "detail": "Signed by GitHub; we verify it before doing anything." },
    { "id": "build", "label": "Build", "kind": "service", "detail": "Your commit is fetched and built into an image in an isolated build job." },
    { "id": "registry", "label": "Image", "kind": "data", "detail": "Stored in your app's private image repository." },
    { "id": "release", "label": "Release", "kind": "service", "detail": "A new version starts. Traffic moves only when its health check passes." },
    { "id": "live", "label": "Live", "kind": "state", "detail": "Previous version kept for rollback." }
  ],
  "edges": [
    { "from": "push", "to": "gh" },
    { "from": "gh", "to": "build" },
    { "from": "build", "to": "registry" },
    { "from": "registry", "to": "release" },
    { "from": "release", "to": "live" }
  ],
  "steps": [
    { "title": "You push", "focus": ["push", "gh"], "text": "A push to the app's branch notifies Cloud." },
    { "title": "We build", "focus": ["build", "registry"], "text": "Dockerfile if present, otherwise detected from your files." },
    { "title": "We release safely", "focus": ["release", "live"], "text": "The new version must pass its health check before it gets traffic. If it fails, the old one keeps serving." }
  ]
}
```

## Environment variables

Set them per app. Secret values are encrypted, masked in the console, and injected when the app starts; they never appear in build logs. A change triggers a redeploy, and the change is recorded with the variable **names** that changed, never the values.

## Custom domains

Add your domain to the app, then create the CNAME record we show you at your DNS provider. We issue and renew the TLS certificate.

## Logs, history and rollback

Each app has build, deploy and runtime logs, the list of deployments with their commits, and its activity history. Roll back by redeploying an earlier deployment.
