{"id":34837027,"url":"https://github.com/modelingevolution/rocketwelder-compose","last_synced_at":"2026-05-23T00:03:01.853Z","repository":{"id":304824401,"uuid":"1015980956","full_name":"modelingevolution/rocketwelder-compose","owner":"modelingevolution","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-26T22:43:46.000Z","size":77,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-28T15:47:05.329Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/modelingevolution.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-08T10:07:16.000Z","updated_at":"2025-11-26T22:43:49.000Z","dependencies_parsed_at":"2025-07-16T04:23:11.789Z","dependency_job_id":"053dcce2-6dcc-4918-a10a-5126fecb84d6","html_url":"https://github.com/modelingevolution/rocketwelder-compose","commit_stats":null,"previous_names":["modelingevolution/rocketwelder-compose"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/modelingevolution/rocketwelder-compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modelingevolution%2Frocketwelder-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modelingevolution%2Frocketwelder-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modelingevolution%2Frocketwelder-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modelingevolution%2Frocketwelder-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/modelingevolution","download_url":"https://codeload.github.com/modelingevolution/rocketwelder-compose/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modelingevolution%2Frocketwelder-compose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28032371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-25T02:00:05.988Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-25T16:06:49.462Z","updated_at":"2025-12-25T16:08:21.026Z","avatar_url":"https://github.com/modelingevolution.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RocketWelder Docker Compose\n\nProduction deployment configuration for RocketWelder using Docker Compose with AutoUpdater integration.\n\n## 🚀 Quick Start\n\n```bash\n# Create required directories\nsudo mkdir -p /var/data/{app/{recordings,logs,models},eventstore/{data,logs}}\n\n# Set proper permissions\nsudo chown -R $USER:$USER /var/data/\n\n# Start services with architecture detection\ndocker compose up -d\n\n# Or explicitly specify architecture:\n# For x64 systems:\ndocker compose -f docker-compose.yml -f docker-compose.x64.yml up -d\n\n# For ARM64 systems with NVIDIA GPU:\ndocker compose -f docker-compose.yml -f docker-compose.arm64.yml up -d\n\n# View logs\ndocker compose logs -f\n```\n\n## 📁 Configuration Files\n\n### Docker Compose Files\n- **docker-compose.yml** - Base configuration (generic, architecture-neutral)\n- **docker-compose.x64.yml** - x64-specific overrides (standard EventStore image)\n- **docker-compose.arm64.yml** - ARM64-specific overrides with NVIDIA GPU support and ARM64 EventStore image\n- **up-{version}.sh** - Migration scripts executed during updates (e.g., `up-1.0.0.sh`)\n- **down-{version}.sh** - Rollback scripts for safe migration reversal (e.g., `down-1.0.0.sh`)\n- **backup.sh** - Creates EventStore backup before migrations (supports `--format=json`)\n- **restore.sh** - Restores from backup file (supports `--file` and `--format=json`)\n\n### Directory Structure\n\n```\n/var/data/\n├── app/\n│   ├── recordings/              # Video recordings storage\n│   ├── logs/                    # Application logs\n│   ├── models/                  # AI/ML models\n│   └── appsettings.runtime.json # Runtime configuration\n└── eventstore/\n    ├── data/                    # EventStore database files\n    └── logs/                    # EventStore logs\n```\n\n## 🔧 Services\n\n### RocketWelder Application\n- **URL**: http://localhost:80\n- **Image**: `rocketwelder.azurecr.io/rocketwelder:latest`\n- **Features**: Video processing, streaming, pipeline design\n- **Hardware Access**: USB cameras, GPU acceleration (privileged mode)\n\n### EventStore Database\n- **URL**: http://localhost:2113 (localhost only)\n- **Image**: `eventstore/eventstore:24.10.5`\n- **Features**: Event sourcing, projections, HTTP API\n\n## 🔄 AutoUpdater Integration\n\nThis compose configuration is designed to work with the [ModelingEvolution AutoUpdater](https://github.com/modelingevolution/autoupdater):\n\n- **Service Name**: `rocket-welder` (matches compose project name)\n- **Auto-Updates**: Monitors for new image versions\n- **Status Checking**: Real-time container status via SSH\n- **Zero-Downtime**: Graceful container restarts during updates\n- **Architecture Detection**: Automatically selects appropriate compose files\n\n### Multi-File Architecture Support\n\nThe AutoUpdater automatically detects the target architecture and uses the appropriate compose files:\n\n- **x64 Systems**: Uses `docker-compose.yml` + `docker-compose.x64.yml`\n- **ARM64 Systems**: Uses `docker-compose.yml` + `docker-compose.arm64.yml` (with NVIDIA support)\n\n### AutoUpdater Configuration\n\nThe AutoUpdater will automatically:\n1. Detect system architecture via `uname -m`\n2. Select appropriate Docker Compose override files\n3. Monitor `rocketwelder.azurecr.io/rocketwelder:latest` for updates\n4. Check service status via `docker compose ls --format json`\n5. Execute migration scripts between versions (see Migration Scripts below)\n6. Pull new images and restart containers when updates are available\n7. Maintain data persistence through mounted volumes\n\n### Migration Scripts\n\nThe AutoUpdater supports automatic execution of migration scripts with backup/restore capabilities:\n\n#### Script Naming Convention\n- **Format**: `up-{version}.sh` and `down-{version}.sh` (e.g., `up-1.0.0.sh`, `down-1.0.0.sh`)\n- **Location**: Same directory as `docker-compose.yml`\n- **Permissions**: Made executable automatically by AutoUpdater\n\n#### Migration System Features\n- **Backup/Restore**: `backup.sh` and `restore.sh` provide safe rollback capabilities\n- **Fresh Installation Detection**: Automatically detects empty EventStore data\n- **Bidirectional Migrations**: UP scripts for deployment, DOWN scripts for rollback\n- **Error Recovery**: Automatic rollback on migration failures\n\n#### Current Migration Scripts\n- **`up-1.0.0.sh`**: Initial deployment setup (directories, permissions, monitoring tools, log rotation)\n- **`down-1.0.0.sh`**: Rollback for initial deployment (safe cleanup)\n- **`backup.sh`**: Creates EventStore backup (skips if fresh installation)\n- **`restore.sh`**: Restores from backup file\n\n#### Migration Script Best Practices\n- **Idempotent**: Scripts should be safe to run multiple times\n- **Error Handling**: Use `set -e` to fail on errors\n- **Logging**: Echo progress messages for debugging\n- **Validation**: Check for required conditions before making changes\n- **Permissions**: Use `sudo` for system-level changes when needed\n\n## 🐳 Image Tags\n\n- **Production**: `latest` (stable, promoted from preview)\n- **Development**: `preview` (development builds)\n- **Versioned**: `1.2.3`, `1.2`, `1` (semantic versioning)\n\n## 📋 System Requirements\n\n- **Docker Engine**: 20.10+ with compose plugin\n- **Platform**: Linux x64/ARM64 (multi-architecture support)\n- **Hardware**: USB cameras, optional NVIDIA GPU\n- **Network**: Host networking for real-time streaming\n- **Storage**: Persistent volumes for recordings and database\n\n## 🔒 Security\n\n- **EventStore**: Localhost binding only (127.0.0.1:2113)\n- **Privileged Mode**: Required for hardware access (cameras, USB)\n- **User Context**: Root for device access and container management\n\n## 📊 Monitoring\n\n```bash\n# Check service status\ndocker compose ps\n\n# View real-time logs\ndocker compose logs -f\n\n# Check EventStore health\ncurl -f http://localhost:2113/health/live\n\n# Monitor resource usage\ndocker stats\n```\n\n## 🛠️ Troubleshooting\n\n### Container Won't Start\n```bash\n# Check logs\ndocker compose logs app\n\n# Verify permissions\nsudo chown -R $USER:$USER /var/data/\n\n# Restart services\ndocker compose restart\n```\n\n### EventStore Issues\n```bash\n# Check EventStore logs\ndocker compose logs eventstore\n\n# Test health endpoint\ncurl -f http://localhost:2113/health/live\n\n# Reset EventStore data (⚠️ destroys all data!)\ndocker compose down\nsudo rm -rf /var/data/eventstore/data/*\ndocker compose up -d\n```\n\n### Hardware Access Problems\n```bash\n# Verify device access\nls -la /dev/video*\n\n# Check udev rules\nsudo udevadm info --query=all --name=/dev/video0\n\n# Restart with clean state\ndocker compose down \u0026\u0026 docker compose up -d\n```\n\n## 🔗 Related Projects\n\n- [RocketWelder](https://github.com/modelingevolution/rocket-welder2) - Main application\n- [AutoUpdater](https://github.com/modelingevolution/autoupdater) - Automated deployment system\n- [Deployments](https://github.com/modelingevolution/Deployments) - Production configurations\n\n---\n\n**Deployment**: Multi-architecture Docker Compose  \n**Registry**: Azure Container Registry (rocketwelder.azurecr.io)  \n**Auto-Updates**: Integrated with ModelingEvolution AutoUpdater","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodelingevolution%2Frocketwelder-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmodelingevolution%2Frocketwelder-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodelingevolution%2Frocketwelder-compose/lists"}