Skip to content

Composr v2.0.0

Latest

Choose a tag to compare

@Vansmak Vansmak released this 14 Jul 02:14

πŸ“‹ Found CHANGELOG.md - extracting release notes...
βœ… Using changelog entries for v2.0.0

Composr v2.0.0

πŸš€ Container Management Platform

Added

  • 🎯 Service-Centric Model: a service's profile, compose file, and host are now attributes you change directly, not scattered one-off buttons
    • Compose Profiles: select which optional profiles are active for a stack (toggle chips + Deploy in the stack modal), and mark any core service "Inactive" with one click β€” edits the file with a line-based insert/removal (never rewrites the whole file, so comments and formatting survive) and immediately redeploys, stopping (not removing) the container so it shows up as a normal Exited/Inactive status rather than vanishing
    • Move a Service: move a service from one compose file to another via the container popup β€” two-step preview/commit flow shows a diff of both files and flags real risks before you confirm (cross-file depends_on, top-level volumes/networks the target doesn't declare, ${VAR} references missing from the target's .env, name/port collisions, and network_mode: host or build: services that may not be portable to a different location)
    • Per-Stack Deploy Host: send a stack to a specific connected host from its properties β€” file stays local, only where the containers run changes. If the target host is offline, the deploy is refused outright rather than silently landing on local (no silent fallback, ever)
    • Port-Conflict Resolution: before any deploy, host ports are checked against what's already published on the target β€” a conflict shows which container holds it, suggests the nearest free port, or offers to deploy to a different connected (and architecture-aware) host instead
    • Service Properties Panel: the container "More" popup now leads with Profile / Compose file / Host as live attribute-changers, with the existing logs/inspect/terminal/repull/remove actions below
  • Images β€” Multi-Select & Bulk Remove: "Select Multiple" toggle with checkboxes (grid and table view) to remove several images at once, instead of one at a time
  • Intermittent Host Support: mark a host as "expect offline" (e.g. a Windows Docker Desktop PC that isn't always on) so it shows as paused rather than an error β€” display only, doesn't relax the no-silent-fallback deploy rule

Fixed

  • Security: path traversal in the compose/env file read+write endpoints β€” an absolute or ../ path could escape the configured compose directory; now resolved and validated against the allowed directories before every read or write
  • Security: remote_hosts.py's background health-check thread mutated shared connection state without a lock, racing request threads β€” could produce a "dictionary changed size during iteration" error under real concurrent use
  • Security: batch container actions (start/stop/restart/remove) ignored which host a selected container was actually on in multi-host setups, always acting against the local/last-switched host instead
  • Security: startup now logs a clear warning when running without AUTH_USERNAME/AUTH_PASSWORD set, and /login has basic rate-limiting (5 attempts, 5 minute lockout) β€” was previously unlimited
  • Backup: create_backup/preview_backup now accept a host parameter and correctly resolve a per-host Docker client, instead of always operating on local regardless of which host was intended
  • Images: "Prune Images" had a duplicate event listener causing every click to fire the request twice β€” the second request would hit Docker's daemon-level prune lock and fail with "a prune operation is already running"
  • Stale static assets: local JS/CSS files had no cache-busting at all, so a browser could keep serving old code indefinitely across upgrades β€” every static asset now carries a version query string that changes on each restart
  • Removed a substantial amount of dead code left over from the pre-multi-host "bookmark era" (unreachable duplicate endpoints, orphaned functions, dead frontend call sites) with no behavior change for anything actually reachable from the UI

Changed

  • The module-level Docker client global was removed entirely β€” every endpoint now resolves its own per-request, per-host client, closing a class of "wrong host in multi-host setups" bugs at the root

🐳 Docker Images

  • docker pull vansmak/composr:2.0.0
  • docker pull vansmak/composr:latest

πŸ”§ Supported Platforms

  • linux/amd64
  • linux/arm64
  • linux/arm/v7

πŸ“¦ Installation

docker run -d \
  --name composr \
  -p 5003:5003 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /path/to/docker/projects:/app/projects \
  -v /path/to/config/composr:/app/data \
  vansmak/composr:2.0.0

✨ Core Features

  • Multi-host Docker container management
  • Real-time container monitoring and control
  • Docker Compose file editor with syntax highlighting
  • Environment file management
  • Image management across multiple hosts
  • Backup and restore functionality
  • Modern web interface with dark/light themes