Want a cheap Ubuntu VM on Hetzner
You get a VM sized to run Dokploy and multiple small apps plus a database
Your own git-push deploy platform — on a €8.49/month box you control
A self-hosted deployment platform (Apache-2.0, 2024–) built on Docker + Traefik — point it at a git repo and it builds, deploys, and TLS-terminates your app on your own server.
The chapter that answers "where do I actually put the app I built?" — without Vercel, without a per-seat SaaS bill, and without your data leaving the EU. Dokploy is a free, open-source alternative to Vercel/Heroku/Netlify: install it on a Hetzner Cloud server, connect your git repo, and every push auto-deploys behind Traefik with automatic HTTPS. → Unlike `owning-your-app` (deciding to leave a no-code platform) or `staging-production` (the safe-promotion discipline once you're live), this chapter is the concrete "how": provision a box, install the platform, wire git, get a domain with TLS, and back it up — the one piece nothing else in this curriculum teaches.
A lab, small team, or founder who wants git-push deploys and EU-hosted data without Vercel/Heroku pricing or a US cloud dependency.
You now own the ops: OS patches, Dokploy updates, and backups are on you. Coolify is more feature-complete for multi-server setups (heavier on RAM); CapRover is simpler but has no native Docker Compose support.
Self-hosting is free forever (capped at 2 concurrent builds); an Enterprise add-on (SSO, audit logs, unlimited builds — price on request) exists if you outgrow that. A Hetzner CX33 (4 vCPU/8 GB) to run it on costs €8.49/month.
Hetzner Cloud is a German cloud provider — hourly-billed VMs, EU data residency, and cheaper per-vCPU/GB than AWS or DigitalOcean. Dokploy needs somewhere to run; this is that somewhere.
Create a Hetzner Cloud server running Ubuntu 24.04 that you can SSH into, sized to actually run Dokploy plus your apps.
ssh root@<your-server-ip>Once the server is created, this is the one command that proves it is really up.
ssh root@ and obtain a root shell.Dokploy is a free, open-source (Apache-2.0) deploy platform — the self-hosted answer to "where do I put my app" that Vercel/Heroku/Netlify answer with a bill. One shell script installs the whole control plane: Docker, Traefik, and the dashboard.
Do this first Provision a Hetzner Cloud server
Get the Dokploy dashboard live on your Hetzner server and create an admin account
curl -sSL https://dokploy.com/install.sh | shRun this over the SSH session from the previous lesson, as root.
Best viewed on desktop — tap Enlarge to read the numbered controls.
http://:3000 once the install script finishes — your control plane for every app and database on this server. Credit: dokploy.com ↗Dokploy connects to GitHub, GitLab, Gitea, Bitbucket, or Docker Hub and gives you a webhook URL. Push to the configured branch and Dokploy builds and redeploys automatically — the same shape as this curriculum's own Gitea → webhook → auto-deploy pipeline, just running on a server you control.
Do this first Run Dokploy and access its dashboard
Wire a git repo to Dokploy so a git push alone rebuilds and redeploys your app, with no manual SSH step.
Create a new ApplicationIn the Dokploy dashboard, click + New Application, then follow the prompts to select your git provider and repository; after saving, copy the generated webhook URL from the screen.
docker-compose.yml) inside a Dokploy project using Create a new Application.docker compose up.main but the deploy never triggered. Given the branch-matching behaviour above, what is the first thing to check?Dokploy writes a Traefik router for your app and sets certResolver: letsencrypt — Traefik then requests and renews the certificate for you. No certbot, no cron job, no manual renewal.
Do this first Trigger an auto‑deploy from a git push
Your app runs at a real domain over HTTPS with an automatically issued and renewed certificate
A → <your-server-ip>The DNS record to create at your domain registrar before touching Dokploy — an A record pointing your domain (or subdomain) at the server's public IP.
A Dokploy backup zips Dokploy's own Postgres database and its /etc/dokploy config directory and pushes it to an S3-compatible bucket — S3 is currently the only supported destination. This backs up Dokploy's own state (your projects, settings, domain config), not your deployed apps' data.
Do this first Run Dokploy and access its dashboard
Create automated S3 backups of Dokploy’s state and know their limits
dokdeploy-hetzner backup createEnter this command in the SSH terminal on your Dokploy server; the CLI will guide you through selecting the S3 destination you added earlier and then immediately start a manual backup. Watch for the success message confirming the .zip was uploaded to your bucket.
Want a cheap Ubuntu VM on Hetzner
You get a VM sized to run Dokploy and multiple small apps plus a database
Need password‑free access to a new Hetzner server
You can log in immediately after the server boots without a password prompt
You receive a reachable IP that you can use for SSH and later deployments
You know the server is ready for Dokploy installation
Can't reach my Ubuntu box from home
You can manage your Hetzner box directly from the terminal
Provisioning a fresh Ubuntu box
A single script provisions Docker, Traefik, Postgres and the dashboard on a fresh Ubuntu box
The install will fail if any of the required ports are already in use
You can view and manage your PaaS control plane through a web interface
First signup through the dashboard
The initial account has full control to deploy and delete any app on the server
Seeing no projects confirms the control plane is ready but nothing has been deployed yet
Need to add a service for deployment
You can register your service in Dokploy so it knows what to build and run
Need to point your code repo to Dokploy
Linking your GitHub/GitLab/Gitea/Bitbucket repository tells Dokploy where to fetch source code
The branch name must match exactly or Dokploy will reject pushes
You can watch the build process in real time to see code pull, image build, and container start
Opening the Dokploy-assigned URL proves the app is serving traffic after the build
Need your domain to point at a server
Your domain will resolve to the Hetzner server so traffic reaches your app
Can’t specify which hostname should reach my app
Dokploy knows which hostname should route to your application
Want automatic HTTPS for my site
Traefik will request and renew a Let's Encrypt cert without manual steps
The certificate is automatically fetched the first time the domain is accessed
A trusted certificate means browsers will show a secure connection indicator
Want a temporary test address without buying a domain
You can test without buying a domain, but it will only serve HTTP
Need a safe spot for Dokploy backup zip files
You can store Dokploy state backups in any S3-compatible object storage
No backup destination
Dokploy can push its backup zip to the configured S3 bucket automatically
Need to test a backup manually
Running a one-off backup lets you confirm the pipeline works before relying on the schedule
Dokploy backups do not include your apps' databases; each app needs its own backup plan
The same set on /recipes, filtered by tool and role.
The shortest path from 'I vibe-coded something' to 'it runs on my own server'.
This is exactly the stack this chapter teaches — Dokploy on Hetzner, end to end.
Upload your SSH public key in the Hetzner server‑creation form instead of setting a password. Paste the key into the "SSH keys" field before you create the server, then you can SSH directly after it boots.
Docker containers used by Dokploy need the HTTP port 80, HTTPS port 443, and the dashboard port 3000 to be unoccupied. Make sure no other service is listening on any of these ports, otherwise the installation will fail.
First create an A record at your domain registrar that points the hostname to the Hetzner server’s public IPv4 address. Then add the same domain name in the application’s Dokploy settings so Dokploy knows which host should route to that app.
Dokploy uses Traefik, which can request a Let’s Encrypt certificate for your domain when you enable HTTPS in the UI. The first time the domain is visited, Traefik fetches the cert and browsers will show a padlock once the certificate is installed.
You can back up Dokploy state to any S3‑compatible object storage bucket, such as Hetzner Object Storage. Create an S3‑compatible bucket in your provider’s console and configure Dokploy to write backup zip files there.
Hetzner CloudprojectCX33SSH public keyIPv4 address`ssh root@<ip>`DockerTraefikPostgresdashboardA recordS3‑compatible bucketAsk, share, or report — over on the Heidelberg AI community forum.