Add droplet sync and startup scripts
- droplet-sync.sh: Syncs assets from LFS repo on boot - ralpha-ue5.service: Systemd service for auto-start - droplet-setup-ue5-project.sh: One-time setup script Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
22cac6b96b
commit
ad72081760
|
|
@ -40,3 +40,4 @@ Desktop.ini
|
||||||
|
|
||||||
# Starter content (if using)
|
# Starter content (if using)
|
||||||
**/StarterContent/
|
**/StarterContent/
|
||||||
|
repomix-output.txt
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# One-time setup for ralpha-ue5 on DO droplet
|
||||||
|
# Run this after base UE5 is installed
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REPO_DIR="/opt/ralpha-ue5"
|
||||||
|
GITHUB_TOKEN="${GITHUB_TOKEN:-}"
|
||||||
|
|
||||||
|
echo "=== Setting up ralpha-ue5 on droplet ==="
|
||||||
|
|
||||||
|
# Install jq for JSON parsing
|
||||||
|
apt-get update && apt-get install -y jq
|
||||||
|
|
||||||
|
# Create ralpha user if not exists
|
||||||
|
if ! id "ralpha" &>/dev/null; then
|
||||||
|
useradd -m -s /bin/bash ralpha
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone ralpha-ue5 with LFS
|
||||||
|
if [ ! -d "$REPO_DIR" ]; then
|
||||||
|
echo "Cloning ralpha-ue5..."
|
||||||
|
|
||||||
|
if [ -n "$GITHUB_TOKEN" ]; then
|
||||||
|
git clone "https://${GITHUB_TOKEN}@github.com/jamestagg/ralpha-ue5.git" "$REPO_DIR"
|
||||||
|
else
|
||||||
|
git clone "https://github.com/jamestagg/ralpha-ue5.git" "$REPO_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
git lfs install
|
||||||
|
git lfs pull
|
||||||
|
else
|
||||||
|
echo "ralpha-ue5 already exists at $REPO_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create log directories
|
||||||
|
mkdir -p /var/log/ralpha
|
||||||
|
mkdir -p /var/lib/ralpha
|
||||||
|
chown -R ralpha:ralpha /var/log/ralpha /var/lib/ralpha
|
||||||
|
|
||||||
|
# Set ownership
|
||||||
|
chown -R ralpha:ralpha "$REPO_DIR"
|
||||||
|
|
||||||
|
# Make scripts executable
|
||||||
|
chmod +x "$REPO_DIR/scripts/"*.sh
|
||||||
|
|
||||||
|
# Create symlink for plugin (assumes main ralpha repo is at /opt/ralpha)
|
||||||
|
if [ -d "/opt/ralpha/plugin" ] && [ ! -L "$REPO_DIR/Plugins/RalphaPlugin" ]; then
|
||||||
|
mkdir -p "$REPO_DIR/Plugins"
|
||||||
|
ln -sf /opt/ralpha/plugin "$REPO_DIR/Plugins/RalphaPlugin"
|
||||||
|
echo "Created plugin symlink"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install systemd service
|
||||||
|
cp "$REPO_DIR/scripts/ralpha-ue5.service" /etc/systemd/system/
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable ralpha-ue5
|
||||||
|
|
||||||
|
echo "=== Setup complete ==="
|
||||||
|
echo "To start: systemctl start ralpha-ue5"
|
||||||
|
echo "To check status: systemctl status ralpha-ue5"
|
||||||
|
echo "Logs: /var/log/ralpha/"
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Sync ralpha-ue5 assets on droplet boot
|
||||||
|
# Called by systemd service before launching UE5
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REPO_DIR="${RALPHA_UE5_DIR:-/opt/ralpha-ue5}"
|
||||||
|
CATALOGUE_PATH="$REPO_DIR/RalphaData/catalogue/catalogue.json"
|
||||||
|
HASH_FILE="/var/lib/ralpha/catalogue-hash"
|
||||||
|
LOG_FILE="/var/log/ralpha/sync.log"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
|
mkdir -p "$(dirname "$HASH_FILE")"
|
||||||
|
|
||||||
|
log "Starting ralpha-ue5 sync..."
|
||||||
|
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
|
# Store previous catalogue hash
|
||||||
|
PREV_HASH=""
|
||||||
|
if [ -f "$HASH_FILE" ]; then
|
||||||
|
PREV_HASH=$(cat "$HASH_FILE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fetch and pull latest
|
||||||
|
log "Fetching from origin..."
|
||||||
|
git fetch origin
|
||||||
|
|
||||||
|
# Check if we're behind
|
||||||
|
LOCAL=$(git rev-parse HEAD)
|
||||||
|
REMOTE=$(git rev-parse origin/master 2>/dev/null || git rev-parse origin/main)
|
||||||
|
|
||||||
|
if [ "$LOCAL" != "$REMOTE" ]; then
|
||||||
|
log "Updates available, pulling..."
|
||||||
|
git pull --ff-only
|
||||||
|
|
||||||
|
# Pull LFS objects for new/changed files
|
||||||
|
log "Pulling LFS objects..."
|
||||||
|
git lfs pull
|
||||||
|
|
||||||
|
log "Pull complete."
|
||||||
|
else
|
||||||
|
log "Already up to date."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check catalogue hash
|
||||||
|
if [ -f "$CATALOGUE_PATH" ]; then
|
||||||
|
CURRENT_HASH=$(jq -r '.catalogue_hash // empty' "$CATALOGUE_PATH" 2>/dev/null || echo "unknown")
|
||||||
|
echo "$CURRENT_HASH" > "$HASH_FILE"
|
||||||
|
|
||||||
|
if [ "$PREV_HASH" != "$CURRENT_HASH" ]; then
|
||||||
|
log "Catalogue updated: $PREV_HASH -> $CURRENT_HASH"
|
||||||
|
# Could trigger cache invalidation or notify MCP server here
|
||||||
|
else
|
||||||
|
log "Catalogue unchanged: $CURRENT_HASH"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "Warning: Catalogue not found at $CATALOGUE_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Sync complete."
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Ralpha UE5 Asset Server
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=ralpha
|
||||||
|
Group=ralpha
|
||||||
|
Environment="DISPLAY=:99"
|
||||||
|
Environment="RALPHA_UE5_DIR=/opt/ralpha-ue5"
|
||||||
|
Environment="UE5_DIR=/opt/UnrealEngine"
|
||||||
|
|
||||||
|
# Sync assets before starting
|
||||||
|
ExecStartPre=/opt/ralpha-ue5/scripts/droplet-sync.sh
|
||||||
|
|
||||||
|
# Start virtual framebuffer
|
||||||
|
ExecStartPre=/usr/bin/Xvfb :99 -screen 0 1920x1080x24 &
|
||||||
|
|
||||||
|
# Launch UE5 with ralpha-ue5 project (headless, MCP server enabled)
|
||||||
|
ExecStart=/opt/UnrealEngine/Engine/Binaries/Linux/UnrealEditor \
|
||||||
|
/opt/ralpha-ue5/Ralpha.uproject \
|
||||||
|
-RenderOffscreen \
|
||||||
|
-NoSound \
|
||||||
|
-NullRHI=0 \
|
||||||
|
-Vulkan \
|
||||||
|
-log \
|
||||||
|
-unattended
|
||||||
|
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
StandardOutput=append:/var/log/ralpha/ue5.log
|
||||||
|
StandardError=append:/var/log/ralpha/ue5-error.log
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Loading…
Reference in New Issue