Files
Clint Masden feec35ffce Add full REST API for all deployment operations (projects, servers, docker)
Port all IPC handlers to HTTP endpoints so the UI and LLM use the same
API. Adds routes/projects.js (scan, compare, init), routes/servers.js
(CRUD, containers, logs), routes/docker.js (build, deploy, pull, vscode-diff).
Enhanced ssh.js with full SSHService class (SFTP upload/download).
Updated renderer api.js to use fetch instead of window.api IPC.
Added concurrently for npm run dev (API + Vite + Electron).
OpenAPI spec now covers all 24 endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 11:17:40 -06:00
..
2026-02-27 08:55:41 -06:00
2026-02-27 08:55:41 -06:00
2026-02-27 08:55:41 -06:00
2026-02-27 08:55:41 -06:00
2026-02-27 08:55:41 -06:00
2026-02-27 08:55:41 -06:00

Docker Deployment Manager - Desktop App

Electron desktop app for managing Docker deployments across multiple Linux servers.

Quick Start

# 1. Install dependencies
npm install

# 2. Configure SSH credentials
cp .env.example .env
# Edit .env with your SSH_USERNAME and SSH_PASSWORD

# 3. Run the app
npm start

# For development with DevTools:
npm run dev

Features

Dashboard

The main screen shows all projects in your C:\.bucket\Repos.Git directory that have Docker configurations.

Column Description
Project Project name and path
Local Click to see what files are present/missing
Deployed Whether the project exists on the selected server
Running Whether the container is currently running
Diff Compare local vs deployed docker-compose.yml
Actions Build, Deploy buttons

Local Status (Click for Details)

Shows what files each project has:

  • Dockerfile - Container build instructions (you create this manually)
  • docker-compose.yml - Runtime config (ports, env, volumes)
  • build-image-tar.ps1 - Script to build and package Docker image
  • .dockerignore - Files to exclude from Docker image

If files are missing, click the status badge to see what's needed and how to fix it.

Server Management

Click "Servers" to add your Linux servers:

  1. Name: Friendly name (e.g., "Production Server")
  2. Host: IP address (e.g., 192.168.69.4)
  3. Username: SSH username (optional, uses .env by default)

Actions

Build

Runs the project's build-image-tar.ps1 script which:

  1. Builds the Docker image: docker buildx build --platform linux/amd64
  2. Saves to tar: docker save -o project.tar

Deploy

  1. Uploads the tar file to ~/containers/{project}/
  2. Uploads docker-compose.yml
  3. Runs docker load -i project.tar
  4. Runs docker compose up -d

Compare (Diff)

Shows local vs deployed docker-compose.yml side by side.

  • Pull: Download server version to local (sync your source of truth)
  • Push: Upload local version to server

Init Project

If a project is missing files, the Details modal shows:

  • Which files are missing
  • Commands to create them

Click "Run CLI Init" to generate missing files using the CLI tool.

Configuration

SSH Credentials (.env)

SSH_USERNAME=deployer
SSH_PASSWORD=your-password-here

Server Config (deployment-config.json)

Auto-generated when you add servers:

{
  "servers": [
    { "id": "1", "name": "Server 1", "host": "192.168.69.4" },
    { "id": "2", "name": "Server 2", "host": "192.168.69.5" }
  ],
  "projectsRoot": "C:\\.bucket\\Repos.Git"
}

Server Convention

The app expects this structure on your Linux servers:

~/containers/
├── game.justone/
│   ├── docker-compose.yml
│   ├── .env (optional)
│   ├── data/ (optional)
│   └── game.justone.tar
├── another-project/
│   └── ...

Workflow

First Time Setup

  1. Create Dockerfile manually for your project (each project is different)
  2. Use CLI or app to generate docker-compose.yml and build scripts
  3. Add your server(s) in the app
  4. Build and deploy

Regular Deployment

  1. Make code changes
  2. Click "Build" to create new tar
  3. Click "Deploy" to push to server

Checking Differences

If you manually edited something on the server:

  1. Select server and click "Scan Server"
  2. Click "Compare" on the project
  3. Review differences
  4. Click "Pull" to update your local copy (source of truth)

Files

app/
├── main/
│   ├── index.js           # Electron main process + IPC handlers
│   ├── ssh-service.js     # SSH/SFTP operations
│   ├── project-scanner.js # Scans local projects for Docker files
│   └── server-scanner.js  # Scans remote ~/containers/* via SSH
├── renderer/
│   ├── index.html         # Dashboard UI
│   ├── styles.css         # Dark theme
│   └── app.js             # Frontend logic
├── preload.js             # IPC bridge (contextBridge)
├── .env                   # SSH credentials (not committed)
├── .env.example           # Template
└── package.json