53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import uvicorn
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
from dotenv import load_dotenv
|
|
|
|
def setup_environment():
|
|
"""Ensure dependencies are installed and .env exists."""
|
|
print("🚀 Initializing Storyline AI Gateway...")
|
|
|
|
# 1. Check for .env file
|
|
if not os.path.exists(".env"):
|
|
print("⚠️ Warning: .env file not found!")
|
|
print("Please create a .env file based on the documentation.")
|
|
|
|
# 2. Check for virtual environment and install dependencies if requested
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--install":
|
|
print("📦 Installing dependencies from requirements.txt...")
|
|
try:
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
|
|
print("✅ Dependencies installed successfully.")
|
|
except Exception as e:
|
|
print(f"❌ Error installing dependencies: {e}")
|
|
sys.exit(1)
|
|
|
|
def run_server():
|
|
"""Start the FastAPI server."""
|
|
load_dotenv()
|
|
|
|
# Configuration
|
|
host = os.getenv("HOST", "0.0.0.0")
|
|
port = int(os.getenv("PORT", 8000))
|
|
# On a server, we usually don't want reload=True by default for performance
|
|
# But for a 'test server', it might be useful.
|
|
reload = os.getenv("DEBUG", "false").lower() == "true"
|
|
|
|
print(f"\n🌐 Gateway starting at http://{host}:{port}")
|
|
print(f"🛠️ Admin Dashboard: http://{host}:{port}/admin")
|
|
print(f"📚 API Docs: http://{host}:{port}/docs")
|
|
print(f"🔄 Mode: {'Development (Reload On)' if reload else 'Production (Reload Off)'}\n")
|
|
|
|
uvicorn.run(
|
|
"app.main:app",
|
|
host=host,
|
|
port=port,
|
|
reload=reload,
|
|
workers=1 if reload else 4 # Multi-worker for production
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
setup_environment()
|
|
run_server()
|