Compare commits

..

3 Commits

Author SHA1 Message Date
Marco Lanzara
44be5e232e 🚀 Release v1.0.115
- Tipo: patch
- Database schema: database-schema/schema.sql (solo struttura)
- Data: 2026-02-16 14:40:14
2026-02-16 14:40:14 +00:00
marco370
34d830b275 Replace custom scripts with systemd for managing backend and frontend services
Replace custom process management scripts (`check_backend.sh`, `check_frontend.sh`, `restart_all.sh`) with `systemctl` commands to ensure proper service management and virtual environment utilization.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 9aa98b1a-1ee1-47f9-a579-83bad5992ed1
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/MmMtYN7
2026-02-16 12:02:53 +00:00
marco370
3e0bd64b14 Fix ML backend startup issues and improve logging
Address issues with the ML backend not starting correctly due to missing dependencies by ensuring the correct virtual environment is used and improving logging for easier debugging of startup failures.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 0a2e2f05-ffc8-4767-ba4d-9b4f2b98416d
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/MmMtYN7
2026-02-16 12:00:21 +00:00
7 changed files with 154 additions and 60 deletions

View File

@ -0,0 +1,41 @@
Cerca il watchdog che riavvia il backend
grep -r "Backend Python NON attivo" /opt/ids/ --include="*.sh"
grep -r "Backend Python NON attivo" /etc/cron* /var/spool/cron/
# Verifica cron jobs attivi
crontab -l
crontab -l -u ids
# Verifica timer systemd
systemctl list-timers --all | grep ids
/opt/ids/deployment/check_backend.sh: echo "[$(date)] Backend Python NON attivo, riavvio..." >> "$LOG_FILE"
# ============================================
# SISTEMA IDS - CONFIGURAZIONE AUTOMATICA
# ============================================
# Training ML ogni 12 ore (alle 00:00 e 12:00)
0 */12 * * * /opt/ids/deployment/cron_train.sh
# Detection automatica ogni 5 minuti
*/3 * * * * /opt/ids/deployment/cron_detect.sh
# Verifica processo backend Python ogni 5 minuti (riavvia se non attivo)
*/5 * * * * /opt/ids/deployment/check_backend.sh >> /var/log/ids/cron.log 2>&1
# Verifica processo frontend ogni 5 minuti (riavvia se non attivo)
*/5 * * * * /opt/ids/deployment/check_frontend.sh >> /var/log/ids/cron.log 2>&1
# Pulizia log settimanale (ogni domenica alle 02:00)
0 2 * * 0 find /var/log/ids -name "*.log" -size +100M -exec truncate -s 50M {} \; >> /var/log/ids/cron.log 2>&1
# Restart completo del sistema ogni settimana (domenica alle 03:00)
0 3 * * 0 /opt/ids/deployment/restart_all.sh >> /var/log/ids/cron.log 2>&1
# Backup database giornaliero (alle 04:00)
0 4 * * * /opt/ids/deployment/backup_db.sh >> /var/log/ids/cron.log 2>&1
0 3 * * * /opt/ids/deployment/cleanup_database.sh >> /var/log/ids/cleanup.log 2>&1
Mon 2026-02-16 13:05:00 CET 4min 9s left Mon 2026-02-16 12:05:00 CET 55min ago ids-analytics-aggregator.timer ids-analytics-aggregator.service
Mon 2026-02-16 13:14:33 CET 13min left Mon 2026-02-16 12:13:57 CET 46min ago ids-cleanup.timer ids-cleanup.service
Mon 2026-02-23 03:00:00 CET 6 days left Mon 2026-02-16 03:00:00 CET 10h ago ids-ml-training.timer ids-ml-training.service
- - Mon 2026-02-16 12:48:47 CET 12min ago ids-auto-block.timer ids-auto-block.service
- - Mon 2026-02-16 13:00:01 CET 48s ago ids-list-fetcher.timer ids-list-fetcher.service

View File

