diff --git a/deploy.sh b/deploy.sh index 5cb5f37..8147261 100644 --- a/deploy.sh +++ b/deploy.sh @@ -7,8 +7,8 @@ set -e echo "🚀 Starting TestArena Deployment..." -# 1. Install Dependencies -echo "📦 Installing dependencies..." +# 1. Install System Dependencies +echo "📦 Installing system dependencies..." apt-get update apt-get install -y nginx python3-pip python3-venv @@ -16,13 +16,18 @@ apt-get install -y nginx python3-pip python3-venv echo "🐍 Setting up Python environment..." python3 -m venv venv source venv/bin/activate -pip install fastapi uvicorn sqlalchemy +pip install --upgrade pip +pip install fastapi uvicorn sqlalchemy pydantic # 3. Configure Nginx echo "🌐 Configuring Nginx..." -cp nginx/testarena.conf /etc/nginx/sites-available/testarena -ln -sf /etc/nginx/sites-available/testarena /etc/nginx/sites-enabled/ -rm -f /etc/nginx/sites-enabled/default +if [ -d "nginx" ] && [ -f "nginx/testarena.conf" ]; then + cp nginx/testarena.conf /etc/nginx/sites-available/testarena + ln -sf /etc/nginx/sites-available/testarena /etc/nginx/sites-enabled/ + rm -f /etc/nginx/sites-enabled/default +else + echo "⚠️ Nginx configuration not found, skipping..." +fi # 4. Create Data Directory echo "📁 Creating data directory..." @@ -30,15 +35,25 @@ mkdir -p /home/asf/testarena chown -R asf:asf /home/asf/testarena chmod -R 755 /home/asf/testarena -# 5. Restart Nginx -echo "🔄 Restarting Nginx..." -nginx -t -systemctl restart nginx +# 5. Set up Systemd Services +echo "⚙️ Setting up Systemd services..." +cp testarena-app.service /etc/systemd/system/ +cp testarena-worker.service /etc/systemd/system/ +systemctl daemon-reload +systemctl enable testarena-app +systemctl enable testarena-worker + +# 6. Restart Services +echo "🔄 Restarting services..." +nginx -t && systemctl restart nginx +systemctl restart testarena-app +systemctl restart testarena-worker echo "✅ Deployment complete!" echo "--------------------------------------------------" echo "Dashboard: http://asf-server.duckdns.org:8080/" echo "Results: http://asf-server.duckdns.org:8080/results/" echo "--------------------------------------------------" -echo "To start the app: source venv/bin/activate && uvicorn testarena_app.main:app --host 0.0.0.0 --port 8000" -echo "To start the worker: source venv/bin/activate && python3 -m testarena_app.worker" +echo "Services status:" +systemctl status testarena-app --no-pager || true +systemctl status testarena-worker --no-pager || true diff --git a/testarena-app.service b/testarena-app.service new file mode 100644 index 0000000..6b64b1b --- /dev/null +++ b/testarena-app.service @@ -0,0 +1,15 @@ +[Unit] +Description=TestArena FastAPI Application +After=network.target + +[Service] +User=asf +Group=asf +WorkingDirectory=/home/asf/testarena_backend +Environment="PATH=/home/asf/testarena_backend/venv/bin" +Environment="DATABASE_URL=sqlite:////home/asf/testarena/testarena.db" +ExecStart=/home/asf/testarena_backend/venv/bin/uvicorn testarena_app.main:app --host 0.0.0.0 --port 8000 +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/testarena-worker.service b/testarena-worker.service new file mode 100644 index 0000000..5ee5e6f --- /dev/null +++ b/testarena-worker.service @@ -0,0 +1,15 @@ +[Unit] +Description=TestArena Background Worker +After=network.target testarena-app.service + +[Service] +User=asf +Group=asf +WorkingDirectory=/home/asf/testarena_backend +Environment="PATH=/home/asf/testarena_backend/venv/bin" +Environment="DATABASE_URL=sqlite:////home/asf/testarena/testarena.db" +ExecStart=/home/asf/testarena_backend/venv/bin/python3 -m testarena_app.worker +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/testarena_app/database.py b/testarena_app/database.py index 131e2ea..8f3cb55 100644 --- a/testarena_app/database.py +++ b/testarena_app/database.py @@ -1,9 +1,10 @@ -from sqlalchemy import create_all_engines, create_engine +from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import os # Using SQLite for simplicity as requested -DATABASE_URL = "sqlite:///d:/ASF - course/ASF_01/ASF_tools/asf-pc-server/testarena_pc_backend/testarena_app/testarena.db" +# Use environment variable for database path or default to a relative path +DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./testarena.db") engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)