Quick Start
Docker Compose
For production deployments, use Docker Compose for better configuration management:Basic Setup
Create adocker-compose.yml file:
With AI Assistant
Enable the AI Assistant feature by adding LLM configuration:API keys remain server-side only and are never transmitted to the frontend. The backend proxies all LLM requests via secure WebSocket RPC.
Environment Variables
Authentication
Username for web interface authentication. If not provided, a random username will be generated.
Password for web interface authentication. If not provided, a random password will be generated and logged.
Set to
true to disable authentication completely.Server Configuration
Port the server listens on inside the container.
Comma-separated list of allowed CORS origins. In production, specify exact origins instead of using
*.Set to
production for production deployments. This enables production optimizations and security features.Security Headers
Set to
true to enable Content Security Policy upgrade-insecure-requests directive.Set to
true to enable X-Frame-Options: SAMEORIGIN header to prevent clickjacking.This disables iframe embedding when enabled.
AI Assistant Configuration
AI provider to use:
openai or geminiOpenAI API key for AI Assistant. Required when
LLM_PROVIDER=openai.Google Gemini API key for AI Assistant. Required when
LLM_PROVIDER=gemini.Generic API key that works with either provider. Alternative to provider-specific keys.
Token limit for neighboring topics context in AI queries. Increase for better device relationship detection.
Data Persistence
The container stores data in/app/data, including:
- credentials.json - User credentials (auto-generated if not provided)
- settings.json - Connection settings and preferences
- certificates/ - Uploaded SSL/TLS certificates
- uploads/ - File uploads
Mounting a Volume
Use a named volume for automatic management:Mounting a Host Directory
For direct access to data files:The container runs as non-root user (UID 1001). Host directories must be owned by this UID or be world-writable.
Building from Source
Build Docker Image
- Builder stage - Compiles TypeScript and builds frontend with webpack
- Production stage - Creates minimal image with only runtime dependencies
Multi-Architecture Builds
Build for multiple architectures using buildx:Supported Platforms
The official Docker images support multiple architectures:| Platform | Architecture | Use Case |
|---|---|---|
linux/amd64 | x86-64 | Standard PCs, servers, cloud instances |
linux/arm64 | ARM 64-bit | Raspberry Pi 3/4/5, Apple Silicon, AWS Graviton |
linux/arm/v7 | ARM 32-bit | Raspberry Pi 2/3 (32-bit OS) |
Available Tags
Choose from multiple image tags based on your stability requirements:latest- Latest stable version from master branchmaster- Latest build from master branchbeta- Latest beta versionrelease- Latest official releasemaster-<sha>- Specific commit from master (e.g.,master-abc123)beta-<sha>- Specific commit from betarelease-<sha>- Specific commit from release
Production Deployment
HTTPS with Nginx Reverse Proxy
For production, deploy behind a reverse proxy with SSL/TLS:With Traefik
Use Traefik for automatic SSL certificate management:One-Click Deployment
Play with Docker
Try MQTT Explorer instantly in your browser. Free, no installation required. Sessions last 4 hours.
DigitalOcean App Platform
Deploy with managed platform and auto-scaling. Starting at $5/month.
Koyeb
Deploy on global edge network. Free tier available.
Railway
Click “Deploy on Railway” button from the GitHub repository.
Health Checks
The container includes built-in health checks that run every 30 seconds:- Interval: 30 seconds
- Timeout: 10 seconds
- Retries: 3
- Start Period: 40 seconds (allows time for startup)
Troubleshooting
Container won't start
Container won't start
Check container logs for errors:Common issues:
- Port 3000 already in use: Change port mapping
-p 8080:3000 - Permission errors: Ensure data volume is writable by UID 1001
- Out of memory: Increase Docker memory limits
Can't access the application
Can't access the application
Verify the container is running:Check firewall rules allow connections to port 3000.
Authentication fails
Authentication fails
Check generated credentials in logs:Or inspect the stored credentials:Reset credentials by removing the volume and restarting:
Permission denied on mounted directory
Permission denied on mounted directory
The container runs as UID 1001. Ensure host directories have correct ownership:Or make the directory world-writable (less secure):
WebSocket connection fails
WebSocket connection fails
Ensure your reverse proxy properly handles WebSocket upgrades:Check browser console for connection errors.
Security Best Practices
Use HTTPS in Production
Always deploy behind a reverse proxy with SSL/TLS certificates. Never expose the container directly to the internet over HTTP.
Next Steps
Browser Mode Guide
Learn about browser mode architecture and features
Configuration
Configure MQTT connections and advanced settings