# Docker Deployment Manager - Desktop App Electron desktop app for managing Docker deployments across multiple Linux servers. ## Quick Start ```powershell # 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: ```json { "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 ```