Getting started
What is this PaaS?
This platform is a self-hosted, Heroku-style PaaS built on
Dokku 0.38.31, running on a single AWS EC2 instance.
You push code with git push; the platform builds it into a container,
deploys it with zero downtime, and serves it at its own URL. You never
manage servers, containers, or web servers — just your code.
What the platform gives every application out of the box:
- Git-push deployments. Pushing to the platform's git remote builds
your code with Heroku-compatible buildpacks (or your own
Dockerfile) and rolls it out with zero downtime — traffic only switches once the new version is verified up. - A URL per app. Every app is served at
https://<app-name>.54.170.127.122.sslip.io. - HTTPS via Let's Encrypt. Pre-installed apps ship with a free, auto-renewing TLS certificate already enabled; for apps you add yourself, one operator command per app enables it. HTTPS terminates at the platform edge and your app keeps speaking plain HTTP internally.
- Managed datastores. A Postgres 18.6 service (
demo-db) and a Redis 8.10.2 service (demo-cache) run on the platform. Link one to your app and its connection URL appears as an environment variable. Both are backed up daily to off-host storage. - Configuration as environment variables. Set, change, and unset config without touching code; the platform restarts your app to apply.
- Logs. Everything your app writes to stdout/stderr is captured; stream it live with one command.
The mental model
- An app is a git repository plus a name. You create the (empty) app on the platform, add it as a git remote, and push.
- A push is a deploy. The platform detects how to build your code
(buildpack or
Dockerfile), builds a container image, starts the new version alongside the old, verifies it stays up, then switches traffic and retires the old version. - Everything specific to an environment lives in environment variables — set on the platform, never committed to your repo.
- The platform owns routing, TLS, and process supervision. Your app's only jobs: listen on the port the platform assigns, stay stateless, and log to stdout.
Who does what
- Developers hold the deploy key (an ed25519 SSH key). With it you create apps, push code, set config, link datastores, and read logs — all over SSH, no AWS account needed.
- Platform operators hold host access and the Terraform automation. They enable HTTPS per app, manage the datastore services, and keep the platform patched and backed up.
Ask your operator for the deploy key and this platform's
54.170.127.122.sslip.io / 54.170.127.122 values if you don't have them yet.
If you run the automation yourself, both come from Terraform:
terraform output -raw deploy_private_key (sensitive),
terraform output -raw platform_domain,
terraform output -raw instance_public_ip.
Your first deploy in five commands
Once you have the deploy key saved at ~/.ssh/dokku-deploy.pem:
chmod 600 ~/.ssh/dokku-deploy.pem
# 1. create the app (any valid name, e.g. my-first-app)
ssh -i ~/.ssh/dokku-deploy.pem dokku@54.170.127.122 apps:create my-first-app
# 2. in your project's git repo, add the platform as a remote
git remote add dokku dokku@54.170.127.122:my-first-app
# 3. push your code to the platform's deploy branch (master)
git push dokku main:master
# 4. watch the build output, then check it live
curl https://my-first-app.54.170.127.122.sslip.io/
# 5. stream its logs
ssh -i ~/.ssh/dokku-deploy.pem dokku@54.170.127.122 logs my-first-app -t
That's a full deploy: build, release, health check, routing, and logs.
If the curl in step 4 fails with a TLS error, your app doesn't have a
certificate yet — ask your operator (one command, see
Deploy your first app, step 10) and use
http:// until then.
Tip — save the key in SSH config so
git pushfinds it without flags:Host dokku-paas HostName 54.170.127.122 User dokku IdentityFile ~/.ssh/dokku-deploy.pemThen
git remote add dokku dokku-paas:my-first-appand plaingit push dokku main:masterjust work.
What your app must look like
Any app that satisfies a short list of requirements can deploy here —
any language with a Heroku-compatible buildpack (Node.js, Python, Ruby,
Go, Java, PHP, …) or anything you can express as a Dockerfile. The
full checklist is on the next page:
Application requirements.
Where to go next
- Application requirements — the deployability checklist every app must satisfy.
- Deploy your first app, step by step — a complete walkthrough from an empty directory to a live URL, including config, a database, and HTTPS.