This guide provides step-by-step instructions for deploying OpenStatus on Coolify using pre-built Docker images.
- In Coolify dashboard, click "New Service" → "Docker Compose"
- Choose "Import from URL" and enter:
https://raw.githubusercontent.com/openstatusHQ/openstatus/main/coolify-deployment.yaml - Configure your environment variables
- Click "Deploy"
Create each service individually using the configurations below.
- Copy the example file:
cp .env.docker.example .env.docker
- Edit the file with your values:
nano .env.docker
- Required variables:
DATABASE_URL=http://libsql:8080AUTH_SECRET=your-32-char-secretRESEND_API_KEY=your-resend-keyNEXT_PUBLIC_URL=http://your-domain:3002
- Image:
ghcr.io/tursodatabase/libsql-server:latest - Name:
openstatus-libsql - Port:
8080 - Environment Variables:
SQLD_NODE=primary - Volumes:
openstatus-libsql-data:/var/lib/sqld - Health Check:
curl -f http://localhost:8080
- Image:
tinybirdco/tinybird-local:latest - Name:
openstatus-tinybird - Port:
7181 - Environment Variables:
COMPATIBILITY_MODE=1
- Image:
ghcr.io/openstatusHQ/openstatus-workflows:latest - Name:
openstatus-workflows - Port:
3000 - Environment Variables:
DATABASE_URL=http://libsql:8080 PORT=3000 NODE_ENV=production - Volumes:
./data:/app/data - Depends On:
openstatus-libsql
- Image:
ghcr.io/openstatusHQ/openstatus-server:latest - Name:
openstatus-server - Port:
3001 - Environment Variables:
DATABASE_URL=http://libsql:8080 PORT=3000 NODE_ENV=production - Depends On:
openstatus-workflows,openstatus-libsql
- Image:
ghcr.io/openstatusHQ/openstatus-private-location:latest - Name:
openstatus-private-location - Port:
8081 - Environment Variables:
DB_URL=http://libsql:8080 TINYBIRD_URL=http://tinybird:7181 GIN_MODE=release PORT=8080 NODE_ENV=production - Depends On:
openstatus-server
- Image:
ghcr.io/openstatusHQ/openstatus-checker:latest - Name:
openstatus-checker - Port:
8082 - Environment Variables:
DATABASE_URL=http://libsql:8080 PORT=8080 NODE_ENV=production - Depends On:
openstatus-server
- Image:
ghcr.io/openstatusHQ/openstatus-dashboard:latest - Name:
openstatus-dashboard - Port:
3002 - Environment Variables:
DATABASE_URL=http://libsql:8080 PORT=3000 HOSTNAME=0.0.0.0 AUTH_TRUST_HOST=true NODE_ENV=production - Depends On:
openstatus-workflows,openstatus-libsql,openstatus-server
- Image:
ghcr.io/openstatusHQ/openstatus-status-page:latest - Name:
openstatus-status-page - Port:
3003 - Environment Variables:
DATABASE_URL=http://libsql:8080 PORT=3000 HOSTNAME=0.0.0.0 AUTH_TRUST_HOST=true NODE_ENV=production - Depends On:
openstatus-workflows,openstatus-libsql,openstatus-server
Create a .env.docker file with the following variables:
# Database
DATABASE_URL=http://libsql:8080
# Authentication
NEXTAUTH_SECRET=your-secret-key-here
NEXTAUTH_URL=http://localhost:3002
# External Services
RESEND_API_KEY=your-resend-api-key
UPSTASH_REDIS_REST_URL=your-upstash-url
UPSTASH_REDIS_REST_TOKEN=your-upstash-token
# TinyBird
TINYBIRD_TOKEN=your-tinybird-token
TINYBIRD_URL=http://tinybird:7181
# Other
ENCRYPTION_KEY=your-encryption-key- Create Network: In Coolify, create a network named
openstatus - Attach Services: Ensure all services are attached to this network
- Service Discovery: Services can communicate using container names as hostnames
Deploy services in this sequence:
- libsql (Database)
- tinybird (Optional - Analytics)
- workflows (Workflow Engine)
- server (API Server)
- private-location (Monitoring Agent)
- checker (Health Checker)
- dashboard (Web Interface)
- status-page (Public Status)
Recommended resource limits for each service:
| Service | Memory Limit | Memory Reservation |
|---|---|---|
| libsql | 512MB | 256MB |
| tinybird | 1GB | 512MB |
| workflows | 512MB | 256MB |
| server | 512MB | 256MB |
| private-location | 256MB | 128MB |
| checker | 256MB | 128MB |
| dashboard | 512MB | 256MB |
| status-page | 512MB | 256MB |
All services include built-in health checks:
- API Services:
curl -f http://localhost:3000/ping - Web Services:
curl -f http://localhost:3000/ - Private Location:
wget --spider -q http://localhost:8080/health
After deployment, access services at:
- Dashboard:
http://your-domain:3002 - API Server:
http://your-domain:3001 - Status Page:
http://your-domain:3003 - Workflows:
http://your-domain:3000
-
Service Not Starting
- Check environment variables
- Verify network connectivity
- Review service logs
-
Database Connection Failed
- Ensure libsql is healthy first
- Check DATABASE_URL format
- Verify network configuration
-
Health Check Failing
- Wait for full startup (30-60 seconds)
- Check if required ports are available
- Review service dependencies
In Coolify, access logs via:
- Service → Logs tab
- Real-time streaming logs
- Historical log files
To update services:
- Pull new images in Coolify
- Redeploy affected services
- Verify health checks pass
- SSL/TLS: Configure HTTPS in Coolify
- Backups: Enable automated backups for database
- Monitoring: Set up external monitoring
- Scaling: Configure resource limits based on usage
- Security: Update images regularly, use secrets management
- Documentation: OpenStatus Docs
- Issues: GitHub Issues
- Community: Discord