| #!/bin/bash |
| set -e |
|
|
| echo "=============================================" |
| echo " Fragmenta — Docker Edition" |
| echo "=============================================" |
|
|
| |
| HOST="${FLASK_HOST:-0.0.0.0}" |
| PORT="${FLASK_PORT:-5001}" |
|
|
| echo "Host: ${HOST}" |
| echo "Port: ${PORT}" |
| echo "=============================================" |
|
|
| cd /app |
|
|
| |
| mkdir -p /app/models/pretrained /app/models/fine_tuned /app/models/config \ |
| /app/data /app/output /app/logs /app/config 2>/dev/null || true |
|
|
| |
| echo "[startup] Python: $(python --version 2>&1)" |
| echo "[startup] Working dir: $(pwd)" |
| echo "[startup] User: $(whoami) (uid=$(id -u))" |
|
|
| |
| echo "[startup] Checking core Python imports…" |
| python -c " |
| import flask, flask_cors, torch, torchaudio, soundfile |
| print(f' Flask {flask.__version__} | torch {torch.__version__}') |
| print(f' CUDA build: {torch.version.cuda or \"none\"}') |
| print(' GPU detection deferred to first request (faster startup)') |
| " || { |
| echo "ERROR: Core Python imports failed. Check requirements." |
| exit 1 |
| } |
|
|
| |
| |
| |
| if [ -d /opt/fragmenta-defaults/models/config ]; then |
| for f in /opt/fragmenta-defaults/models/config/*; do |
| fname=$(basename "$f") |
| if [ ! -f "/app/models/config/${fname}" ]; then |
| echo "[startup] Restoring default config: ${fname}" |
| cp "$f" "/app/models/config/${fname}" 2>/dev/null || true |
| fi |
| done |
| fi |
|
|
| echo "[startup] Starting Fragmenta on ${HOST}:${PORT}" |
| echo "Open http://localhost:${PORT} in your browser" |
| echo "=============================================" |
|
|
| |
| exec python -c " |
| import os, sys |
| sys.path.insert(0, '/app') |
| os.environ['FLASK_HOST'] = '${HOST}' |
| os.environ['FLASK_PORT'] = '${PORT}' |
| |
| from app.backend.app import app, QuietWSGIRequestHandler |
| |
| print('[server] Flask app imported — starting…', flush=True) |
| |
| app.run( |
| host='${HOST}', |
| port=int('${PORT}'), |
| debug=False, |
| use_reloader=False, |
| request_handler=QuietWSGIRequestHandler, |
| threaded=True |
| ) |
| " |
|
|