File size: 3,155 Bytes
021894c 5b0c352 b772e78 5b0c352 b772e78 5b0c352 b772e78 021894c 9c993dc 021894c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#!/usr/bin/env bash
set -Eeuo pipefail
: "${VNC_PORT:="5900"}" # VNC port
: "${MON_PORT:="7100"}" # Monitor port
: "${WEB_PORT:="8006"}" # Webserver port
: "${WSD_PORT:="8004"}" # Websockets port
: "${WSS_PORT:="5700"}" # Websockets port
if (( VNC_PORT < 5900 )); then
warn "VNC port cannot be set lower than 5900, ignoring value $VNC_PORT."
VNC_PORT="5900"
fi
cp -r /var/www/* /run/shm
rm -f /var/run/websocketd.pid
html "Starting $APP for $ENGINE..."
if [[ "${WEB:-}" != [Nn]* ]]; then
mkdir -p /etc/nginx/sites-enabled
cp /etc/nginx/default.conf /etc/nginx/sites-enabled/web.conf
user="admin"
[ -n "${USER:-}" ] && user="${USER:-}"
if [ -n "${PASS:-}" ]; then
# Set password
echo "$user:{PLAIN}${PASS:-}" > /etc/nginx/.htpasswd
sed -i "s/auth_basic off/auth_basic \"NoVNC\"/g" /etc/nginx/sites-enabled/web.conf
fi
sed -i "s/listen 8006 default_server;/listen $WEB_PORT default_server;/g" /etc/nginx/sites-enabled/web.conf
sed -i "s/proxy_pass http:\/\/127.0.0.1:5700\/;/proxy_pass http:\/\/127.0.0.1:$WSS_PORT\/;/g" /etc/nginx/sites-enabled/web.conf
sed -i "s/proxy_pass http:\/\/127.0.0.1:8004\/;/proxy_pass http:\/\/127.0.0.1:$WSD_PORT\/;/g" /etc/nginx/sites-enabled/web.conf
# shellcheck disable=SC2143
if [ -f /proc/net/if_inet6 ] && [ -n "$(ifconfig -a | grep inet6)" ]; then
sed -i "s/listen $WEB_PORT default_server;/listen [::]:$WEB_PORT default_server ipv6only=off;/g" /etc/nginx/sites-enabled/web.conf
fi
# Start webserver
# Prefer using pid directive from /etc/nginx/nginx.conf if present to avoid
# duplicate-pid errors when passing -g. Otherwise fall back to passing -g.
mkdir -p /run /run/shm
CONF_PID=$(sed -n 's/^[[:space:]]*pid[[:space:]]\+\([^;]*\);.*/\1/p' /etc/nginx/nginx.conf 2>/dev/null | tr -d '"' | head -n1 || true)
if [ -n "$CONF_PID" ]; then
PID_FILE="$CONF_PID"
mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
touch "$PID_FILE" 2>/dev/null || true
if [ -w "$PID_FILE" ] 2>/dev/null; then
info "Starting nginx (using pid from config): $PID_FILE"
nginx -e stderr
else
# If we can't write the config-specified pid, try to create a fallback
PID_FILE="/run/shm/nginx.pid"
mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
touch "$PID_FILE" 2>/dev/null || true
info "Config pid $CONF_PID not writable, starting nginx with fallback pid: $PID_FILE"
nginx -g "pid $PID_FILE;" -e stderr
fi
else
# No pid directive in config: use runtime-chosen pid file
PID_FILE="/run/nginx.pid"
if ! touch "$PID_FILE" 2>/dev/null || [ ! -w "$PID_FILE" ] 2>/dev/null; then
PID_FILE="/run/shm/nginx.pid"
mkdir -p "$(dirname "$PID_FILE")" 2>/dev/null || true
touch "$PID_FILE" 2>/dev/null || true
fi
info "Starting nginx with pid file: $PID_FILE"
nginx -g "pid $PID_FILE;" -e stderr
fi
# Start websocket server — write logs to /run/shm (writable in non-root mode)
mkdir -p /run/shm
websocketd --address 127.0.0.1 --port="$WSD_PORT" /run/socket.sh >/run/shm/websocketd.log 2>&1 &
echo "$!" > /run/websocketd.pid
fi
return 0
|