mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
The console pages connect to /novncd/ on the address, scheme and port the page itself was loaded from; nginx proxies it to novncd, which listens on the loopback only. There is nothing to configure: the console works on HTTPS (wss), behind another proxy and on any published port. Before, the page connected to WS_PUBLIC_HOST/PORT/PATH, port 6080 by default: straight to novncd, past nginx and without TLS, so an HTTPS panel and a Docker container published on another port had no console until the public port was set by hand, and novncd listened on every interface. Gone: WS_PUBLIC_PORT, WS_PUBLIC_HOST, WS_PUBLIC_PATH and WS_CERT, the installer's two public console questions and its 6080 firewall rule, the Docker image's WS_PUBLIC_PORT and its init script lines, the manual install's firewall rule for 6080 and nginx's unused /websockify location. WS_HOST defaults to 127.0.0.1. A VM with a QEMU websocket port is still reached on that port of the panel's host name (left for a separate decision).
44 lines
1.8 KiB
Bash
Executable file
44 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
APP_DIR="/srv/webvirtcloud"
|
|
DATA_DIR="$APP_DIR/data"
|
|
mkdir -p "$DATA_DIR" "/var/www/.ssh"
|
|
|
|
# If settings.py doesn't exist, generate from template
|
|
if [ ! -f "$APP_DIR/webvirtcloud/settings.py" ]; then
|
|
echo "* Generating webvirtcloud/settings.py from template..."
|
|
cp "$APP_DIR/webvirtcloud/settings.py.template" "$APP_DIR/webvirtcloud/settings.py"
|
|
fi
|
|
|
|
# Ensure SECRET_KEY is persisted across container restarts if not supplied via environment
|
|
if [ -z "$SECRET_KEY" ]; then
|
|
if [ ! -s "$DATA_DIR/secret_key" ]; then
|
|
echo "* Generating fresh random SECRET_KEY..."
|
|
"$APP_DIR/venv/bin/python3" -c 'import secrets; print(secrets.token_urlsafe(50))' > "$DATA_DIR/secret_key"
|
|
chmod 600 "$DATA_DIR/secret_key"
|
|
fi
|
|
fi
|
|
|
|
# Persist SQLite database in DATA_DIR
|
|
if [ ! -f "$DATA_DIR/db.sqlite3" ] && [ -f "$APP_DIR/db.sqlite3" ] && [ ! -L "$APP_DIR/db.sqlite3" ]; then
|
|
mv "$APP_DIR/db.sqlite3" "$DATA_DIR/db.sqlite3"
|
|
fi
|
|
touch "$DATA_DIR/db.sqlite3"
|
|
ln -sf "$DATA_DIR/db.sqlite3" "$APP_DIR/db.sqlite3"
|
|
|
|
# Run database migrations
|
|
echo "* Running database migrations..."
|
|
"$APP_DIR/venv/bin/python3" "$APP_DIR/manage.py" migrate --noinput
|
|
|
|
# Set proper permissions on runtime and data directories
|
|
chown -R www-data:www-data "$DATA_DIR" "/var/www/.ssh"
|
|
chown www-data:www-data "$APP_DIR/webvirtcloud/settings.py" 2>/dev/null || true
|
|
chmod 700 "/var/www/.ssh" 2>/dev/null || true
|
|
# The database holds compute passwords and password hashes; keep it, the
|
|
# secret key and settings private to the app user (as the installer does)
|
|
chmod 700 "$DATA_DIR"
|
|
chmod 600 "$DATA_DIR/db.sqlite3" "$APP_DIR/webvirtcloud/settings.py"
|
|
for f in "$DATA_DIR/db.sqlite3-wal" "$DATA_DIR/db.sqlite3-shm"; do
|
|
if [ -e "$f" ]; then chown www-data:www-data "$f"; chmod 600 "$f"; fi
|
|
done
|