Finalised
EZDeploy Git-native Linux deployment controller

Deployment Automation · Linux Infrastructure

EZDeploy — Linux Deployment Automation

EZDeploy turns a Git repository into a production-managed application on a systemd Linux host. It owns the path from source synchronisation through runtime preparation, service or container launch, Nginx routing and HTTPS, while maintaining a deployment registry for repeatable operations.

Releases are built around recoverability. Remote commit-driven deployments use authenticated Git and SSH controls, divergence-safe branch updates and last-known-good rollback so a failed candidate never becomes the only runnable version.

Key Features

Repository to HTTPS

Clones or updates the selected branch, discovers application requirements, prepares the runtime, launches the service and provisions a validated Nginx and TLS configuration in one guided flow.

Rollback-aware releases

Builds and verifies a candidate before promotion, retains the previous release during the switch and automatically restores the last-known-good version when startup or health validation fails.

Remote commit operations

Authenticated operators can select a registered project, create a deployment commit against its configured branch and trigger redeployment over SSH, keeping every release tied to an auditable Git state.

Operational control plane

The terminal workspace exposes project status, ports, uptime, memory, host CPU, RAM and disk alongside service controls and journal-backed logs.

Implementation

Codebase discovery

The walker detects environment-variable usage, routes, language and framework signals, nested Dockerfiles, exposed ports and start commands before deployment begins.

Release-safe Git controller

Repository identity is verified before updates, branch movement is restricted to fast-forward merges, and private SSH keys must pass strict file and permission checks before being scoped to the Git process.

Dual runtime orchestration

Native applications run as the invoking user under restart-managed systemd units, while Docker workloads use loopback-only port publishing and keep the previous container available until promotion succeeds.

Ingress and release registry

EZDeploy records the active branch, runtime, ports, Docker context, domain and status, then generates route-aware Nginx configuration, validates it and provisions HTTPS through Certbot.

Architecture in motion

How it works

Source to managed service

A repository is synchronised into a known project location, inspected for its operational contract and converted into either a native systemd service or an isolated Docker workload.

  1. Git repository
  2. Verified clone or fast-forward
  3. Environment and runtime discovery
  4. Dependency preparation
  5. Registered service

Repository identity, configured branch and project path are verified before deployment state is changed.

EZDeploy cloning and registering a Git repository from its terminal interfaceOpen full size ↗

Candidate promotion and rollback

The next release is prepared separately from the active process. Only a verified candidate is promoted; any failed start restores the retained release and its routing state.

  1. Remote deployment commit
  2. Branch-safe synchronisation
  3. Candidate build
  4. Startup verification
  5. Promote or restore

The active release remains recoverable throughout promotion, providing an automatic last-known-good rollback path.

EZDeploy preparing a Go application before release promotionOpen full size ↗

Configuration to secure ingress

Discovered variables and routes become a protected runtime environment and a deliberately exposed HTTP surface, with the application itself remaining bound behind Nginx.

  1. Source-level environment discovery
  2. 0600 environment file
  3. Loopback service port
  4. Validated Nginx routes
  5. Certbot HTTPS

Existing secret values are preserved, new variables retain their source locations and Nginx changes must pass validation before reload.

EZDeploy discovering environment variables and their source locationsOpen full size ↗

Design Choices

Fail closed on ambiguous source state

Existing clones must match the requested remote and divergent branches are never merged implicitly, preventing automation from concealing a release decision.

Build before interruption

Candidate images and dependencies are prepared before the live workload is touched, shrinking the failure window and preserving a concrete recovery target.

Keep secrets and processes least-privileged

Environment and private-key files use restrictive permissions, SSH credentials are process-scoped and native services run as the original sudo user rather than root.

Treat deployment state as product data

A durable registry gives the interface a single operational view of every project, release branch, runtime, port, domain and current status.