Initial YakPanel commit
This commit is contained in:
4
YakPanel-server/backend/app/tasks/__init__.py
Normal file
4
YakPanel-server/backend/app/tasks/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# YakPanel - Celery tasks
|
||||
from app.tasks.celery_app import celery_app
|
||||
|
||||
__all__ = ["celery_app"]
|
||||
20
YakPanel-server/backend/app/tasks/celery_app.py
Normal file
20
YakPanel-server/backend/app/tasks/celery_app.py
Normal file
@@ -0,0 +1,20 @@
|
||||
"""YakPanel - Celery application"""
|
||||
from celery import Celery
|
||||
from app.core.config import get_settings
|
||||
|
||||
settings = get_settings()
|
||||
|
||||
celery_app = Celery(
|
||||
"cit_panel",
|
||||
broker=settings.redis_url,
|
||||
backend=settings.redis_url,
|
||||
include=["app.tasks.install"],
|
||||
)
|
||||
|
||||
celery_app.conf.update(
|
||||
task_serializer="json",
|
||||
accept_content=["json"],
|
||||
result_serializer="json",
|
||||
timezone="UTC",
|
||||
enable_utc=True,
|
||||
)
|
||||
42
YakPanel-server/backend/app/tasks/install.py
Normal file
42
YakPanel-server/backend/app/tasks/install.py
Normal file
@@ -0,0 +1,42 @@
|
||||
"""YakPanel - Install tasks (one-click install via apt)"""
|
||||
import subprocess
|
||||
from app.tasks.celery_app import celery_app
|
||||
|
||||
# Map panel package IDs to apt package names (same as soft.py)
|
||||
PKG_MAP = {
|
||||
"nginx": "nginx",
|
||||
"mysql-server": "mysql-server",
|
||||
"mariadb-server": "mariadb-server",
|
||||
"php": "php",
|
||||
"php-fpm": "php-fpm",
|
||||
"redis-server": "redis-server",
|
||||
"postgresql": "postgresql",
|
||||
"mongodb": "mongodb",
|
||||
"certbot": "certbot",
|
||||
"docker": "docker.io",
|
||||
"nodejs": "nodejs",
|
||||
"npm": "npm",
|
||||
"git": "git",
|
||||
"python3": "python3",
|
||||
}
|
||||
|
||||
|
||||
@celery_app.task
|
||||
def install_software(name: str, version: str = ""):
|
||||
"""Install software via apt (Debian/Ubuntu). name = package id from soft list."""
|
||||
pkg = PKG_MAP.get(name, name)
|
||||
try:
|
||||
result = subprocess.run(
|
||||
f"apt-get update && apt-get install -y {pkg}",
|
||||
shell=True,
|
||||
capture_output=True,
|
||||
timeout=300,
|
||||
)
|
||||
if result.returncode != 0:
|
||||
err = (result.stderr or result.stdout or b"").decode("utf-8", errors="replace")
|
||||
return {"status": "failed", "name": name, "error": err.strip()[:500]}
|
||||
return {"status": "ok", "name": name, "version": version}
|
||||
except subprocess.TimeoutExpired:
|
||||
return {"status": "failed", "name": name, "error": "Installation timed out"}
|
||||
except Exception as e:
|
||||
return {"status": "failed", "name": name, "error": str(e)}
|
||||
Reference in New Issue
Block a user