Production deployment configuration for RocketWelder using Docker Compose with AutoUpdater integration.
# Create required directories
sudo mkdir -p /var/data/{app/{recordings,logs,models},eventstore/{data,logs}}
# Set proper permissions
sudo chown -R $USER:$USER /var/data/
# Start services with architecture detection
docker compose up -d
# Or explicitly specify architecture:
# For x64 systems:
docker compose -f docker-compose.yml -f docker-compose.x64.yml up -d
# For ARM64 systems with NVIDIA GPU:
docker compose -f docker-compose.yml -f docker-compose.arm64.yml up -d
# View logs
docker compose logs -f- docker-compose.yml - Base configuration (generic, architecture-neutral)
- docker-compose.x64.yml - x64-specific overrides (standard EventStore image)
- docker-compose.arm64.yml - ARM64-specific overrides with NVIDIA GPU support and ARM64 EventStore image
- up-{version}.sh - Migration scripts executed during updates (e.g.,
up-1.0.0.sh) - down-{version}.sh - Rollback scripts for safe migration reversal (e.g.,
down-1.0.0.sh) - backup.sh - Creates EventStore backup before migrations (supports
--format=json) - restore.sh - Restores from backup file (supports
--fileand--format=json)
/var/data/
├── app/
│ ├── recordings/ # Video recordings storage
│ ├── logs/ # Application logs
│ ├── models/ # AI/ML models
│ └── appsettings.runtime.json # Runtime configuration
└── eventstore/
├── data/ # EventStore database files
└── logs/ # EventStore logs
- URL: http://localhost:80
- Image:
rocketwelder.azurecr.io/rocketwelder:latest - Features: Video processing, streaming, pipeline design
- Hardware Access: USB cameras, GPU acceleration (privileged mode)
- URL: http://localhost:2113 (localhost only)
- Image:
eventstore/eventstore:24.10.5 - Features: Event sourcing, projections, HTTP API
This compose configuration is designed to work with the ModelingEvolution AutoUpdater:
- Service Name:
rocket-welder(matches compose project name) - Auto-Updates: Monitors for new image versions
- Status Checking: Real-time container status via SSH
- Zero-Downtime: Graceful container restarts during updates
- Architecture Detection: Automatically selects appropriate compose files
The AutoUpdater automatically detects the target architecture and uses the appropriate compose files:
- x64 Systems: Uses
docker-compose.yml+docker-compose.x64.yml - ARM64 Systems: Uses
docker-compose.yml+docker-compose.arm64.yml(with NVIDIA support)
The AutoUpdater will automatically:
- Detect system architecture via
uname -m - Select appropriate Docker Compose override files
- Monitor
rocketwelder.azurecr.io/rocketwelder:latestfor updates - Check service status via
docker compose ls --format json - Execute migration scripts between versions (see Migration Scripts below)
- Pull new images and restart containers when updates are available
- Maintain data persistence through mounted volumes
The AutoUpdater supports automatic execution of migration scripts with backup/restore capabilities:
- Format:
up-{version}.shanddown-{version}.sh(e.g.,up-1.0.0.sh,down-1.0.0.sh) - Location: Same directory as
docker-compose.yml - Permissions: Made executable automatically by AutoUpdater
- Backup/Restore:
backup.shandrestore.shprovide safe rollback capabilities - Fresh Installation Detection: Automatically detects empty EventStore data
- Bidirectional Migrations: UP scripts for deployment, DOWN scripts for rollback
- Error Recovery: Automatic rollback on migration failures
up-1.0.0.sh: Initial deployment setup (directories, permissions, monitoring tools, log rotation)down-1.0.0.sh: Rollback for initial deployment (safe cleanup)backup.sh: Creates EventStore backup (skips if fresh installation)restore.sh: Restores from backup file
- Idempotent: Scripts should be safe to run multiple times
- Error Handling: Use
set -eto fail on errors - Logging: Echo progress messages for debugging
- Validation: Check for required conditions before making changes
- Permissions: Use
sudofor system-level changes when needed
- Production:
latest(stable, promoted from preview) - Development:
preview(development builds) - Versioned:
1.2.3,1.2,1(semantic versioning)
- Docker Engine: 20.10+ with compose plugin
- Platform: Linux x64/ARM64 (multi-architecture support)
- Hardware: USB cameras, optional NVIDIA GPU
- Network: Host networking for real-time streaming
- Storage: Persistent volumes for recordings and database
- EventStore: Localhost binding only (127.0.0.1:2113)
- Privileged Mode: Required for hardware access (cameras, USB)
- User Context: Root for device access and container management
# Check service status
docker compose ps
# View real-time logs
docker compose logs -f
# Check EventStore health
curl -f http://localhost:2113/health/live
# Monitor resource usage
docker stats# Check logs
docker compose logs app
# Verify permissions
sudo chown -R $USER:$USER /var/data/
# Restart services
docker compose restart# Check EventStore logs
docker compose logs eventstore
# Test health endpoint
curl -f http://localhost:2113/health/live
# Reset EventStore data (⚠️ destroys all data!)
docker compose down
sudo rm -rf /var/data/eventstore/data/*
docker compose up -d# Verify device access
ls -la /dev/video*
# Check udev rules
sudo udevadm info --query=all --name=/dev/video0
# Restart with clean state
docker compose down && docker compose up -d- RocketWelder - Main application
- AutoUpdater - Automated deployment system
- Deployments - Production configurations
Deployment: Multi-architecture Docker Compose
Registry: Azure Container Registry (rocketwelder.azurecr.io)
Auto-Updates: Integrated with ModelingEvolution AutoUpdater