- Updated BUILD-GUIDE.md to clarify instructions for building the Archipelago Auto-Installer ISO, emphasizing the recommended method of building directly on the target server. - Added auto-installation of missing dependencies (xorriso, podman) when running the build script with sudo. - Enhanced the build-auto-installer-iso.sh script to capture container images from the live server, ensuring the ISO includes the same set of applications as the dev server. - Revised deployment documentation to stress the importance of building the Rust backend on the Linux dev server and included new instructions for capturing system-level changes for ISO builds. - Improved UI components and added new bundled applications (BTCPay Server, Mempool Explorer, Nostr Relay, Strfry Relay, Tailscale) to enhance user experience.
118 lines
5.1 KiB
Bash
Executable File
118 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Deploy Archipelago code to the HP ProDesk target
|
|
#
|
|
# Usage:
|
|
# ./scripts/deploy-to-target.sh # Sync and rebuild
|
|
# ./scripts/deploy-to-target.sh --quick # Sync only, no rebuild
|
|
# ./scripts/deploy-to-target.sh --live # Deploy to live system
|
|
#
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Configuration
|
|
TARGET_HOST="${ARCHIPELAGO_TARGET:-archipelago@192.168.1.228}"
|
|
TARGET_DIR="/home/archipelago/archy"
|
|
# Password for non-interactive SSH/rsync (dev server only). See .cursor/rules/Development-Workflow.md
|
|
ARCHIPELAGO_PASSWORD="${ARCHIPELAGO_PASSWORD:-archipelago}"
|
|
SSH_OPTS="-o StrictHostKeyChecking=no"
|
|
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ Deploying to Archipelago Target ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
echo "Target: $TARGET_HOST"
|
|
echo ""
|
|
|
|
# Parse arguments
|
|
QUICK=false
|
|
LIVE=false
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--quick) QUICK=true ;;
|
|
--live) LIVE=true ;;
|
|
esac
|
|
done
|
|
|
|
# Sync code
|
|
echo "📦 Syncing code..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" rsync -avz --delete \
|
|
-e "ssh $SSH_OPTS" \
|
|
--exclude 'node_modules' \
|
|
--exclude 'target' \
|
|
--exclude 'dist' \
|
|
--exclude '.git' \
|
|
--exclude 'image-recipe/build' \
|
|
--exclude 'image-recipe/results' \
|
|
"$PROJECT_DIR/" "$TARGET_HOST:$TARGET_DIR/"
|
|
|
|
if [ "$QUICK" = true ]; then
|
|
echo ""
|
|
echo "✅ Quick sync complete!"
|
|
exit 0
|
|
fi
|
|
|
|
# Build on target
|
|
echo ""
|
|
echo "🔨 Building on target..."
|
|
|
|
# Frontend
|
|
echo " Building frontend..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "cd $TARGET_DIR/neode-ui && npm install --silent && npm run build" 2>&1 | sed 's/^/ /'
|
|
|
|
# Backend (if Rust is installed)
|
|
if sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "source ~/.cargo/env 2>/dev/null && command -v cargo" >/dev/null 2>&1; then
|
|
echo " Building backend..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "source ~/.cargo/env && cd $TARGET_DIR/core && cargo build --release 2>&1" | tail -10 | sed 's/^/ /'
|
|
else
|
|
echo " ⚠️ Rust not installed on target, skipping backend build"
|
|
fi
|
|
|
|
if [ "$LIVE" = true ]; then
|
|
echo ""
|
|
echo "🚀 Deploying to live system..."
|
|
|
|
# Deploy backend (check if binary exists)
|
|
if sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "[ -f $TARGET_DIR/core/target/release/archipelago ]" 2>/dev/null; then
|
|
echo " Deploying backend binary..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo systemctl stop archipelago"
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo cp $TARGET_DIR/core/target/release/archipelago /usr/local/bin/"
|
|
fi
|
|
|
|
# Deploy frontend
|
|
echo " Deploying frontend..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo rm -rf /opt/archipelago/web-ui/*"
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo cp -r $TARGET_DIR/web/dist/neode-ui/* /opt/archipelago/web-ui/"
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo chown -R 1000:1000 /opt/archipelago/web-ui"
|
|
|
|
# Restart services
|
|
echo " Restarting services..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "sudo systemctl start archipelago && sudo systemctl restart nginx"
|
|
|
|
# Rebuild and restart LND UI container (serves the static app at port 8081; otherwise changes to docker/lnd-ui/ are not visible)
|
|
echo " Rebuilding LND UI..."
|
|
if sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" "cd $TARGET_DIR/docker/lnd-ui && (command -v podman >/dev/null 2>&1 && sudo podman build -t lnd-ui:latest . || sudo docker build -t lnd-ui:latest .)" 2>&1 | tail -8 | sed 's/^/ /'; then
|
|
echo " Restarting LND UI container..."
|
|
sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" 'for c in $(sudo podman ps -a --format "{{.Names}}" 2>/dev/null | grep -i lnd-ui) $(sudo docker ps -a --format "{{.Names}}" 2>/dev/null | grep -i lnd-ui); do [ -n "$c" ] && (sudo podman restart "$c" 2>/dev/null || sudo docker restart "$c" 2>/dev/null) && break; done' || true
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ Deployed to live system!"
|
|
echo " Backend: $(sshpass -p "$ARCHIPELAGO_PASSWORD" ssh $SSH_OPTS "$TARGET_HOST" 'sudo systemctl is-active archipelago')"
|
|
echo " Web UI: http://$(echo $TARGET_HOST | cut -d@ -f2)"
|
|
else
|
|
echo ""
|
|
echo "✅ Build complete!"
|
|
echo ""
|
|
echo "To test frontend dev server:"
|
|
echo " ssh $TARGET_HOST"
|
|
echo " cd ~/archy/neode-ui && npm run dev -- --host 0.0.0.0"
|
|
echo " Then open: http://$(echo $TARGET_HOST | cut -d@ -f2):5173"
|
|
echo ""
|
|
echo "To deploy to live system:"
|
|
echo " ./scripts/deploy-to-target.sh --live"
|
|
fi
|