151 lines
4.2 KiB
Markdown
151 lines
4.2 KiB
Markdown
# 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
|
|
```
|