mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-10 01:27:11 +00:00
105 lines
3.8 KiB
Bash
105 lines
3.8 KiB
Bash
#!/bin/sh
|
|
# Docker Entrypoint for BetterDesk Console (Node.js)
|
|
# ---------------------------------------------------
|
|
# The Node.js application handles all database initialization,
|
|
# migration, and admin user creation automatically on startup.
|
|
# This script only provides logging and environment validation.
|
|
set -e
|
|
|
|
echo "========================================"
|
|
echo " BetterDesk Console - Container Startup"
|
|
echo " Version: 2.4.0 (Node.js)"
|
|
echo "========================================"
|
|
|
|
# Log configuration
|
|
echo ""
|
|
echo "Configuration:"
|
|
echo " NODE_ENV: ${NODE_ENV:-production}"
|
|
echo " PORT: ${PORT:-5000}"
|
|
echo " SERVER_BACKEND: ${SERVER_BACKEND:-betterdesk}"
|
|
echo " DB_TYPE: ${DB_TYPE:-sqlite}"
|
|
echo " RUSTDESK_PATH: ${RUSTDESK_PATH:-/opt/rustdesk}"
|
|
echo " DATA_DIR: ${DATA_DIR:-/app/data}"
|
|
echo ""
|
|
|
|
# Ensure data directories exist
|
|
mkdir -p "${DATA_DIR:-/app/data}" 2>/dev/null || true
|
|
|
|
# Verify SQLite database path is writable (catches :ro volume mounts early)
|
|
DB_FILE="${DB_PATH:-/opt/rustdesk/db_v2.sqlite3}"
|
|
DB_DIR="$(dirname "$DB_FILE")"
|
|
if [ "${DB_TYPE:-sqlite}" = "sqlite" ]; then
|
|
if [ -f "$DB_FILE" ] && [ ! -w "$DB_FILE" ]; then
|
|
echo ""
|
|
echo "ERROR: Database file $DB_FILE is not writable!"
|
|
echo " This usually means the volume is mounted read-only (:ro)."
|
|
echo " Fix: In docker-compose.yml, change the console volume mount from:"
|
|
echo " rustdesk-data:/opt/rustdesk:ro"
|
|
echo " to:"
|
|
echo " rustdesk-data:/opt/rustdesk"
|
|
echo ""
|
|
echo " Then run: docker compose down && docker compose up -d"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
if [ ! -w "$DB_DIR" ]; then
|
|
echo ""
|
|
echo "WARNING: Database directory $DB_DIR is not writable."
|
|
echo " SQLite needs write access for WAL journal files (.db-wal, .db-shm)."
|
|
echo " Check volume mount permissions in docker-compose.yml."
|
|
echo ""
|
|
fi
|
|
fi
|
|
|
|
# Wait for BetterDesk server (hbbs) to be available if using betterdesk backend
|
|
if [ "${SERVER_BACKEND}" = "betterdesk" ] && [ -n "${HBBS_API_URL}" ]; then
|
|
echo "Waiting for BetterDesk server..."
|
|
RETRIES=0
|
|
MAX_RETRIES=30
|
|
while [ "$RETRIES" -lt "$MAX_RETRIES" ]; do
|
|
if curl -sf "${HBBS_API_URL}/health" >/dev/null 2>&1 || \
|
|
curl -sf "${BETTERDESK_API_URL:-${HBBS_API_URL}}" >/dev/null 2>&1; then
|
|
echo " BetterDesk server is ready"
|
|
break
|
|
fi
|
|
RETRIES=$((RETRIES + 1))
|
|
echo " Waiting for server... ($RETRIES/$MAX_RETRIES)"
|
|
sleep 2
|
|
done
|
|
if [ "$RETRIES" -ge "$MAX_RETRIES" ]; then
|
|
echo " WARNING: BetterDesk server not reachable after ${MAX_RETRIES} attempts"
|
|
echo " Starting console anyway (some features may be unavailable)..."
|
|
fi
|
|
fi
|
|
|
|
# Wait for PostgreSQL if configured
|
|
if [ "${DB_TYPE}" = "postgresql" ] && [ -n "${DATABASE_URL}" ]; then
|
|
echo "Waiting for PostgreSQL..."
|
|
RETRIES=0
|
|
MAX_RETRIES=30
|
|
# Extract host:port from DATABASE_URL (postgres://user:pass@host:port/db)
|
|
PG_HOST=$(echo "$DATABASE_URL" | sed -n 's|.*@\([^:/]*\).*|\1|p')
|
|
PG_PORT=$(echo "$DATABASE_URL" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
|
|
PG_PORT=${PG_PORT:-5432}
|
|
while [ "$RETRIES" -lt "$MAX_RETRIES" ]; do
|
|
if nc -z "$PG_HOST" "$PG_PORT" 2>/dev/null; then
|
|
echo " PostgreSQL is ready ($PG_HOST:$PG_PORT)"
|
|
break
|
|
fi
|
|
RETRIES=$((RETRIES + 1))
|
|
echo " Waiting for PostgreSQL... ($RETRIES/$MAX_RETRIES)"
|
|
sleep 2
|
|
done
|
|
if [ "$RETRIES" -ge "$MAX_RETRIES" ]; then
|
|
echo " WARNING: PostgreSQL not reachable after ${MAX_RETRIES} attempts"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "Starting BetterDesk Console..."
|
|
echo " Web Interface: http://localhost:${PORT:-5000}"
|
|
echo " Client API: port ${API_PORT:-21121}"
|
|
echo ""
|
|
|
|
# Start Node.js application
|
|
exec node server.js |