Skip to content

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 ​

bash
ssh root@your-droplet-ip
curl -fsSL https://raw.githubusercontent.com/awaitstep/awaitstep/main/scripts/install.sh -o install.sh && bash install.sh

The 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:

yaml
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:

bash
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:

bash
docker compose up -d

4. 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/data for easy resizing and backups.
  • DigitalOcean Managed Databases (PostgreSQL) work with AwaitStep. Set DATABASE_URL to 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.