Spaces:
Build error
Build error
File size: 3,427 Bytes
a282d4b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #!/bin/bash
# ============================================================
# 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
|