Choose a platform
Render
- Open the Render deploy link from the Harly repository.
- Create independent values for the runtime secrets.
- Paste the same shared runtime secrets into both the web and scheduler services when Render asks for them.
- Confirm the database is production-grade and the image tag is pinned.
- Open
https://<your-app>.onrender.com/setupand claim the owner with theHARLY_SETUP_SECRETyou saved before deployment.
DigitalOcean App Platform
Use.do/app.yaml as the canonical App Platform spec. It describes the web
service, scheduler worker, pre-deploy migration job, managed PostgreSQL, health
check, and runtime variables in one file. The repository’s Deploy to
DigitalOcean button reads this file automatically. With doctl, the same
spec can be created or updated explicitly:
linux/amd64. Configure S3 before
the first upload. The migrate job must finish before the web and scheduler
services receive traffic.
Railway
Railway automatically readsrailway.toml (or railway.json) from the source
repository and applies its build/deploy settings to the current service
deployment. Harly’s file selects the root Dockerfile, starts the web role, and
uses /api/health/ready for readiness. Railway config-as-code is intentionally
service-scoped; it does not create the database, scheduler, or migration
service. Use the CLI for a complete project:
Fly.io
Run the CLI from a secure workstation:fly.toml; run fly deploy after attaching a
database and setting secrets. For Railway, the CLI creates separate web,
scheduler, and migration roles through the API. Secrets are never written to a
local file unless --save-env is explicitly supplied; that opt-in file is
written with mode 0600 and a warning. Complete /setup only after readiness
is green.
Production checklist
Web and scheduler run as separate long-lived processes.
PostgreSQL backups and point-in-time recovery are enabled.
S3 bucket encryption and versioning are enabled.
Secrets are stored in the platform secret manager.
Readiness and scheduler health are monitored.
A restore drill has completed against a throwaway installation.