Docker Quickstart
Get started quickly with Elsa Workflows using Docker Compose. This guide provides a fast path to evaluation with a complete setup including Elsa Server, Studio, and database persistence.
This quickstart guide helps you get Elsa Workflows up and running in minutes using Docker Compose. It's designed for evaluation, development, and learning purposes.
Prerequisites
Before you begin, ensure you have:
Docker Desktop (Windows/Mac) or Docker Engine (Linux) installed
Docker Compose V2 or later
At least 4GB of available RAM
Ports 14000 and 5432 (if using PostgreSQL) available on your host machine
Quick Start
Option 1: SQLite (Simplest)
For the fastest start with minimal dependencies, use SQLite. This is perfect for evaluation and development.
Create a file named docker-compose.yml with the following content:
Start the services:
Wait a few seconds for the services to start, then access Elsa Studio at http://localhost:14000.
Option 2: PostgreSQL-backed evaluation
For evaluation with an external database, use PostgreSQL. The compose file is still an evaluation example; apply your own backup, TLS, secret, and upgrade policy before operating any deployment as a production service:
Start the services:
Monitor the startup progress:
Once both services report healthy status, access Elsa Studio at http://localhost:14000.
Environment Variables Reference
Core Configuration
ASPNETCORE_ENVIRONMENT
ASP.NET Core environment (Development, Staging, Production)
-
Yes
HTTP_PORTS
Internal HTTP port for the container
8080
Yes
HTTP__BASEURL
External base URL for the application
-
Yes
Database Configuration
DATABASEPROVIDER
Database provider to use
Sqlite, PostgreSql, SqlServer, MySql
Yes
CONNECTIONSTRINGS__SQLITE
SQLite connection string
Data Source=/app/elsa.db;Cache=Shared
If using SQLite
CONNECTIONSTRINGS__POSTGRESQL
PostgreSQL connection string
See example above
If using PostgreSQL
CONNECTIONSTRINGS__SQLSERVER
SQL Server connection string
Server=...
If using SQL Server
CONNECTIONSTRINGS__MYSQL
MySQL connection string
Server=...
If using MySQL
Optional Configuration
ASPNETCORE_URLS
URLs the application listens on
http://+:8080
Logging__LogLevel__Default
Default log level
Information
Logging__LogLevel__Microsoft
Microsoft framework log level
Warning
CORS__AllowedOrigins__0
CORS allowed origins
* (Development)
Health Checks
Both configurations include health checks to ensure services are ready:
Elsa Server Health Check:
PostgreSQL Health Check:
Check health status:
Common Operations
View Logs
Stop Services
Restart Services
Update to Latest Version
Troubleshooting
Service Won't Start
Symptom: Container exits immediately after starting
Solutions:
Check logs for specific errors:
Verify port availability:
Ensure sufficient resources (RAM, disk space)
Database Connection Failed
Symptom: Elsa can't connect to PostgreSQL
Solutions:
Verify PostgreSQL is healthy:
Check database logs:
Verify connection string matches PostgreSQL credentials
Wait for PostgreSQL to be fully initialized (can take 10-30 seconds on first start)
Cannot Access Studio
Symptom: Browser can't reach http://localhost:14000
Solutions:
Verify service is running:
Check if port is correctly mapped:
Try accessing using container IP:
Check firewall settings blocking port 14000
Performance Issues
Symptom: Slow response times or high memory usage
Solutions:
Allocate more resources in Docker Desktop settings (recommended: 4GB+ RAM)
Reduce PostgreSQL max_connections if memory constrained:
Check container resource usage:
Data Persistence Issues
Symptom: Workflows or data lost after restart
Solutions:
Verify volumes are correctly configured:
Check volume mounts:
Don't use
docker-compose down -vunless you want to delete data
Authentication Problems
Symptom: Can't log in after configuring the container
Solutions:
Confirm that the server's
Identitysection contains the intended user and role and thatIdentity:Tokens:SigningKeyis configured.Clear browser cache and cookies
Try incognito/private browsing mode
Check Elsa logs for authentication errors
Production Considerations
Security
Configure deployment-owned identity: For a 3.8.0 package host, follow the identity bootstrap instructions in the upgrade guide; for this unversioned image, follow its published identity contract
Use Strong Passwords: For both Elsa and database users
Enable HTTPS: Configure TLS/SSL certificates
Restrict Database Access: Don't expose database ports publicly
Use Secrets Management: Store sensitive data in Docker secrets or environment-specific vaults
Configure CORS Properly: Restrict allowed origins to known domains
Example with secrets:
Scalability
Use External Database: Host database outside Docker for better performance and reliability
Load Balancing: Deploy multiple Elsa instances behind a load balancer
Connection Pooling: Adjust MaxPoolSize based on load
Resource Limits: Configure CPU and memory limits:
Reliability
Regular Backups: Implement automated database backups
Note: The following command uses Unix/Linux shell syntax. For Windows users, see the PowerShell alternative below.
Monitoring: Integrate with monitoring solutions (Prometheus, Grafana, etc.)
Logging: Configure centralized logging (ELK stack, Loki, etc.)
Health Checks: Keep health checks enabled and configure orchestrator accordingly
Update Strategy: Plan for zero-downtime updates
Database Performance
Optimize PostgreSQL Configuration:
Regular Maintenance: Schedule VACUUM and ANALYZE operations
Monitor Query Performance: Use pg_stat_statements extension
Data Management
Volume Backups: Regularly backup Docker volumes
Retention Policies: Configure workflow and log retention
Archival Strategy: Move old workflows to cold storage
Next Steps
Now that you have Elsa running:
Explore the Studio: Navigate to http://localhost:14000 and explore the interface
Create Your First Workflow: Follow the Hello World tutorial
Learn Key Concepts: Read about Workflows, Activities, and Triggers
Try HTTP Workflows: Build REST APIs using HTTP Workflows
Extend Elsa: Create Custom Activities
Alternative Configurations
For other deployment scenarios, see:
Elsa Server + Studio (Separate Images) - Run as separate containers
Persistent Database - More database configuration examples
Database Configuration - Complete database setup guide
Persistence Guide - Comprehensive persistence provider documentation
Traefik Integration - Reverse proxy setup
Distributed Hosting - Multi-instance deployments
Support
If you encounter issues not covered in this guide:
Check the Elsa Workflows GitHub Discussions
Review GitHub Issues
Join the community on Discord or Slack
Version Information
This guide intentionally does not pin a Docker image release. Its examples use the :latest image tags shown above; verify the image publication and digest in your registry before production deployment. The application upgrade rules for the stable 3.8.0 package release are in Upgrade to Elsa 3.8.0.
Last updated