Single Location
Docker Compose deployment on a single serverEdit
Deploy Supercheck on your own infrastructure with Docker Compose. All data stays on your servers.
For true multi-location monitoring, see Multi-Location Workers.
Quick Start
One-click deployment on Coolify — the easiest way to self-host.
Docker Compose
Choose your deployment type:
Best for local development, testing, or internal networks without a domain.
Install Docker
Download and install Docker Desktop for Mac.
Download and install Docker Desktop for Windows.
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp dockerClone and Configure
git clone https://github.com/supercheck-io/supercheck.git
cd supercheck/deploy/docker
# Generate secure secrets
bash init-secrets.shEdit .env and add your OAuth credentials:
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secretDeploy
docker compose up -dAccess
Open http://localhost:3000 and sign in with OAuth.
Create Super Admin (Optional):
docker compose exec app npm run setup:admin your-email@example.comFor production with HTTPS, custom domain, and status pages.
Install Docker
Download and install Docker Desktop for Mac.
Download and install Docker Desktop for Windows.
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp dockerConfigure DNS
Add these records at your domain provider:
| Type | Name | Value |
|---|---|---|
| A | app | Your Server IP |
| A | * | Your Server IP |
The wildcard (*) record enables status page subdomains like status.yourdomain.com.
Cloudflare Users: If using Cloudflare proxy (orange cloud), set SSL/TLS mode to "Full" or "Full (Strict)" in your Cloudflare Dashboard. The default "Flexible" mode causes redirect loops. Other DNS providers may have similar TLS/SSL settings.
Verify DNS propagation:
dig +short app.yourdomain.comClone and Configure
git clone https://github.com/supercheck-io/supercheck.git
cd supercheck/deploy/docker
# Generate secure secrets
bash init-secrets.shEdit .env:
# Domain (required)
APP_DOMAIN=app.yourdomain.com
ACME_EMAIL=admin@yourdomain.com
STATUS_PAGE_DOMAIN=yourdomain.com
# OAuth (required)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secretDeploy
docker compose -f docker-compose-secure.yml up -dAccess
Open https://app.yourdomain.com and sign in with OAuth.
Create Super Admin (Optional):
docker compose -f docker-compose-secure.yml exec app npm run setup:admin your-email@example.comOAuth Setup
At least one OAuth provider (GitHub or Google) is required.
Optional Configuration
AI Configuration
Enable AI-powered test creation, fixes, and performance analysis. Choose your provider:
Recommended for most users.
AI_PROVIDER=openai
AI_MODEL=gpt-4o-mini
OPENAI_API_KEY=sk-your-api-keyEnterprise-grade OpenAI hosting.
AI_PROVIDER=azure
AZURE_RESOURCE_NAME=your-resource-name
AZURE_API_KEY=your-api-key
AZURE_OPENAI_DEPLOYMENT=your-deployment-nameClaude models (Haiku, Sonnet, Opus).
AI_PROVIDER=anthropic
AI_MODEL=claude-3-5-haiku-20241022
ANTHROPIC_API_KEY=sk-ant-your-keyGoogle AI Studio (API Key).
AI_PROVIDER=gemini
AI_MODEL=gemini-2.5-flash
GOOGLE_GENERATIVE_AI_API_KEY=your-api-keyGoogle Cloud Vertex AI. Requires GCP project.
AI_PROVIDER=google-vertex
AI_MODEL=gemini-2.5-flash
GOOGLE_VERTEX_PROJECT=your-project-id
# Ensure ADC or GOOGLE_APPLICATION_CREDENTIALS are set in the containerAWS Bedrock.
AI_PROVIDER=bedrock
AI_MODEL=anthropic.claude-3-5-haiku-20241022-v1:0
BEDROCK_AWS_REGION=us-east-1
BEDROCK_AWS_ACCESS_KEY_ID=your-access-key
BEDROCK_AWS_SECRET_ACCESS_KEY=your-secret-keyAccess to 400+ models via single API.
AI_PROVIDER=openrouter
AI_MODEL=anthropic/claude-3.5-haiku
OPENROUTER_API_KEY=your-api-keyOperations
Scaling Workers
Workers run Playwright and k6 tests in isolated Docker containers.
# Scale to 2 workers
WORKER_REPLICAS=2 RUNNING_CAPACITY=2 docker compose up -d| Configuration | Workers | Concurrent Tests | Minimum Server |
|---|---|---|---|
| Small | 1 | 1 | 2 vCPU / 4GB |
| Medium | 2 | 2 | 4 vCPU / 8GB |
| Large | 4 | 4 | 8 vCPU / 16GB |
Backups
Critical: Your data is in Docker volumes. Back up regularly!
# Create backup
docker compose exec postgres pg_dump -U postgres supercheck > backup.sql
# Restore backup
docker compose exec -T postgres psql -U postgres supercheck < backup.sqlUpdates
docker compose pull && docker compose up -dTroubleshooting
docker compose logs app # View app logs
docker compose ps # Check service status