DigitalOcean
The recommended way to run AwaitStep on DigitalOcean is a Droplet with Docker installed.
Steps
1. Create a Droplet
Create a Droplet running Docker from the Marketplace (1-Click Apps → Docker). A 1 GB / 1 vCPU Basic Droplet is sufficient for small teams.
2. SSH in and run the install script
ssh root@your-droplet-ip
curl -fsSL https://raw.githubusercontent.com/awaitstep/awaitstep/main/scripts/install.sh -o install.sh && bash install.shThe script will prompt you for configuration and generate docker-compose.yml, .env, and optionally a Caddyfile.
3. Or set up manually
If you prefer manual setup, create the files yourself:
docker-compose.yml:
services:
awaitstep:
image: ghcr.io/awaitstep/awaitstep:latest
restart: unless-stopped
expose:
- '8080'
- '3000'
env_file:
- .env
volumes:
- awaitstep-data:/app/data
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- '80:80'
- '443:443'
configs:
- source: caddyfile
target: /etc/caddy/Caddyfile
volumes:
- caddy-data:/data
- caddy-config:/config
configs:
caddyfile:
content: |
your-droplet-domain.com {
handle /api/* {
reverse_proxy awaitstep:8080
}
handle {
reverse_proxy awaitstep:3000
}
}
volumes:
awaitstep-data:
caddy-data:
caddy-config:.env:
TOKEN_ENCRYPTION_KEY=your-first-generated-key
BETTER_AUTH_SECRET=your-second-generated-key
BETTER_AUTH_URL=https://your-droplet-domain.com
# Auth — configure at least one
# GITHUB_CLIENT_ID=
# GITHUB_CLIENT_SECRET=
# GOOGLE_CLIENT_ID=
# GOOGLE_CLIENT_SECRET=
RESEND_API_KEY=Then start:
docker compose up -d4. Set up a domain
Point your domain to the Droplet IP. Replace your-droplet-domain.com in the Caddyfile with your actual domain. Caddy will automatically provision a Let's Encrypt TLS certificate.
Notes
- Enable the DigitalOcean Firewall and allow only ports 22, 80, and 443 inbound.
- Use a Volume (Block Storage) attached to the Droplet and mount it as the Docker volume for
/app/datafor easy resizing and backups. - DigitalOcean Managed Databases (PostgreSQL) work with AwaitStep. Set
DATABASE_URLto the connection string from the database cluster dashboard, using the private network host for lower latency.
App Platform (alternative)
DigitalOcean App Platform can deploy Docker images, but persistent disk support is limited. Use a Droplet if you need SQLite; use App Platform with a Managed PostgreSQL database if you prefer a fully managed setup.