Browse docs
Deploy from a GitHub repository
Build and run a repository with a Dockerfile, with automatic redeploys on every push.
Updated
On this page
Connect a GitHub repository and BitQate builds it from its Dockerfile, runs it, and redeploys automatically whenever you push to the chosen branch.
1. Pick the repository
- Go to New deployment and pick GitHub Repository.
- Choose where the code comes from:
- Your Repos: click Connect GitHub and authorise BitQate. You can then pick any repository your account (or its organisations) can access, including private ones, and we set up the webhook for automatic deploys.
- Public: search for any public repository without connecting an account.
- Under Build Settings, set the Branch (pushes to it trigger deploys) and the Dockerfile Path if it isn't
Dockerfilein the repository root.
No Dockerfile yet?
BitQate detects this and offers guided setup. It generates a starting Dockerfile for your project, which you can review and edit. We then commit it straight to the selected branch so the build can run.
2. Make your app listen on the right port
Inside the container, your app must listen on port 8000 on all interfaces (0.0.0.0). The PORT environment variable is set to 8000, so reading PORT is the most portable approach:
// Node.js (Express)
app.listen(process.env.PORT || 8000, '0.0.0.0');
# Python (gunicorn)
gunicorn app:app --bind 0.0.0.0:${PORT:-8000}
Apps that listen only on localhost/127.0.0.1, or on a hard-coded port like 3000, won't be reachable.
3. Deploy
Pick Resources and a Location, check the Manifest, and press and hold Hold to deploy repository. Every build runs through three visible phases:
- Clone repository
- Build image
- Start container
The build output streams live. If a phase fails, the log shows the exact error from git or docker build.
After the first deploy
- Automatic deploys: every push to the branch rebuilds and restarts the app.
- Git Deploy tab: build history, live build logs and manual redeploys.
- Startup tab: add environment variables, such as
DATABASE_URLor API keys, instead of committing them to the repository. Restart to apply. - Console: your app's runtime output.
Tips
- Keep builds fast with a
.dockerignore(for examplenode_modules,.git, build output) and by copying your dependency manifests before the rest of the source, so dependency installation is cached. - Keep state out of the container. Anything written inside it is lost when a new build replaces it. Use a database for persistent data.
- Private repositories need the connected GitHub account to have access. If access is revoked, reconnect GitHub.
Still stuck?
Our team can look at your specific setup.