foxy-dev-team/backend/start-container.sh

100 lines
4.8 KiB
Bash

#!/bin/bash
set -e
echo "🦊 Starting Foxy Dev Team API Container..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# ─── Environment ──────────────────────────────────────────────────────────────
export HOME="/home/foxy"
export FOXY_HOME="/home/foxy/.openclaw"
export OPENCLAW_TYPE="${OPENCLAW_TYPE:-standalone}"
echo "📌 OPENCLAW_TYPE = $OPENCLAW_TYPE"
echo "📌 FOXY_HOME = $FOXY_HOME"
# ─── Ensure directories ──────────────────────────────────────────────────────
mkdir -p "$FOXY_HOME/logs" "$FOXY_HOME/workspace" "$FOXY_HOME/agents"
# ─── Config patching ─────────────────────────────────────────────────────────
# Fix host paths (/home/openclaw → /home/foxy) in all config & agent files
echo "🔧 Patching host paths for container environment..."
find "$FOXY_HOME" -type f \( -name "*.json" -o -name "*.yaml" -o -name "*.yml" \) \
-not -path "*/logs/*" \
-not -path "*/node_modules/*" \
-exec sed -i 's/\/home\/openclaw/\/home\/foxy/g' {} + 2>/dev/null || true
echo "✅ Path patching complete."
# ─── Ensure gateway.bind is set to 0.0.0.0 in config ─────────────────────────
# OpenClaw uses openclaw.json as its config file
OCCONFIG="$FOXY_HOME/openclaw.json"
if [ -f "$OCCONFIG" ]; then
echo "🔧 Ensuring gateway binds to 0.0.0.0 in $OCCONFIG..."
# Replace any 127.0.0.1 binding with 0.0.0.0 so Docker can expose the port
sed -i 's/"bind"[[:space:]]*:[[:space:]]*"loopback"/"bind": "all"/g' "$OCCONFIG"
sed -i 's/"bind"[[:space:]]*:[[:space:]]*"127.0.0.1"/"bind": "0.0.0.0"/g' "$OCCONFIG"
# Also handle the gateway.host key if present
sed -i 's/"host"[[:space:]]*:[[:space:]]*"127.0.0.1"/"host": "0.0.0.0"/g' "$OCCONFIG"
fi
# ─── Default config if none exists ────────────────────────────────────────────
if [ ! -f "$OCCONFIG" ]; then
echo "📦 No openclaw.json found. Creating default configuration..."
cat <<'DEFAULTEOF' > "$OCCONFIG"
{
"gateway": {
"port": 18789,
"bind": "all"
},
"agents": {
"directory": "/home/foxy/.openclaw/agents"
},
"workspace": "/home/foxy/.openclaw/workspace"
}
DEFAULTEOF
echo "✅ Default openclaw.json created."
fi
# ─── Gateway startup ─────────────────────────────────────────────────────────
if [ "$OPENCLAW_TYPE" = "standalone" ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Starting OpenClaw Gateway (standalone)..."
# Kill any leftover process
pkill -f "openclaw" 2>/dev/null || true
sleep 1
# Start gateway — NO --host flag (doesn't exist).
# Binding is controlled via openclaw.json gateway.bind setting.
nohup openclaw gateway start > "$FOXY_HOME/logs/gateway.log" 2>&1 &
GATEWAY_PID=$!
echo "⏱ Waiting for Gateway (PID $GATEWAY_PID) to initialize..."
sleep 5
# Check if process is alive
if kill -0 $GATEWAY_PID 2>/dev/null; then
echo "✅ OpenClaw Gateway is running (PID $GATEWAY_PID)."
# Check port
if netstat -tulpn 2>/dev/null | grep -q 18789; then
echo "✅ Port 18789 is listening."
else
echo "⚠️ Gateway running but port 18789 not yet open. It may need more time."
echo " Check logs: cat $FOXY_HOME/logs/gateway.log"
fi
else
echo "❌ OpenClaw Gateway failed to start!"
echo "──── Gateway Log ────"
cat "$FOXY_HOME/logs/gateway.log" 2>/dev/null || echo "(no log)"
echo "─────────────────────"
echo "⚠️ Continuing without Gateway. API will still start."
fi
else
echo "🔗 OPENCLAW_TYPE is shared — expecting host-managed Gateway."
fi
# ─── Start API ────────────────────────────────────────────────────────────────
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Starting Uvicorn API Server on port 7000..."
exec python -m uvicorn app.main:app --host 0.0.0.0 --port 7000