#!/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