Files
floppy-cloudron/start.sh
T
2026-09-07 12:26:43 +02:00

151 lines
4.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
mkdir -p \
/app/data/logs \
/app/data/backups \
/run/floppy/nginx/client_body \
/run/floppy/nginx/proxy \
/run/floppy/nginx/fastcgi \
/run/floppy/nginx/uwsgi \
/run/floppy/nginx/scgi
if [ ! -f /app/data/secret ]; then
python - <<'PY' > /app/data/secret
import secrets
print(secrets.token_urlsafe(64))
PY
chmod 600 /app/data/secret
fi
if [ ! -f /app/data/env.sh ]; then
cat > /app/data/env.sh <<'ENVEOF'
# Floppy settings managed by you.
# Edit this file in Cloudron's File Manager and restart the app.
REGISTRATION=True
ADMIN_ENABLED=False
DEMO_ACCOUNT_ENABLED=False
TMDB_API=
TZ=Europe/Berlin
# Optional examples:
# TRAKT_API=
# TRAKT_API_SECRET=
# TVDB_API_KEY=
# TVDB_PIN=
# MAL_API=
# IGDB_ID=
# IGDB_SECRET=
# STEAM_API_KEY=
# BGG_API_TOKEN=
# HARDCOVER_API=
# COMICVINE_API=
# LASTFM_API_KEY=
ENVEOF
fi
# Export all variables defined in env.sh so Django, Celery and Supervisor
# receive them as real environment variables.
set -a
# shellcheck disable=SC1091
. /app/data/env.sh
set +a
# ----------------------------------------------------------------------
# Cloudron managed services
# ----------------------------------------------------------------------
export SECRET="$(cat /app/data/secret)"
export DB_HOST="$CLOUDRON_POSTGRESQL_HOST"
export DB_PORT="$CLOUDRON_POSTGRESQL_PORT"
export DB_NAME="$CLOUDRON_POSTGRESQL_DATABASE"
export DB_USER="$CLOUDRON_POSTGRESQL_USERNAME"
export DB_PASSWORD="$CLOUDRON_POSTGRESQL_PASSWORD"
export REDIS_URL="$CLOUDRON_REDIS_URL"
export REDIS_CACHE_URL="$CLOUDRON_REDIS_URL"
export CELERY_BROKER_URL="$CLOUDRON_REDIS_URL"
export CELERY_RESULT_BACKEND="$CLOUDRON_REDIS_URL"
# Cloudron owns the Redis instance. Floppy must not try to manage
# Redis memory limits globally.
export REDIS_ADMIN_URL="$CLOUDRON_REDIS_URL"
export FLOPPY_REDIS_MAXMEMORY=0
# ----------------------------------------------------------------------
# Cloudron reverse proxy
# ----------------------------------------------------------------------
export URLS="$CLOUDRON_APP_ORIGIN"
export ALLOWED_HOSTS="$CLOUDRON_APP_DOMAIN"
export USE_X_FORWARDED=True
export USE_X_FORWARDED_PROTO=True
# ----------------------------------------------------------------------
# Floppy defaults
#
# Values from /app/data/env.sh take precedence.
# ----------------------------------------------------------------------
export DEBUG="${DEBUG:-False}"
export DEMO_ACCOUNT_ENABLED="${DEMO_ACCOUNT_ENABLED:-False}"
export ADMIN_ENABLED="${ADMIN_ENABLED:-False}"
export REGISTRATION="${REGISTRATION:-True}"
export TMDB_API="${TMDB_API:-}"
export TZ="${TZ:-Europe/Berlin}"
export LOG_DIR=/app/data/logs
export BACKUP_DIR=/app/data/backups
export FLOPPY_DATA_DIR=/app/data
# ----------------------------------------------------------------------
# Permissions
# ----------------------------------------------------------------------
chown -R abc:abc /app/data /run/floppy
cd /floppy
# ----------------------------------------------------------------------
# Database
# ----------------------------------------------------------------------
echo "[cloudron] Applying Floppy database migrations"
DB_POOL_ENABLED=false \
PGOPTIONS="-c lock_timeout=120s" \
python manage.py migrate --noinput
# ----------------------------------------------------------------------
# Runtime sizing
#
# Match Floppy's own resource sizing logic without invoking its
# Docker-specific entrypoint.
# ----------------------------------------------------------------------
if resource_env=$(python -c 'from config.runtime_profile import emit_env; emit_env()' 2>/dev/null); then
eval "$resource_env"
fi
export FLOPPY_RESOURCE_TIER="${FLOPPY_RESOURCE_TIER:-minimal}"
export FLOPPY_CELERY_QUEUES="${FLOPPY_CELERY_QUEUES:-celery,interactive,discover}"
export FLOPPY_CELERY_ROLE="${FLOPPY_CELERY_ROLE:-background}"
export FLOPPY_START_INTERACTIVE_WORKER="${FLOPPY_START_INTERACTIVE_WORKER:-false}"
export FLOPPY_START_DISCOVER_WORKER="${FLOPPY_START_DISCOVER_WORKER:-false}"
# ----------------------------------------------------------------------
# Start
# ----------------------------------------------------------------------
echo "[cloudron] Starting Floppy on ${CLOUDRON_APP_ORIGIN}"
echo "[cloudron] Registration enabled: ${REGISTRATION}"
echo "[cloudron] Admin enabled: ${ADMIN_ENABLED}"
echo "[cloudron] Timezone: ${TZ}"
exec supervisord -c /app/code/supervisord-cloudron.conf