- Implemented Docker container scanning and periodic updates in the Server initialization. - Added new RPC endpoints for managing Docker containers, including start, stop, and restart functionalities. - Updated the API to handle package management for Docker-based applications. - Improved environment variable handling for user-specific configurations in Podman and Docker clients. - Enhanced the development startup script to include Docker container management and provide clearer instructions for full stack setup.
218 lines
6.3 KiB
Markdown
218 lines
6.3 KiB
Markdown
# ✅ START/STOP/LAUNCH COMPLETE
|
|
|
|
## Summary
|
|
|
|
Bitcoin Core and all docker-compose apps can now be controlled from the "My Apps" UI. Start, stop, and launch buttons are fully functional with the Rust backend.
|
|
|
|
## What Was Added
|
|
|
|
### Backend RPC Methods
|
|
|
|
Added three new RPC endpoints to `/Users/dorian/Projects/archy/core/archipelago/src/api/rpc.rs`:
|
|
|
|
1. **`package.start`** - Starts a docker-compose container
|
|
2. **`package.stop`** - Stops a docker-compose container
|
|
3. **`package.restart`** - Restarts a docker-compose container
|
|
|
|
These methods:
|
|
- Take a package `id` (e.g., `"bitcoin"`)
|
|
- Convert it to container name (e.g., `"archy-bitcoin"`)
|
|
- Execute Docker CLI commands directly
|
|
- Return success/error to frontend
|
|
|
|
## Testing
|
|
|
|
### Stop Bitcoin
|
|
```bash
|
|
curl -X POST http://localhost:5959/rpc/v1 \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"method": "package.stop", "params": {"id": "bitcoin"}}'
|
|
```
|
|
|
|
**Result:**
|
|
```json
|
|
{"result":null,"error":null}
|
|
```
|
|
|
|
**Docker status:**
|
|
```
|
|
archy-bitcoin Exited (0) 4 seconds ago
|
|
```
|
|
|
|
### Start Bitcoin
|
|
```bash
|
|
curl -X POST http://localhost:5959/rpc/v1 \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"method": "package.start", "params": {"id": "bitcoin"}}'
|
|
```
|
|
|
|
**Result:**
|
|
```json
|
|
{"result":null,"error":null}
|
|
```
|
|
|
|
**Docker status:**
|
|
```
|
|
archy-bitcoin Up 2 seconds
|
|
```
|
|
|
|
## How It Works
|
|
|
|
### 1. Frontend Button Click
|
|
User clicks "Stop" button in "My Apps"
|
|
|
|
### 2. RPC Call
|
|
Frontend sends:
|
|
```json
|
|
{
|
|
"method": "package.stop",
|
|
"params": {"id": "bitcoin"}
|
|
}
|
|
```
|
|
|
|
### 3. Backend Processing
|
|
```rust
|
|
async fn handle_package_stop(params) {
|
|
let package_id = params.get("id"); // "bitcoin"
|
|
let container_name = format!("archy-{}", package_id); // "archy-bitcoin"
|
|
|
|
// Execute: docker stop archy-bitcoin
|
|
tokio::process::Command::new("docker")
|
|
.arg("stop")
|
|
.arg(&container_name)
|
|
.output()
|
|
.await?;
|
|
}
|
|
```
|
|
|
|
### 4. Docker Execution
|
|
```bash
|
|
docker stop archy-bitcoin
|
|
```
|
|
|
|
### 5. Live Update
|
|
Backend's 5-second poll detects the stopped container and broadcasts the state change via WebSocket to the UI.
|
|
|
|
## UI Behavior
|
|
|
|
### My Apps Page
|
|
|
|
**Running State:**
|
|
- Green badge showing "running"
|
|
- "Stop" button enabled
|
|
- "Launch" button enabled
|
|
|
|
**Stopped State:**
|
|
- Gray badge showing "stopped"
|
|
- "Start" button enabled
|
|
- "Launch" button disabled
|
|
|
|
### Launch Functionality
|
|
|
|
When "Launch" is clicked:
|
|
1. Opens `lan-address` from package data
|
|
2. For Bitcoin Core: `http://localhost:18443`
|
|
3. Opens in new browser tab
|
|
|
|
## Supported Apps
|
|
|
|
All docker-compose apps support start/stop/launch:
|
|
|
|
| App | Container Name | Port | Status |
|
|
|-----|----------------|------|--------|
|
|
| Bitcoin Core | `archy-bitcoin` | 18443 | ✅ Tested |
|
|
| BTCPay Server | `archy-btcpay` | 23000 | ✅ Ready |
|
|
| Home Assistant | `archy-homeassistant` | 8123 | ✅ Ready |
|
|
| Grafana | `archy-grafana` | 3000 | ✅ Ready |
|
|
| All others | `archy-*` | Various | ✅ Ready |
|
|
|
|
## Architecture Flow
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Vue.js UI │
|
|
│ - Stop/Start buttons │
|
|
│ - Launch button │
|
|
└─────────────┬───────────────────────────┘
|
|
│ RPC: package.start/stop
|
|
┌─────────────▼───────────────────────────┐
|
|
│ Rust Backend │
|
|
│ - Receives RPC call │
|
|
│ - Converts package ID to container name │
|
|
│ - Executes Docker command │
|
|
└─────────────┬───────────────────────────┘
|
|
│ docker start/stop
|
|
┌─────────────▼───────────────────────────┐
|
|
│ Docker Engine │
|
|
│ - Stops/starts container │
|
|
│ - Container state changes │
|
|
└─────────────┬───────────────────────────┘
|
|
│ Poll every 5s
|
|
┌─────────────▼───────────────────────────┐
|
|
│ Docker Scanner │
|
|
│ - Detects state change │
|
|
│ - Updates package-data │
|
|
│ - Broadcasts via WebSocket │
|
|
└─────────────┬───────────────────────────┘
|
|
│ WebSocket update
|
|
┌─────────────▼───────────────────────────┐
|
|
│ Vue.js UI (auto-updates) │
|
|
│ - Button states update │
|
|
│ - Badge color changes │
|
|
└──────────────────────────────────────────┘
|
|
```
|
|
|
|
## Development Testing
|
|
|
|
### Start Full Stack
|
|
```bash
|
|
./scripts/dev-start.sh
|
|
# Choose option 2 (Full stack)
|
|
```
|
|
|
|
### Open UI
|
|
```
|
|
http://localhost:8101 (or 8100 if available)
|
|
```
|
|
|
|
### Navigate to My Apps
|
|
1. See Bitcoin Core running
|
|
2. Click "Stop" → Status changes to "stopped" within 5 seconds
|
|
3. Click "Start" → Status changes to "running" within 5 seconds
|
|
4. Click "Launch" → Opens http://localhost:18443
|
|
|
|
## Files Modified
|
|
|
|
1. **`core/archipelago/src/api/rpc.rs`**
|
|
- Added `package.start`, `package.stop`, `package.restart` endpoints
|
|
- Direct Docker CLI integration
|
|
- Parameter parsing and error handling
|
|
|
|
## Current Status
|
|
|
|
✅ **Start/Stop**: Fully functional
|
|
✅ **Launch**: Working with correct URLs
|
|
✅ **Live Updates**: 5-second polling active
|
|
✅ **Error Handling**: Proper error messages
|
|
✅ **All Apps**: Every docker-compose app supported
|
|
|
|
## Next: Start All Apps
|
|
|
|
To see more apps in "My Apps":
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
All will be controllable from the UI!
|
|
|
|
---
|
|
|
|
**Backend must be running for controls to work:**
|
|
```bash
|
|
cd /Users/dorian/Projects/archy/core
|
|
ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev \
|
|
ARCHIPELAGO_DEV_MODE=true \
|
|
ARCHIPELAGO_CONTAINER_RUNTIME=docker \
|
|
./target/release/archipelago
|
|
```
|