Spaces:
Build error
Build error
| # ============================================================ | |
| # BankBot AI β Hugging Face Spaces startup script | |
| # Runs: DB init β optional seed β supervisord (nginx + fastapi + nextjs) | |
| # ============================================================ | |
| set -e | |
| echo "============================================" | |
| echo " BankBot AI β Starting on Hugging Face" | |
| echo "============================================" | |
| # ββ Environment defaults ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| export PYTHONPATH="/app/backend" | |
| export PYTHONUNBUFFERED=1 | |
| # SQLite path inside the container (ephemeral but fine for HF demo) | |
| export SQLITE_PATH="${SQLITE_PATH:-/app/data/bankbot.db}" | |
| # If no DATABASE_URL set, force SQLite | |
| if [ -z "$DATABASE_URL" ]; then | |
| echo "[INFO] No DATABASE_URL set β using SQLite at $SQLITE_PATH" | |
| export USE_SQLITE=true | |
| export DATABASE_URL="sqlite:///$SQLITE_PATH" | |
| fi | |
| # If no Redis, the app auto-falls back to in-memory cache | |
| if [ -z "$REDIS_URL" ]; then | |
| echo "[INFO] No REDIS_URL set β using in-memory cache" | |
| fi | |
| # JWT secret fallback (not secure for production, but keeps HF demo working) | |
| if [ -z "$JWT_SECRET_KEY" ]; then | |
| export JWT_SECRET_KEY="hf-demo-secret-$(date +%s)" | |
| echo "[WARN] JWT_SECRET_KEY not set β using ephemeral secret (set in HF Secrets for persistence)" | |
| fi | |
| # CORS: allow HF Space domain + localhost | |
| export BACKEND_CORS_ORIGINS='["http://localhost:7860","http://localhost:3000","https://*.hf.space","*"]' | |
| # ββ Initialize database βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| echo "[1/3] Initializing database..." | |
| cd /app/backend | |
| python -c " | |
| from app.database.database import engine, Base | |
| import app.database.models | |
| Base.metadata.create_all(bind=engine) | |
| print(' Database tables ready') | |
| " | |
| # ββ Seed demo data (only if DB is empty) βββββββββββββββββββββββββββββββββββββ | |
| echo "[2/3] Checking demo data..." | |
| python -c " | |
| import os, sys | |
| sys.path.insert(0, '/app/backend') | |
| from app.database.database import SessionLocal | |
| from app.database.models import User | |
| db = SessionLocal() | |
| count = db.query(User).count() | |
| db.close() | |
| if count == 0: | |
| print(' Seeding demo account...') | |
| # Import and run seed | |
| import subprocess | |
| result = subprocess.run( | |
| ['python', 'app/scripts/seed_demo.py'], | |
| cwd='/app/backend', | |
| capture_output=True, text=True | |
| ) | |
| print(result.stdout[-500:] if result.stdout else '') | |
| if result.returncode != 0: | |
| print(f' Seed warning: {result.stderr[-200:]}') | |
| else: | |
| print(' Demo account ready: alex@bankbot.dev / BankBot2026!') | |
| else: | |
| print(f' Database has {count} users β skipping seed') | |
| " | |
| # ββ Start all services via supervisord βββββββββββββββββββββββββββββββββββββββ | |
| echo "[3/3] Starting services (Nginx + FastAPI + Next.js)..." | |
| echo " Frontend: http://localhost:3000" | |
| echo " Backend: http://localhost:8000" | |
| echo " Public: http://localhost:7860" | |
| echo "============================================" | |
| exec /usr/bin/supervisord -c /etc/supervisor/conf.d/bankbot.conf | |