Mirror
Un mirror è una copia di EuGEnio che gira sul tuo computer o sul tuo server. Il codice è open source: puoi installarlo, cambiare la regione, il settore, le convenzioni, i testi e le funzioni, e usarlo per scopi diversi da quelli per cui è nato questo sito. Qui trovi i passi, dal più semplice (provarlo sul PC) al più completo (un sito tuo, online). I dettagli tecnici di ogni parte sono nei file README del repository.
Cosa serve
| Cosa | Dettagli |
|---|---|
| Un computer | Linux, oppure Windows con WSL2, oppure macOS. Almeno 2 processori, 4 GB di memoria libera (8 consigliati) e 20 GB di disco. Non serve una scheda grafica: il modello di previsione gira sul processore. |
| Programmi | Docker Engine con Compose, Git e Python 3.12 (solo per preparare i dati meteo). Tutti gratuiti. |
| Chiave Zornade | Gratuita, da app.zornade.com/api: serve solo alla pagina del patrimonio e alla ricerca degli indirizzi. |
| Per metterlo online | Un server (va bene il piano gratuito di Oracle Cloud), un dominio e un account Cloudflare gratuito. Per la newsletter, un servizio di invio email. |
| Facoltativo | Credenziali personali del GME, se ti servono le simulazioni con i prezzi dell'energia (restano ad uso interno, vedi Regole). |
1. Scarica il codice
git clone https://github.com/statocritico/eugenio.git
cd eugenio
Le cartelle sono divise per fasi: fase3-storico prepara i dati meteo, fase4-server contiene i
servizi (API, aggiornamenti, newsletter), fase5-sito le pagine, fase6-mercati prezzi e
convenzioni, fase7-territorio indirizzi e catasto, fase1-oracle la preparazione di un server
Oracle.
2. Prepara i dati meteo della tua regione
È la parte più lunga, perché lo storico meteo di ogni comune si scarica da
Open-Meteo. Scegli la regione con il suo codice ISTAT: per esempio
01 Piemonte, 03 Lombardia, 05 Veneto, 08 Emilia-Romagna,
09 Toscana, 12 Lazio, 15 Campania, 19 Sicilia; più regioni si separano
con la virgola, tutte vale per l'Italia intera.
cd fase3-storico
python3 -m venv .venv && . .venv/bin/activate # su Windows: .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m meteo_storico comuni --archivio ~/eugenio-archivio # una volta, tutta Italia (~730 MB)
python -m meteo_storico scarica --archivio ~/eugenio-archivio --regioni 09
python -m meteo_storico correggi --archivio ~/eugenio-archivio --regioni 09
python -m meteo_storico esporta --archivio ~/eugenio-archivio --regioni 09 --dest ~/eugenio-dati
- Quanto ci vuole. L'API gratuita di Open-Meteo consente 10.000 chiamate al giorno e ogni comune ne chiede
circa 400: una ventina di comuni al giorno. Il programma rispetta da solo i limiti, si ferma e riprende da dove era
rimasto. Per una regione grande conviene un'istanza Open-Meteo propria, che si avvia con un comando Docker e non ha
limiti (istruzioni nel README di
fase3-storico, opzione--locale). - Per provare subito bastano due o tre comuni:
--comuni "048017,050026"(Firenze, Pisa). - Alla fine la cartella
~/eugenio-daticontiene l'elenco dei comuni, lo storico giornaliero corretto e le metriche della correzione: è la cartella dati del tuo mirror.
3. Configura i servizi
cd ../fase4-server
cp .env.example .env
chmod 600 .env
Nel file .env cambia almeno queste righe (con un editor di testo):
| Riga | Valore |
|---|---|
REGIONI | il codice della tua regione, per esempio 09 |
CARTELLA_DATI | la cartella preparata al passo 2, per esempio /home/tu/eugenio-dati |
CARTELLA_SITO | la cartella delle pagine: ../fase5-sito/sito oppure una tua copia |
ZORNADE_API_KEY | la tua chiave |
LISTMONK_DB_PASSWORD, LISTMONK_ADMIN_PASSWORD | due password lunghe, per
esempio generate con openssl rand -hex 24 |
CLOUDFLARE_TUNNEL_TOKEN | per la prova in locale basta un valore qualsiasi, per esempio
locale; quello vero serve solo online (passo 5) |
SITO_URL, NOTIZIE_URL, SMTP_*, EMAIL_AMMINISTRATORE | i tuoi indirizzi; si possono lasciare vuoti finché non metti online la newsletter |
Su Linux i servizi scrivono nella cartella dati come utente numero 1000: se il tuo utente ha un altro numero, dagli il
permesso con sudo setfacl -R -m u:1000:rwX -m d:u:1000:rwX ~/eugenio-dati (pacchetto acl).
4. Provalo sul tuo computer
In locale non serve Cloudflare: basta rendere visibile il server web sul tuo PC. Nella cartella
fase4-server crea il file docker-compose.override.yml con queste righe:
services:
caddy:
ports:
- "127.0.0.1:8080:80"
Poi avvia l'API e il sito (la prima volta ci vogliono una decina di minuti), e il processo che scarica le previsioni meteo:
docker compose up -d --build api caddy
docker compose up -d worker
docker compose logs -f worker # Ctrl+C per uscire dai log
Per prezzi di mercato e convenzioni copia anche la loro configurazione nella cartella dati: i comandi sono nel README
di fase4-server, paragrafo "Avvio". Senza, quella parte resta semplicemente spenta.
Apri http://localhost:8080 nel browser; per la tua regione aggiungi
?regione=09 all'indirizzo. Le mappe di tutta Italia sono già incluse.
5. Mettilo online
- Server. Una macchina Linux sempre accesa. Con Oracle Cloud lo script
fase1-oracle/01_setup_server.shinstalla Docker, gli aggiornamenti automatici e la protezione dell'accesso in pochi minuti; il README della fase 1 spiega come creare la macchina gratuita. - Codice e dati. Copia il codice sul server e la cartella dati del passo 2 (
scp -r), poi ripeti il passo 3 con i percorsi del server. Toglidocker-compose.override.yml: online non serve nessuna porta aperta. - Dominio e tunnel. Sposta il DNS del tuo dominio su Cloudflare, crea un tunnel in
Zero Trust → Networks → Tunnels e metti il suo token in
CLOUDFLARE_TUNNEL_TOKEN. Aggiungi due route: il tuo sottodominio per il sito versohttp://caddy:80e quello della newsletter versohttp://listmonk:9000. - Pannello della newsletter. Proteggi
/admindella newsletter con Cloudflare Access (accesso solo con la tua email), configura il servizio di invio email (SPF, DKIM e DMARC sul tuo dominio) e la lista in listmonk. - Avvio.
docker compose up -d. Controllo:https://il-tuo-dominio/api/salute.
Il README della fase 4 descrive ogni passo, compresi i dettagli che ci hanno fatto perdere tempo.
Personalizzarlo per altri scopi
| Vuoi… | Dove si cambia |
|---|---|
| un'altra regione, o più regioni | REGIONI nel .env e --regioni al passo 2;
la pagina si apre su una regione con ?regione=RR |
| le convenzioni energia e gas del tuo territorio | un file TOML per convenzione in
fase6-mercati/convenzioni/ (si parte copiando uno di quelli esistenti); le pagine delle centrali di
acquisto da sorvegliare ogni notte in convenzioni/fonti/centrali.toml |
| un altro settore | i testi delle pagine in fase5-sito/sito/*.html; i contenuti della newsletter in
fase4-server/servizio/notiziario.py |
| il tuo nome, logo e colori | testata e piede delle pagine; i colori sono variabili in cima a
stile.css |
| limiti diversi per gli utenti | MAX_UPLOAD_MB, MAX_RIGHE, MAX_EDIFICI nel
.env |
| meno funzioni | senza credenziali GME i prezzi di mercato si saltano; senza listmonk non c'è newsletter; le voci si tolgono dal menu delle pagine |
| più potenza | con una scheda grafica NVIDIA: un'immagine con PyTorch per CUDA (nel Dockerfile
dell'API) e TIREX_DEVICE=cuda nel .env |
| usarlo dentro un ente | la prova in locale (passo 4) su un server interno, senza Cloudflare: i dati non escono dalla rete dell'ente, salvo le ricerche verso Zornade |
Le regole da rispettare
- Licenza AGPL-3.0. Se modifichi il codice e fai usare il tuo mirror ad altri, anche ai colleghi, devi offrire loro il codice della tua versione: basta un link nel piede del sito. Spiegazione completa nella pagina Licenza.
- Un nome tuo. Non presentare il mirror come il sito ufficiale di EuGEnio o di Stato Critico: cambia testata, piede e collegamenti.
- Una privacy tua. Chi gestisce il mirror è titolare del trattamento: riscrivi
privacy.htmlcon i tuoi dati e i tuoi fornitori. - Le condizioni dei dati. Ogni fonte ha le sue, elencate in Fonti e licenze: l'API gratuita di Open-Meteo è per uso non commerciale, Zornade chiede il link "Dati elaborati da Zornade", i prezzi del GME e di EEX non si pubblicano.
Se fai un mirror, o se ti blocchi a metà, scrivici: un elenco dei mirror attivi aiuterebbe chi cerca lo stesso servizio in un'altra regione o in un altro settore.