diff --git a/YakPanel-server/backend/app/__pycache__/main.cpython-314.pyc b/YakPanel-server/backend/app/__pycache__/main.cpython-314.pyc new file mode 100644 index 00000000..bc134b3c Binary files /dev/null and b/YakPanel-server/backend/app/__pycache__/main.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/auth.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/auth.cpython-314.pyc new file mode 100644 index 00000000..590f0c49 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/auth.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/backup.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/backup.cpython-314.pyc new file mode 100644 index 00000000..a75a509b Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/backup.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/config.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/config.cpython-314.pyc new file mode 100644 index 00000000..bf118333 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/config.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/crontab.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/crontab.cpython-314.pyc new file mode 100644 index 00000000..60c245c3 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/crontab.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/dashboard.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/dashboard.cpython-314.pyc new file mode 100644 index 00000000..b2764e05 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/dashboard.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/database.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/database.cpython-314.pyc new file mode 100644 index 00000000..35ad8248 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/database.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/docker.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/docker.cpython-314.pyc new file mode 100644 index 00000000..44bab40d Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/docker.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/files.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/files.cpython-314.pyc new file mode 100644 index 00000000..b0cf38e5 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/files.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/firewall.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/firewall.cpython-314.pyc new file mode 100644 index 00000000..f03629d7 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/firewall.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/ftp.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/ftp.cpython-314.pyc new file mode 100644 index 00000000..f1c17cd0 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/ftp.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/logs.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/logs.cpython-314.pyc new file mode 100644 index 00000000..cd885d1c Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/logs.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/monitor.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/monitor.cpython-314.pyc new file mode 100644 index 00000000..48d17fe4 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/monitor.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/node.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/node.cpython-314.pyc new file mode 100644 index 00000000..7f69451e Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/node.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/plugin.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/plugin.cpython-314.pyc new file mode 100644 index 00000000..6d40ac5e Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/plugin.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/public_installer.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/public_installer.cpython-314.pyc index 6951a54d..b61be21a 100644 Binary files a/YakPanel-server/backend/app/api/__pycache__/public_installer.cpython-314.pyc and b/YakPanel-server/backend/app/api/__pycache__/public_installer.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/service.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/service.cpython-314.pyc new file mode 100644 index 00000000..e0691547 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/service.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/site.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/site.cpython-314.pyc new file mode 100644 index 00000000..08a1d1c1 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/site.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/soft.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/soft.cpython-314.pyc new file mode 100644 index 00000000..876c2fe9 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/soft.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/ssl.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/ssl.cpython-314.pyc new file mode 100644 index 00000000..3b55a964 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/ssl.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/terminal.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/terminal.cpython-314.pyc new file mode 100644 index 00000000..aa32f154 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/terminal.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/__pycache__/user.cpython-314.pyc b/YakPanel-server/backend/app/api/__pycache__/user.cpython-314.pyc new file mode 100644 index 00000000..632bbca4 Binary files /dev/null and b/YakPanel-server/backend/app/api/__pycache__/user.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/api/public_installer.py b/YakPanel-server/backend/app/api/public_installer.py index 2574d559..7e036720 100644 --- a/YakPanel-server/backend/app/api/public_installer.py +++ b/YakPanel-server/backend/app/api/public_installer.py @@ -13,7 +13,6 @@ from collections import defaultdict from typing import Annotated, Any, Literal, Optional, Union from urllib.parse import urlparse -import asyncssh from fastapi import APIRouter, HTTPException, Request, WebSocket from pydantic import BaseModel, Field, field_validator @@ -198,6 +197,8 @@ async def create_job(body: CreateJobRequest, request: Request): auth_payload = body.auth async def runner() -> None: + import asyncssh + async with _jobs_lock: job = _jobs.get(job_id) if not job: diff --git a/YakPanel-server/backend/app/core/__pycache__/config.cpython-314.pyc b/YakPanel-server/backend/app/core/__pycache__/config.cpython-314.pyc new file mode 100644 index 00000000..c4301885 Binary files /dev/null and b/YakPanel-server/backend/app/core/__pycache__/config.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/core/__pycache__/database.cpython-314.pyc b/YakPanel-server/backend/app/core/__pycache__/database.cpython-314.pyc new file mode 100644 index 00000000..d38a8fcd Binary files /dev/null and b/YakPanel-server/backend/app/core/__pycache__/database.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/core/__pycache__/notification.cpython-314.pyc b/YakPanel-server/backend/app/core/__pycache__/notification.cpython-314.pyc new file mode 100644 index 00000000..0037426e Binary files /dev/null and b/YakPanel-server/backend/app/core/__pycache__/notification.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/core/__pycache__/utils.cpython-314.pyc b/YakPanel-server/backend/app/core/__pycache__/utils.cpython-314.pyc new file mode 100644 index 00000000..6d3b851b Binary files /dev/null and b/YakPanel-server/backend/app/core/__pycache__/utils.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/data/default.db b/YakPanel-server/backend/app/data/default.db new file mode 100644 index 00000000..75f48ef9 Binary files /dev/null and b/YakPanel-server/backend/app/data/default.db differ diff --git a/YakPanel-server/backend/app/models/__pycache__/__init__.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 00000000..db1655db Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/__init__.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/backup_plan.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/backup_plan.cpython-314.pyc new file mode 100644 index 00000000..89e427f9 Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/backup_plan.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/config.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/config.cpython-314.pyc new file mode 100644 index 00000000..7049ab50 Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/config.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/crontab.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/crontab.cpython-314.pyc new file mode 100644 index 00000000..cf555a2d Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/crontab.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/database.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/database.cpython-314.pyc new file mode 100644 index 00000000..108268d6 Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/database.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/firewall.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/firewall.cpython-314.pyc new file mode 100644 index 00000000..01fbeccc Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/firewall.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/ftp.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/ftp.cpython-314.pyc new file mode 100644 index 00000000..ad90e6c5 Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/ftp.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/plugin.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/plugin.cpython-314.pyc new file mode 100644 index 00000000..46783b7e Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/plugin.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/redirect.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/redirect.cpython-314.pyc new file mode 100644 index 00000000..145ab4aa Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/redirect.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/site.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/site.cpython-314.pyc new file mode 100644 index 00000000..8f0cb324 Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/site.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/models/__pycache__/user.cpython-314.pyc b/YakPanel-server/backend/app/models/__pycache__/user.cpython-314.pyc new file mode 100644 index 00000000..c1c37bfb Binary files /dev/null and b/YakPanel-server/backend/app/models/__pycache__/user.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/services/__pycache__/__init__.cpython-314.pyc b/YakPanel-server/backend/app/services/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 00000000..ec395800 Binary files /dev/null and b/YakPanel-server/backend/app/services/__pycache__/__init__.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/services/__pycache__/database_service.cpython-314.pyc b/YakPanel-server/backend/app/services/__pycache__/database_service.cpython-314.pyc new file mode 100644 index 00000000..bf7461f6 Binary files /dev/null and b/YakPanel-server/backend/app/services/__pycache__/database_service.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/services/__pycache__/ftp_service.cpython-314.pyc b/YakPanel-server/backend/app/services/__pycache__/ftp_service.cpython-314.pyc new file mode 100644 index 00000000..ac8b5f45 Binary files /dev/null and b/YakPanel-server/backend/app/services/__pycache__/ftp_service.cpython-314.pyc differ diff --git a/YakPanel-server/backend/app/services/__pycache__/site_service.cpython-314.pyc b/YakPanel-server/backend/app/services/__pycache__/site_service.cpython-314.pyc new file mode 100644 index 00000000..1ed45c60 Binary files /dev/null and b/YakPanel-server/backend/app/services/__pycache__/site_service.cpython-314.pyc differ diff --git a/YakPanel-server/install.sh b/YakPanel-server/install.sh index bc78e8e4..80e2daad 100644 --- a/YakPanel-server/install.sh +++ b/YakPanel-server/install.sh @@ -100,7 +100,8 @@ install_base_packages() { apt) apt-get update -qq DEBIAN_FRONTEND=noninteractive apt-get install -y \ - git python3 python3-venv python3-pip redis-server nginx curl ca-certificates + git python3 python3-venv python3-pip python3-dev build-essential \ + redis-server nginx curl ca-certificates ;; dnf|yum) if [ "$PKG" = dnf ]; then @@ -119,27 +120,29 @@ install_base_packages() { esac } -ensure_python_min_311() { - if command -v python3.11 >/dev/null 2>&1; then - if python3.11 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)' 2>/dev/null; then - PYTHON_CMD=python3.11 - return 0 - fi +# Default dist Python (3.10+ on Ubuntu 22.04) is enough; otherwise install 3.11 from apt. +ensure_python_for_backend() { + if [ -n "${PYTHON_CMD:-}" ]; then + return 0 fi - if python3 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 11) else 1)' 2>/dev/null; then + if python3 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 10) else 1)' 2>/dev/null; then PYTHON_CMD=python3 return 0 fi + if command -v python3.11 >/dev/null 2>&1 && python3.11 -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 10) else 1)' 2>/dev/null; then + PYTHON_CMD=python3.11 + return 0 + fi if [ "$PKG" = apt ]; then - echo "Python 3.11+ required for the backend; installing python3.11 from apt..." + echo "Python 3.10+ required for the backend; installing python3.11 from apt..." DEBIAN_FRONTEND=noninteractive apt-get install -y python3.11 python3.11-venv python3.11-dev || { - echo "Could not install python3.11. Use Ubuntu 24.04+, enable universe, or install Python 3.11+ manually." + echo "Could not install python3.11. Enable universe or install Python 3.10+ manually." exit 1 } PYTHON_CMD=python3.11 return 0 fi - echo "Python 3.11+ required. Current: $(python3 -V 2>/dev/null || echo 'python3 missing')" + echo "Python 3.10+ required. Current: $(python3 -V 2>/dev/null || echo 'python3 missing')" exit 1 } @@ -189,6 +192,7 @@ stage_source_to_install_path() { } install_base_packages +ensure_python_for_backend ensure_node_18_plus echo "" @@ -234,6 +238,10 @@ cd "$INSTALL_PATH/backend" # shellcheck source=/dev/null source venv/bin/activate pip install -q -r requirements.txt +./venv/bin/python -c "import app.main" || { + echo "ERROR: Backend failed to import (see traceback above). Check Python version and requirements." + exit 1 +} python scripts/seed_admin.py deactivate @@ -281,6 +289,7 @@ Type=simple User=root WorkingDirectory=$INSTALL_PATH/backend Environment="PATH=$INSTALL_PATH/backend/venv/bin:\$PATH" +Environment=PYTHONUNBUFFERED=1 ExecStart=$INSTALL_PATH/backend/venv/bin/uvicorn app.main:app --host 127.0.0.1 --port $BACKEND_PORT Restart=always RestartSec=3 @@ -294,7 +303,7 @@ systemctl enable "$SYSTEMD_UNIT" systemctl restart "$SYSTEMD_UNIT" || systemctl start "$SYSTEMD_UNIT" backend_ok=0 -for _ in {1..40}; do +for _ in {1..120}; do if curl -sfS --max-time 2 "http://127.0.0.1:${BACKEND_PORT}/api/health" >/dev/null 2>&1; then backend_ok=1 break