- Added v1.3.0 release notes to Settings "What's New" modal - Deploy script now auto-fixes backend bind address (0.0.0.0 → 127.0.0.1) - All image-recipe systemd/service files updated to 127.0.0.1 - Fixed dead man's switch: alert-config.json owned by root, now chown'd - Removed unused toggleAutoSync function (build error) - Deploy script adds LND REST port 8080 to Tor config generation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
196 lines
5.5 KiB
Markdown
196 lines
5.5 KiB
Markdown
# Live Server to ISO Build Integration Guide
|
|
|
|
This document explains how to keep the ISO build synchronized with the live development server.
|
|
|
|
## Development Workflow
|
|
|
|
### 1. Develop and Test on Live Server
|
|
|
|
```bash
|
|
# Make changes locally
|
|
vim core/archipelago/src/...
|
|
|
|
# Deploy to live server for testing
|
|
./scripts/deploy-to-target.sh --live
|
|
|
|
# Test at http://192.168.1.228
|
|
# Check logs: ssh archipelago@192.168.1.228 'sudo journalctl -u archipelago -f'
|
|
```
|
|
|
|
### 2. Capture System Changes
|
|
|
|
When you make system-level changes on the live server (nginx config, systemd service, etc.):
|
|
|
|
```bash
|
|
cd image-recipe
|
|
./sync-from-live.sh
|
|
```
|
|
|
|
This automatically captures:
|
|
- `/etc/systemd/system/archipelago.service` → `configs/archipelago.service`
|
|
- `/etc/nginx/sites-available/archipelago` → `configs/nginx-archipelago.conf`
|
|
- `/etc/logrotate.d/archipelago` → `configs/logrotate.conf`
|
|
|
|
### 3. Build New ISO
|
|
|
|
```bash
|
|
# Build backend and frontend
|
|
./scripts/build-backend.sh
|
|
./scripts/build-frontend.sh
|
|
|
|
# Build ISO with latest changes
|
|
./build-debian-iso.sh
|
|
|
|
# Test in QEMU
|
|
./test-iso-qemu.sh
|
|
```
|
|
|
|
### 4. Verify Integration
|
|
|
|
The ISO build script should:
|
|
1. Copy `configs/archipelago.service` to `/etc/systemd/system/`
|
|
2. Copy `configs/nginx-archipelago.conf` to `/etc/nginx/sites-available/archipelago`
|
|
3. Create symlink: `/etc/nginx/sites-enabled/archipelago`
|
|
4. Enable the service: `systemctl enable archipelago`
|
|
5. Install backend to `/usr/local/bin/archipelago`
|
|
6. Install frontend to `/opt/archipelago/web-ui/`
|
|
|
|
## Critical Configuration Settings
|
|
|
|
### Backend Service (archipelago.service)
|
|
|
|
**Must-have settings**:
|
|
```ini
|
|
[Service]
|
|
User=root # Required for root Podman access
|
|
Environment="ARCHIPELAGO_BIND=127.0.0.1:5678" # Backend API port
|
|
Environment="ARCHIPELAGO_DEV_MODE=true" # Enable container auto-detection
|
|
```
|
|
|
|
**Why root?**: The backend must run as root to access containers started with `sudo podman`. Containers in root Podman context are invisible to rootless Podman.
|
|
|
|
### Nginx Configuration (nginx-archipelago.conf)
|
|
|
|
**Must-have proxies**:
|
|
```nginx
|
|
location /rpc/ {
|
|
proxy_pass http://127.0.0.1:5678; # Backend RPC endpoint
|
|
}
|
|
|
|
location /ws {
|
|
proxy_pass http://127.0.0.1:5678; # WebSocket for real-time updates
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
}
|
|
```
|
|
|
|
## File Paths Reference
|
|
|
|
### Build Artifacts
|
|
- `build/backend/archipelago` - Compiled Rust backend
|
|
- `build/frontend/` - Built Vue.js frontend
|
|
- `configs/` - System configuration files
|
|
- `results/` - Built ISO images
|
|
|
|
### Live Server Paths
|
|
- `/usr/local/bin/archipelago` - Backend binary
|
|
- `/opt/archipelago/web-ui/` - Frontend files
|
|
- `/etc/systemd/system/archipelago.service` - Service definition
|
|
- `/etc/nginx/sites-available/archipelago` - Nginx config
|
|
- `/var/lib/archipelago/` - Application data
|
|
|
|
### ISO Installation Paths
|
|
Same as live server (above) - the ISO must replicate the exact file structure.
|
|
|
|
## Container Management
|
|
|
|
### Root vs Rootless Podman
|
|
|
|
**Current approach**: Root Podman
|
|
- Containers started with: `sudo podman run ...`
|
|
- Backend runs as: `root` user (in systemd)
|
|
- Container detection: Works automatically in dev mode
|
|
|
|
**Why not rootless?**
|
|
- Would require `User=archipelago` in systemd service
|
|
- All containers must be started as `archipelago` user
|
|
- More complex permission management
|
|
|
|
### Container Detection
|
|
|
|
The backend automatically detects running containers when:
|
|
1. `ARCHIPELAGO_DEV_MODE=true` is set
|
|
2. Backend runs with same privileges as container runtime
|
|
3. Containers exist in accessible Podman context
|
|
|
|
## Troubleshooting
|
|
|
|
### Issue: Containers not detected in ISO
|
|
|
|
**Cause**: Backend not running as root, or dev mode disabled
|
|
|
|
**Fix**:
|
|
1. Check `configs/archipelago.service` has `User=root`
|
|
2. Check `Environment="ARCHIPELAGO_DEV_MODE=true"` is set
|
|
3. Rebuild ISO and test
|
|
|
|
### Issue: UI not loading
|
|
|
|
**Cause**: Nginx config not copied or frontend files missing
|
|
|
|
**Fix**:
|
|
1. Verify `configs/nginx-archipelago.conf` exists
|
|
2. Check frontend built to `build/frontend/`
|
|
3. Verify ISO build script copies these files
|
|
|
|
### Issue: Backend won't start
|
|
|
|
**Cause**: Binary permissions or missing dependencies
|
|
|
|
**Fix**:
|
|
1. Check backend binary is executable: `chmod +x /usr/local/bin/archipelago`
|
|
2. Check dependencies installed (Podman, nginx)
|
|
3. Review systemd logs: `journalctl -u archipelago`
|
|
|
|
## Testing Checklist
|
|
|
|
Before releasing an ISO, verify:
|
|
|
|
- [ ] Boot ISO in QEMU
|
|
- [ ] Systemd service starts: `systemctl status archipelago`
|
|
- [ ] Backend responds: `curl http://localhost:5678/health`
|
|
- [ ] UI accessible: Open browser to `http://localhost`
|
|
- [ ] Container detection: `sudo podman run -d --name test nginx` → Shows in UI
|
|
- [ ] RPC works: Test login and API calls
|
|
- [ ] WebSocket connects: Check browser console
|
|
|
|
## Automated Build Pipeline (Future)
|
|
|
|
To automate this workflow:
|
|
|
|
1. **CI/CD Integration**
|
|
- Trigger on main branch commits
|
|
- Run `sync-from-live.sh` with credentials
|
|
- Build backend and frontend
|
|
- Build ISO
|
|
- Upload to releases
|
|
|
|
2. **Version Management**
|
|
- Tag releases with semantic versions
|
|
- Include git commit hash in ISO metadata
|
|
- Track which configs were included
|
|
|
|
3. **Testing Automation**
|
|
- Boot ISO in headless QEMU
|
|
- Run API tests
|
|
- Verify container detection
|
|
- Generate test report
|
|
|
|
## Resources
|
|
|
|
- Development Workflow Rules: `.cursor/rules/Development-Workflow.mdc`
|
|
- Build Checklist: `ISO-BUILD-CHECKLIST.md`
|
|
- Architecture Docs: `.cursor/rules/Architecture.mdc`
|
|
- Deployment Scripts: `scripts/deploy-to-target.sh`
|