60 lines
2.7 KiB
Bash
60 lines
2.7 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
# Security check: Refuse to run as root
|
|
if [ "$(id -u)" = "0" ]; then
|
|
echo ""
|
|
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
echo "║ FATAL: CANNOT START AS ROOT ║"
|
|
echo "║ ║"
|
|
echo "║ Running as root is a security risk. This container must ║"
|
|
echo "║ run as a non-privileged user. ║"
|
|
echo "║ ║"
|
|
echo "║ Do NOT use: ║"
|
|
echo "║ - docker run --user root ║"
|
|
echo "║ - user: root in docker-compose.yml ║"
|
|
echo "║ ║"
|
|
echo "║ The container is configured to run as 'node' user. ║"
|
|
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
echo "[START] Starting Lidify Backend..."
|
|
|
|
# Docker Compose health checks ensure database and Redis are ready
|
|
# Add a small delay to be extra safe
|
|
echo "[WAIT] Waiting for services to be ready..."
|
|
sleep 3
|
|
echo "Services are ready"
|
|
|
|
# Run database migrations
|
|
echo "[DB] Running database migrations..."
|
|
npx prisma migrate deploy
|
|
|
|
# Generate Prisma client (in case of schema changes)
|
|
echo "[DB] Generating Prisma client..."
|
|
npx prisma generate
|
|
|
|
# Generate session secret if not provided
|
|
if [ -z "$SESSION_SECRET" ] || [ "$SESSION_SECRET" = "changeme-generate-secure-key" ]; then
|
|
echo "[WARN] SESSION_SECRET not set or using default. Generating random key..."
|
|
export SESSION_SECRET=$(node -e "console.log(require('crypto').randomBytes(32).toString('base64'))")
|
|
echo "Generated SESSION_SECRET (will not persist across restarts - set it in .env for production)"
|
|
fi
|
|
|
|
# Ensure encryption key is stable between restarts
|
|
if [ -z "$SETTINGS_ENCRYPTION_KEY" ]; then
|
|
echo "[WARN] SETTINGS_ENCRYPTION_KEY not set."
|
|
echo " Falling back to the default development key so encrypted data remains readable."
|
|
echo " Set SETTINGS_ENCRYPTION_KEY in your environment to a 32-character value for production."
|
|
export SETTINGS_ENCRYPTION_KEY="default-encryption-key-change-me"
|
|
fi
|
|
|
|
echo "[START] Lidify Backend starting on port ${PORT:-3006}..."
|
|
echo "[CONFIG] Music path: ${MUSIC_PATH:-/music}"
|
|
echo "[CONFIG] Environment: ${NODE_ENV:-production}"
|
|
|
|
# Execute the main command
|
|
exec "$@"
|