- 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.
6.3 KiB
✅ 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:
package.start- Starts a docker-compose containerpackage.stop- Stops a docker-compose containerpackage.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
curl -X POST http://localhost:5959/rpc/v1 \
-H "Content-Type: application/json" \
-d '{"method": "package.stop", "params": {"id": "bitcoin"}}'
Result:
{"result":null,"error":null}
Docker status:
archy-bitcoin Exited (0) 4 seconds ago
Start Bitcoin
curl -X POST http://localhost:5959/rpc/v1 \
-H "Content-Type: application/json" \
-d '{"method": "package.start", "params": {"id": "bitcoin"}}'
Result:
{"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:
{
"method": "package.stop",
"params": {"id": "bitcoin"}
}
3. Backend Processing
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
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:
- Opens
lan-addressfrom package data - For Bitcoin Core:
http://localhost:18443 - 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
./scripts/dev-start.sh
# Choose option 2 (Full stack)
Open UI
http://localhost:8101 (or 8100 if available)
Navigate to My Apps
- See Bitcoin Core running
- Click "Stop" → Status changes to "stopped" within 5 seconds
- Click "Start" → Status changes to "running" within 5 seconds
- Click "Launch" → Opens http://localhost:18443
Files Modified
core/archipelago/src/api/rpc.rs- Added
package.start,package.stop,package.restartendpoints - Direct Docker CLI integration
- Parameter parsing and error handling
- Added
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":
docker compose up -d
All will be controllable from the UI!
Backend must be running for controls to work:
cd /Users/dorian/Projects/archy/core
ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev \
ARCHIPELAGO_DEV_MODE=true \
ARCHIPELAGO_CONTAINER_RUNTIME=docker \
./target/release/archipelago