|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
echo "==========================================" |
|
|
echo "Starting X11 Desktop Environment" |
|
|
echo "==========================================" |
|
|
|
|
|
|
|
|
cleanup() { |
|
|
echo "Cleaning up..." |
|
|
pkill -u vncuser Xtigervnc || true |
|
|
pkill -u vncuser websockify || true |
|
|
pkill -u vncuser python3 || true |
|
|
} |
|
|
trap cleanup EXIT INT TERM |
|
|
|
|
|
|
|
|
export RESOLUTION=${RESOLUTION:-1920x1080} |
|
|
export DEPTH=${DEPTH:-24} |
|
|
|
|
|
|
|
|
echo "Starting VNC server on display ${DISPLAY}..." |
|
|
su - vncuser -c "vncserver ${DISPLAY} -geometry ${RESOLUTION} -depth ${DEPTH} -localhost no -SecurityTypes None" || { |
|
|
echo "VNC server failed to start, trying to clean existing sessions..." |
|
|
su - vncuser -c "vncserver -kill ${DISPLAY}" || true |
|
|
sleep 2 |
|
|
su - vncuser -c "vncserver ${DISPLAY} -geometry ${RESOLUTION} -depth ${DEPTH} -localhost no -SecurityTypes None" |
|
|
} |
|
|
|
|
|
|
|
|
echo "Waiting for VNC server to be ready..." |
|
|
sleep 3 |
|
|
|
|
|
|
|
|
echo "Starting noVNC WSS on port ${NO_VNC_PORT}..." |
|
|
websockify --web=/usr/share/novnc --cert=/etc/ssl/certs/selfsigned.crt --key=/etc/ssl/private/selfsigned.key ${NO_VNC_PORT} localhost:${VNC_PORT} & |
|
|
NOVNC_PID=$! |
|
|
|
|
|
|
|
|
sleep 2 |
|
|
|
|
|
|
|
|
echo "Starting Agent API on port 8000..." |
|
|
cd /app |
|
|
python3 -m uvicorn agent.api:app --host 0.0.0.0 --port 8000 & |
|
|
API_PID=$! |
|
|
|
|
|
|
|
|
sleep 2 |
|
|
|
|
|
|
|
|
echo "Starting Gradio interface on port 7860..." |
|
|
python3 app.py & |
|
|
GRADIO_PID=$! |
|
|
|
|
|
echo "==========================================" |
|
|
echo "Services started successfully!" |
|
|
echo "==========================================" |
|
|
echo "noVNC URL: http://localhost:${NO_VNC_PORT}/vnc.html" |
|
|
echo "Gradio UI: http://localhost:7860" |
|
|
echo "Agent API: http://localhost:8000/docs" |
|
|
echo "==========================================" |
|
|
|
|
|
|
|
|
while true; do |
|
|
|
|
|
if ! kill -0 $NOVNC_PID 2>/dev/null; then |
|
|
echo "noVNC died, restarting..." |
|
|
websockify --web=/usr/share/novnc ${NO_VNC_PORT} localhost:${VNC_PORT} & |
|
|
NOVNC_PID=$! |
|
|
fi |
|
|
|
|
|
if ! kill -0 $API_PID 2>/dev/null; then |
|
|
echo "Agent API died, restarting..." |
|
|
python3 -m uvicorn agent.api:app --host 0.0.0.0 --port 8000 & |
|
|
API_PID=$! |
|
|
fi |
|
|
|
|
|
if ! kill -0 $GRADIO_PID 2>/dev/null; then |
|
|
echo "Gradio died, restarting..." |
|
|
python3 app.py & |
|
|
GRADIO_PID=$! |
|
|
fi |
|
|
|
|
|
sleep 10 |
|
|
done |
|
|
|