Skip to content

Docker Deployment

Chris & Mike edited this page Mar 7, 2026 · 5 revisions

Docker Deployment

Run DO Manager using Docker or Docker Compose.


Prerequisites

Before running the container, you need to set up the metadata database on Cloudflare:

1. Create D1 Database

npx wrangler login
npx wrangler d1 create do-manager-metadata

2. Clone and Initialize Schema

git clone https://github.com/neverinfamous/do-manager.git
cd do-manager
npx wrangler d1 execute do-manager-metadata --remote --file=worker/schema.sql

3. Get Cloudflare Credentials

Credential Where to Find
ACCOUNT_ID Dashboard URL: dash.cloudflare.com/{ACCOUNT_ID}/...
API_KEY API Tokens → Create Token → Workers Scripts Read + D1 Edit
TEAM_DOMAIN Zero Trust → Settings → Custom Pages
POLICY_AUD Zero Trust → Access → Applications → Your App → AUD tag

Quick Start with Docker

Pull the Image

docker pull writenotenow/do-manager:latest

Run the Container

docker run -d \
  -p 8787:8787 \
  -e ACCOUNT_ID=your_cloudflare_account_id \
  -e API_KEY=your_cloudflare_api_token \
  -e TEAM_DOMAIN=https://yourteam.cloudflareaccess.com \
  -e POLICY_AUD=your_cloudflare_access_aud_tag \
  --name do-manager \
  --restart unless-stopped \
  writenotenow/do-manager:latest

Open http://localhost:8787


Docker Compose

Create docker-compose.yml:

services:
  do-manager:
    image: writenotenow/do-manager:latest
    container_name: do-manager
    ports:
      - "8787:8787"
    environment:
      - ACCOUNT_ID=${ACCOUNT_ID}
      - API_KEY=${API_KEY}
      - TEAM_DOMAIN=${TEAM_DOMAIN}
      - POLICY_AUD=${POLICY_AUD}
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8787/health"]
      interval: 30s
      timeout: 10s
      retries: 3

Create .env file:

ACCOUNT_ID=your_cloudflare_account_id
API_KEY=your_cloudflare_api_token
TEAM_DOMAIN=https://yourteam.cloudflareaccess.com
POLICY_AUD=your_cloudflare_access_aud_tag

Run:

docker compose up -d

Environment Variables

Variable Required Description
ACCOUNT_ID Yes Cloudflare Account ID
API_KEY Yes API Token with Workers Scripts Read + D1 Edit permission
TEAM_DOMAIN Yes https://yourteam.cloudflareaccess.com
POLICY_AUD Yes Cloudflare Access Application AUD tag
PORT No Port (default: 8787)
NODE_ENV No Environment (default: production)

Available Tags

Tag Description
latest Latest stable release
<version> Specific version (recommended for production)
sha-XXXXXX Commit SHA for reproducible builds

Container Info

Property Value
Base Image node:20-alpine
Size ~150MB
Architectures linux/amd64, linux/arm64
Port 8787
User Non-root (app)
Health Endpoint /health

Upgrading

Update Schema (Required for New Features)

Run this after updating to add new tables (safe to run multiple times):

npx wrangler d1 execute do-manager-metadata --remote --file=worker/schema.sql

Update Container

Docker:

docker pull writenotenow/do-manager:latest
docker stop do-manager && docker rm do-manager
# Re-run your docker run command

Docker Compose:

docker compose pull && docker compose up -d

Building from Source

git clone https://github.com/neverinfamous/do-manager.git
cd do-manager
docker build -t do-manager:local .
docker run -d -p 8787:8787 \
  -e ACCOUNT_ID=your_account_id \
  -e API_KEY=your_api_token \
  -e TEAM_DOMAIN=https://yourteam.cloudflareaccess.com \
  -e POLICY_AUD=your_aud_tag \
  do-manager:local

Troubleshooting

Container Won't Start

Check logs:

docker logs do-manager

Common causes:

  • Missing environment variables
  • Port already in use

Authentication Failures

  • Verify TEAM_DOMAIN includes https://
  • Confirm POLICY_AUD matches your Access application
  • Check API token has Workers Scripts Read permission

Test API Token

curl -X GET "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/workers/scripts" \
  -H "Authorization: Bearer ${API_KEY}"

Next Steps