@ -0,0 +1,59 @@
systemctl stop ids-ml-backend
[root@ids ~]# systemctl start ids-ml-backend
[root@ids ~]# systemctl status ids-ml-backend
● ids-ml-backend.service - IDS ML Backend (FastAPI)
Loaded: loaded (/etc/systemd/system/ids-ml-backend.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-02-16 12:59:19 CET; 4s ago
Main PID: 3600 (python3)
Tasks: 26 (limit: 100409)
Memory: 157.6M (max: 2.0G available: 1.8G)
CPU: 3.936s
CGroup: /system.slice/ids-ml-backend.service
└─3600 /opt/ids/python_ml/venv/bin/python3 main.py
Feb 16 12:59:19 ids.alfacom.it systemd[1]: Started IDS ML Backend (FastAPI).
[root@ids ~]# cat /etc/systemd/system/ids-ml-backend.service
[Unit]
Description=IDS ML Backend (FastAPI)
After=network.target postgresql-16.service
Wants=postgresql-16.service
[Service]
Type=simple
User=ids
Group=ids
WorkingDirectory=/opt/ids/python_ml
EnvironmentFile=/opt/ids/.env
# Comando esecuzione (usa virtual environment)
ExecStart=/opt/ids/python_ml/venv/bin/python3 main.py
# Restart automatico sempre (non solo on-failure)
Restart=always
RestartSec=10
StartLimitInterval=300
StartLimitBurst=5
# Limiti risorse
LimitNOFILE=65536
MemoryMax=2G
# Logging
StandardOutput=append:/var/log/ids/ml_backend.log
StandardError=append:/var/log/ids/ml_backend.log
SyslogIdentifier=ids-ml-backend
[Install]
WantedBy=multi-user.target
[root@ids ~]# tail -f /var/log/ids/backend.log
🚀 Starting IDS API on http://0.0.0.0:8000
📚 Docs available at http://0.0.0.0:8000/docs
[Mon Feb 16 12:56:12 CET 2026] Backend Python NON attivo, riavvio...
[Mon Feb 16 12:56:14 CET 2026] Backend riavviato con PID: 3453
Traceback (most recent call last):
File "/opt/ids/python_ml/main.py", line 21, in <module>
from ml_hybrid_detector import MLHybridDetector
File "/opt/ids/python_ml/ml_hybrid_detector.py", line 13, in <module>
from xgboost import XGBClassifier
ModuleNotFoundError: No module named 'xgboost'

View File

@ -2,7 +2,7 @@
-- PostgreSQL database dump -- PostgreSQL database dump
-- --
\restrict IQNXQ3AdZIKCf43dmd4ux9afKlXfTublRgIkiThbrdwGm8ObGL1XepBpgAQJoeC \restrict 9ZJC58VvaMhFtxysGUfqAD6tVv0Q9ukBv5rvK14fndwaalwIHn442ILA7auN2Uq
-- Dumped from database version 16.11 (df20cf9) -- Dumped from database version 16.11 (df20cf9)
-- Dumped by pg_dump version 16.10 -- Dumped by pg_dump version 16.10
@ -387,5 +387,5 @@ ALTER TABLE ONLY public.public_blacklist_ips
-- PostgreSQL database dump complete -- PostgreSQL database dump complete
-- --
\unrestrict IQNXQ3AdZIKCf43dmd4ux9afKlXfTublRgIkiThbrdwGm8ObGL1XepBpgAQJoeC \unrestrict 9ZJC58VvaMhFtxysGUfqAD6tVv0Q9ukBv5rvK14fndwaalwIHn442ILA7auN2Uq

View File

@ -1,34 +1,28 @@
#!/bin/bash #!/bin/bash
# ========================================================= # =========================================================
# CHECK BACKEND - Verifica e riavvia backend Python se necessario # CHECK BACKEND - Verifica e riavvia backend Python se necessario
# Usa systemctl per gestire il servizio (con virtual environment)
# ========================================================= # =========================================================
PROCESS_NAME="python3.11 python_ml/main.py"
PID_FILE="/var/log/ids/backend.pid"
LOG_FILE="/var/log/ids/backend.log" LOG_FILE="/var/log/ids/backend.log"
WORK_DIR="/opt/ids"
mkdir -p /var/log/ids mkdir -p /var/log/ids
# Check if backend is running # Check if systemd service is active
if pgrep -f "$PROCESS_NAME" > /dev/null; then if systemctl is-active --quiet ids-ml-backend; then
# Backend running, update PID
pgrep -f "$PROCESS_NAME" > "$PID_FILE"
exit 0 exit 0
else else
echo "[$(date)] Backend Python NON attivo, riavvio..." >> "$LOG_FILE" echo "[$(date)] Backend Python NON attivo, riavvio via systemctl..." >> "$LOG_FILE"
# Kill any orphaned Python processes # Restart via systemctl (usa il venv configurato nel service)
pkill -f "python_ml/main.py" 2>/dev/null systemctl restart ids-ml-backend
# Wait a moment # Wait for startup
sleep 2 sleep 3
# Start backend if systemctl is-active --quiet ids-ml-backend; then
cd "$WORK_DIR/python_ml" echo "[$(date)] Backend riavviato con successo via systemctl" >> "$LOG_FILE"
nohup /usr/bin/python3.11 main.py >> "$LOG_FILE" 2>&1 & else
NEW_PID=$! echo "[$(date)] ERRORE: Backend non si è avviato. Controlla: journalctl -u ids-ml-backend" >> "$LOG_FILE"
echo $NEW_PID > "$PID_FILE" fi
echo "[$(date)] Backend riavviato con PID: $NEW_PID" >> "$LOG_FILE"
fi fi

View File

@ -1,41 +1,28 @@
#!/bin/bash #!/bin/bash
# ========================================================= # =========================================================
# CHECK FRONTEND - Verifica e riavvia frontend Node.js se necessario # CHECK FRONTEND - Verifica e riavvia frontend Node.js se necessario
# Usa systemctl per gestire il servizio
# ========================================================= # =========================================================
PROCESS_NAME="npm run dev"
PID_FILE="/var/log/ids/frontend.pid"
LOG_FILE="/var/log/ids/frontend.log" LOG_FILE="/var/log/ids/frontend.log"
WORK_DIR="/opt/ids"
mkdir -p /var/log/ids mkdir -p /var/log/ids
# Check if frontend is running # Check if systemd service is active
if pgrep -f "vite" > /dev/null; then if systemctl is-active --quiet ids-frontend; then
# Frontend running, update PID
pgrep -f "vite" > "$PID_FILE"
exit 0 exit 0
else else
echo "[$(date)] Frontend Node NON attivo, riavvio..." >> "$LOG_FILE" echo "[$(date)] Frontend Node NON attivo, riavvio via systemctl..." >> "$LOG_FILE"
# Kill any orphaned Node processes # Restart via systemctl
pkill -f "vite" 2>/dev/null systemctl restart ids-frontend
pkill -f "npm run dev" 2>/dev/null
# Wait a moment # Wait for startup
sleep 2 sleep 3
# Start frontend with environment variables from .env if systemctl is-active --quiet ids-frontend; then
cd "$WORK_DIR" echo "[$(date)] Frontend riavviato con successo via systemctl" >> "$LOG_FILE"
if [ -f "$WORK_DIR/.env" ]; then
# Load .env and start npm with those variables
nohup env $(cat "$WORK_DIR/.env" | grep -v '^#' | xargs) npm run dev >> "$LOG_FILE" 2>&1 &
else else
# Fallback: start without .env (will use system env vars) echo "[$(date)] ERRORE: Frontend non si è avviato. Controlla: journalctl -u ids-frontend" >> "$LOG_FILE"
nohup npm run dev >> "$LOG_FILE" 2>&1 &
fi fi
NEW_PID=$!
echo $NEW_PID > "$PID_FILE"
echo "[$(date)] Frontend riavviato con PID: $NEW_PID" >> "$LOG_FILE"
fi fi

View File

@ -1,17 +1,17 @@
#!/bin/bash #!/bin/bash
# ========================================================= # =========================================================
# RESTART ALL - Riavvio completo sistema IDS # RESTART ALL - Riavvio completo sistema IDS
# Usa systemctl per gestire tutti i servizi
# ========================================================= # =========================================================
LOG_FILE="/var/log/ids/cron.log" LOG_FILE="/var/log/ids/cron.log"
echo "$(date): === RESTART SETTIMANALE SISTEMA IDS ===" >> "$LOG_FILE" echo "$(date): === RESTART SETTIMANALE SISTEMA IDS ===" >> "$LOG_FILE"
# Stop all services # Stop all services via systemctl
echo "$(date): Arresto servizi..." >> "$LOG_FILE" echo "$(date): Arresto servizi..." >> "$LOG_FILE"
pkill -f "python_ml/main.py" systemctl stop ids-ml-backend 2>/dev/null
pkill -f "vite" systemctl stop ids-frontend 2>/dev/null
pkill -f "npm run dev"
sleep 5 sleep 5
@ -20,10 +20,23 @@ echo "$(date): Pulizia file temporanei..." >> "$LOG_FILE"
rm -f /var/log/ids/*.pid rm -f /var/log/ids/*.pid
find /tmp -name "ids_*" -mtime +7 -delete 2>/dev/null find /tmp -name "ids_*" -mtime +7 -delete 2>/dev/null
# Restart services # Restart services via systemctl
echo "$(date): Riavvio servizi..." >> "$LOG_FILE" echo "$(date): Riavvio servizi..." >> "$LOG_FILE"
/opt/ids/deployment/check_backend.sh >> "$LOG_FILE" 2>&1 systemctl start ids-ml-backend
sleep 3 sleep 3
/opt/ids/deployment/check_frontend.sh >> "$LOG_FILE" 2>&1 systemctl start ids-frontend
# Verify
if systemctl is-active --quiet ids-ml-backend; then
echo "$(date): ML Backend avviato con successo" >> "$LOG_FILE"
else
echo "$(date): ERRORE: ML Backend non si è avviato" >> "$LOG_FILE"
fi
if systemctl is-active --quiet ids-frontend; then
echo "$(date): Frontend avviato con successo" >> "$LOG_FILE"
else
echo "$(date): ERRORE: Frontend non si è avviato" >> "$LOG_FILE"
fi
echo "$(date): Restart completato!" >> "$LOG_FILE" echo "$(date): Restart completato!" >> "$LOG_FILE"

View File

@ -1,7 +1,13 @@
{ {
"version": "1.0.114", "version": "1.0.115",
"lastUpdate": "2026-02-16T11:54:24.557Z", "lastUpdate": "2026-02-16T14:40:14.777Z",
"changelog": [ "changelog": [
{
"version": "1.0.115",
"date": "2026-02-16",
"type": "patch",
"description": "Deployment automatico v1.0.115"
},
{ {
"version": "1.0.114", "version": "1.0.114",
"date": "2026-02-16", "date": "2026-02-16",
@ -295,12 +301,6 @@
"date": "2025-11-24", "date": "2025-11-24",
"type": "patch", "type": "patch",
"description": "Deployment automatico v1.0.66" "description": "Deployment automatico v1.0.66"
},
{
"version": "1.0.65",
"date": "2025-11-24",
"type": "patch",
"description": "Deployment automatico v1.0.65"
} }
] ]
} }