76 lines
2.4 KiB
Bash
76 lines
2.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# vps-control-plane.sh - Bootstrap script for VPS control plane
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
|
|
RUNTIME_DIR="/opt/homelab"
|
||
|
|
VPS_CONFIG="$REPO_ROOT/hosts/vps/runtime"
|
||
|
|
|
||
|
|
# Colors for output
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
log() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||
|
|
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
|
||
|
|
|
||
|
|
log "Starting VPS control plane bootstrap..."
|
||
|
|
|
||
|
|
# 1. Validate Docker availability
|
||
|
|
if ! command -v docker &> /dev/null; then
|
||
|
|
error "Docker is not installed. Please install Docker first."
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 2. Validate compose plugin
|
||
|
|
if ! docker compose version &> /dev/null; then
|
||
|
|
error "Docker Compose plugin is not installed."
|
||
|
|
fi
|
||
|
|
|
||
|
|
log "Docker and Compose plugin verified."
|
||
|
|
|
||
|
|
# 3. Create filesystem-first runtime structure
|
||
|
|
log "Creating filesystem-first runtime structure in $RUNTIME_DIR..."
|
||
|
|
sudo mkdir -p "$RUNTIME_DIR/events" \
|
||
|
|
"$RUNTIME_DIR/state" \
|
||
|
|
"$RUNTIME_DIR/world" \
|
||
|
|
"$RUNTIME_DIR/actions/pending" \
|
||
|
|
"$RUNTIME_DIR/actions/approved" \
|
||
|
|
"$RUNTIME_DIR/actions/running" \
|
||
|
|
"$RUNTIME_DIR/actions/completed" \
|
||
|
|
"$RUNTIME_DIR/actions/failed" \
|
||
|
|
"$RUNTIME_DIR/actions/rejected" \
|
||
|
|
"$RUNTIME_DIR/config" \
|
||
|
|
"$RUNTIME_DIR/logs"
|
||
|
|
|
||
|
|
# 4. Set permissions
|
||
|
|
log "Setting permissions..."
|
||
|
|
sudo chown -R $USER:$USER "$RUNTIME_DIR"
|
||
|
|
chmod -R 755 "$RUNTIME_DIR"
|
||
|
|
|
||
|
|
# 5. Install environment file
|
||
|
|
log "Installing environment configuration..."
|
||
|
|
if [ ! -f "$RUNTIME_DIR/config/control-plane.env" ]; then
|
||
|
|
cp "$VPS_CONFIG/control-plane/env.example" "$RUNTIME_DIR/config/control-plane.env"
|
||
|
|
log "Created $RUNTIME_DIR/config/control-plane.env from template."
|
||
|
|
else
|
||
|
|
warn "Environment file already exists, skipping installation."
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 6. Build and start the control plane
|
||
|
|
log "Building and starting control plane services..."
|
||
|
|
cd "$REPO_ROOT/services/control-plane"
|
||
|
|
docker compose build
|
||
|
|
docker compose up -d
|
||
|
|
|
||
|
|
log "VPS control plane bootstrap complete!"
|
||
|
|
|
||
|
|
echo -e "\n${YELLOW}Verification commands:${NC}"
|
||
|
|
echo "1. Check container status: docker compose ps"
|
||
|
|
echo "2. Check operator UI: curl http://localhost:8080/summary"
|
||
|
|
echo "3. Validate world state: ls -l $RUNTIME_DIR/world"
|
||
|
|
echo "4. Monitor events: tail -f $RUNTIME_DIR/events/*/*/*.json"
|