Start
Quickstart
From a fresh server to a running app with a database, in about fifteen minutes. You need a Linux server you control and, for HTTPS, a domain.
What you need
| Server | Any machine you control — a VPS, a mini PC, a spare laptop. A recent Ubuntu LTS, amd64 or arm64, with root access. |
|---|---|
| Network | Ports 80 and 443 open to the internet, and an A record pointing at the server for each domain you attach. (Can't open ports — a home or office connection, say? There is an optional tunnel setup.) |
| Code | A git repository (GitHub, GitLab or Gitea), or just a container image. |
1. Install
On the server, as root:
curl -fsSL https://deploymate.link/install \ | sudo [email protected] bash
The installer downloads the release for your CPU and verifies its SHA-256 against the release's checksums.txt — it stops on a mismatch. Then it installs Docker, opens only SSH, 80 and 443 in the firewall, creates a deploymate service user, starts Traefik (the only thing listening publicly) and a systemd service. It is safe to run again.
Pin a version with DEPLOYMATE_VERSION=v0.1.0. Your email is used only for Let's Encrypt.
git clone https://github.com/bjboss007/deploymate && cd deploymate make build # bin/deploymate GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o deploymate-linux ./cmd/deploymate scp deploymate-linux deploy/ root@your-server:/tmp/ # deploy/ holds the installer files # on the server: [email protected] bash /tmp/deploy/bootstrap.sh /tmp/deploymate-linux
2. Create your login
sudo -u deploymate DEPLOYMATE_DATA_DIR=/var/lib/deploymate /usr/local/bin/deploymate setup-admin
It asks for an email and a password. There is one owner account. (The service gets its data folder from its systemd unit; a command you run by hand needs it set, as above.)
3. Open the dashboard
The dashboard listens on 127.0.0.1:8080 on the server — not on the internet. To reach it from your laptop, tunnel in:
ssh -L 8080:127.0.0.1:8080 deploymate@your-server-ip
then open http://127.0.0.1:8080. To serve the dashboard itself on a domain with HTTPS, follow the server setup guide.
4. Deploy something: an image
- On the home page, New project, then New app inside it.
- On the app's page choose Deploy, enter an image such as
nginx:1.27-alpineand the port it listens on (80), and deploy. - Watch the log. When it says
deployed ✓the app is running; its preview address is on the app page.
5. Deploy from git
- On the app's Settings → Source & build, enter the repository URL and branch and press Connect repo. DeployMate generates a deploy key and a webhook secret.
- In the repository, add the deploy key (read-only). The app's Overview shows it with a Copy button.
- Choose how it builds: leave it for a
Dockerfile, or pick a runtime (Node.js, Python, Go, Ruby, PHP, Java, Rust, Deno, Elixir, .NET, static) and DeployMate builds it for you. - Press Review & deploy. You'll see the commits and files that would ship; confirm, and watch the build log.
- For deploys on every push, add a webhook to the repository — a two-minute step, covered in Deploy on every push.
6. Add a database
- On the project page choose New database or cache: PostgreSQL, MySQL or Redis. Pick an environment — apps get the services of their own environment, so a dev app and a dev database belong together.
- Open the new service and press Start.
- Redeploy the app. Apps in the same project and environment now receive the connection URL as
DATABASE_URL(Postgres),REDIS_URL(Redis) orMYSQL_URL(MySQL). On the project page each app card shows what it receives, and Stop sending turns one off for an app that doesn't use it.
7. Go live on your domain
- Point an A record at the server.
- On the app's page, Settings → Domains, add the hostname, then redeploy to route it.
- Certificates start in Let's Encrypt staging mode so a mistake can't use up your real rate limit. When you're ready, set
DEPLOYMATE_LE_MODE=productionin the service's environment and restart it. The domain list shows the certificate's real state and expiry.
Updating DeployMate
When a new release is out, run this on the server:
sudo deploymate update
It downloads the release, checks its SHA-256 against the published checksums.txt, and refuses on any mismatch. It then stops the dashboard service, copies the database aside, swaps the binary, starts the new version and waits for it to answer. If the new version doesn't come up, the old binary and database are put back automatically. Your apps and Traefik keep running throughout, because they are separate containers; only the dashboard is briefly unavailable.
sudo deploymate update --check only reports whether a newer release exists. --version v0.1.2 installs a specific version, which is also how you go back. --from file.tar.gz installs an archive you copied over, for a server that can't reach GitHub. The previous binary stays at /usr/local/bin/deploymate.prev and the pre-update database at data.db.pre-update in the data folder.
DEPLOYMATE_BACKUP_DEST_* variables, then enable them on each PostgreSQL service's page. MySQL and Redis are not backed up yet.