# Limristem Web

[![Python](https://img.shields.io/badge/Python-3.11+-blue.svg?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
[![Flask](https://img.shields.io/badge/Flask-3.0+-green.svg?style=for-the-badge&logo=flask&logoColor=white)](https://flask.palletsprojects.com/)
[![Debian](https://img.shields.io/badge/Debian-13%2B-red.svg?style=for-the-badge&logo=debian&logoColor=white)](https://www.debian.org/)
[![License](https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg?style=for-the-badge)](https://creativecommons.org/licenses/by-nc/4.0/)

**Limristem Web** è un pannello di controllo web leggero e ad alte prestazioni progettato specificamente per **Debian 13** (e versioni successive). Semplifica la gestione del server fornendo un'interfaccia pulita e intuitiva per gestire versioni PHP, host virtuali, utenti SFTP, backup e monitoraggio del sistema.

Powered by **Limristem Web**.

---

## 🚀 Funzionalità Chiave

*   **Gestione Versioni PHP**:
    *   Installa e gestisci multiple versioni di PHP (tramite repository Sury).
    *   Installa estensioni per ogni versione con un solo click.
    *   **Pool PHP-FPM Dedicati**: Ogni virtual host viene eseguito nel proprio pool isolato per sicurezza e prestazioni.

*   **Gestione Virtual Host**:
    *   Crea virtual host Nginx istantaneamente.
    *   Creazione automatica della struttura delle directory (`/home/{utente}/www/{dominio}/public`).
    *   **Supporto SSL**: Let's Encrypt con un click, Certificati Auto-Firmati o Caricamento Manuale.
    *   **Controllo Larghezza di Banda**: Imposta limiti di velocità upload/download e quote di traffico mensili per host.

*   **Gestione Utenti Sicura**:
    *   Crea utenti SFTP isolati.
    *   **Chroot Jails**: Gli utenti sono bloccati nelle loro directory home per la massima sicurezza.

*   **Sistema di Backup**:
    *   Backup programmati automatizzati (Giornalieri/Settimanali).
    *   Supporto per archiviazione **Locale**, **SFTP Remoto** e **AWS S3**.
    *   **Backup MySQL**: esporta i database con `mysqldump` in modalità `all`, `single` o `list`, compressi in archivio ZIP.

*   **Monitoraggio Sistema**:
    *   Dashboard in tempo reale per utilizzo CPU, RAM e Disco.
    *   **Avvisi**: Ricevi notifiche via Email (SMTP) o Webhook quando le risorse scarseggiano o i servizi falliscono.
    *   **Sicurezza**: Protezione anti-brute-force integrata (Ban IP) per il pannello di login.

---

## 🛠️ Installazione

### Installazione Rapida
Su un server Debian 13+ pulito, carica il pacchetto e avvia l'installer come **root**:

```bash
cd limristem-web
chmod +x install.sh
sudo bash install.sh
```

### Installazione Manuale

1.  **Apri la directory del pacchetto**:
    ```bash
    cd limristem-web
    ```

2.  **Rendi eseguibile l'installer**:
    ```bash
    chmod +x install.sh
    ```

3.  **Esegui l'installer**:
    ```bash
    ./install.sh
    ```

L'installer eseguirà:
*   Verifica della compatibilità del sistema (Debian 13+).
*   Configurazione Hostname e Proxy (opzionale).
*   Aggiornamento del sistema e installazione dipendenze.
*   Setup dell'ambiente virtuale Python e servizio Systemd.
*   **Generazione Credenziali Admin**: Al termine dell'installazione verranno mostrati Username e Password unici. **Salvali immediatamente.**

---

## ⚙️ Stack Tecnologico

*   **Backend**: Python (Flask, Gunicorn)
*   **Web Server**: Nginx (Reverse Proxy)
*   **Database**: SQLite (SQLAlchemy)
*   **Coda Task**: APScheduler (Job in background)
*   **Frontend**: Bootstrap 5, Jinja2

---

## 🗄️ Backup MySQL

Per ogni Backup Job è possibile abilitare il backup dei database MySQL/MariaDB selezionando la modalità desiderata:

| Modalità | Descrizione | Campo richiesto |
|----------|-------------|-----------------|
| `all`    | Backup di **tutti** i database utente (esclude `information_schema`, `performance_schema`, `mysql`, `sys`) | — |
| `single` | Backup di **un singolo** database | Nome database |
| `list`   | Backup di una **lista** di database | Nomi separati da virgola |

### Esempi di configurazione

**Tutti i database:**
```
Database Selection Mode: All Databases
```

**Database singolo:**
```
Database Selection Mode: Single Database
Database Name: my_app_db
```

**Lista di database:**
```
Database Selection Mode: List of Databases
Databases: shop_db,blog_db,crm_db
```

Le credenziali MySQL vengono lette dalla configurazione di sistema (`instance/mysql_config.json`) installata durante il setup di MariaDB. La password non viene mai esposta nei log o negli argomenti del processo.

I file di backup vengono salvati come archivi ZIP compressi con naming `<prefix>_<timestamp>.zip`.

---

## 📄 Licenza

Questo software è distribuito sotto licenza **Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**.

Sei libero di:
*   **Condividere** — riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare questo materiale con ogni mezzo e formato.
*   **Modificare** — remixare, trasformare il materiale e basarti su di esso per le tue opere.

Alle seguenti condizioni:
*   **Attribuzione** — Devi riconoscere una menzione di paternità adeguata, fornire un link alla licenza e indicare se sono state effettuate delle modifiche.
*   **Non Commerciale** — Non puoi utilizzare il materiale per scopi commerciali.

Vedi il testo completo della licenza su [Creative Commons](https://creativecommons.org/licenses/by-nc/4.0/).

---

*Realizzato con ❤️ da [Limristem](https://github.com/Limristem).*
