EuGEnio un servizio per uno Stato Critico

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

CosaDettagli
Un computerLinux, 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.
ProgrammiDocker Engine con Compose, Git e Python 3.12 (solo per preparare i dati meteo). Tutti gratuiti.
Chiave ZornadeGratuita, da app.zornade.com/api: serve solo alla pagina del patrimonio e alla ricerca degli indirizzi.
Per metterlo onlineUn server (va bene il piano gratuito di Oracle Cloud), un dominio e un account Cloudflare gratuito. Per la newsletter, un servizio di invio email.
FacoltativoCredenziali 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

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):

RigaValore
REGIONIil codice della tua regione, per esempio 09
CARTELLA_DATIla cartella preparata al passo 2, per esempio /home/tu/eugenio-dati
CARTELLA_SITOla cartella delle pagine: ../fase5-sito/sito oppure una tua copia
ZORNADE_API_KEYla tua chiave
LISTMONK_DB_PASSWORD, LISTMONK_ADMIN_PASSWORDdue password lunghe, per esempio generate con openssl rand -hex 24
CLOUDFLARE_TUNNEL_TOKENper la prova in locale basta un valore qualsiasi, per esempio locale; quello vero serve solo online (passo 5)
SITO_URL, NOTIZIE_URL, SMTP_*, EMAIL_AMMINISTRATOREi 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

  1. Server. Una macchina Linux sempre accesa. Con Oracle Cloud lo script fase1-oracle/01_setup_server.sh installa Docker, gli aggiornamenti automatici e la protezione dell'accesso in pochi minuti; il README della fase 1 spiega come creare la macchina gratuita.
  2. 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. Togli docker-compose.override.yml: online non serve nessuna porta aperta.
  3. 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 verso http://caddy:80 e quello della newsletter verso http://listmonk:9000.
  4. Pannello della newsletter. Proteggi /admin della 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.
  5. 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ù regioniREGIONI nel .env e --regioni al passo 2; la pagina si apre su una regione con ?regione=RR
le convenzioni energia e gas del tuo territorioun 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 settorei testi delle pagine in fase5-sito/sito/*.html; i contenuti della newsletter in fase4-server/servizio/notiziario.py
il tuo nome, logo e coloritestata e piede delle pagine; i colori sono variabili in cima a stile.css
limiti diversi per gli utentiMAX_UPLOAD_MB, MAX_RIGHE, MAX_EDIFICI nel .env
meno funzionisenza credenziali GME i prezzi di mercato si saltano; senza listmonk non c'è newsletter; le voci si tolgono dal menu delle pagine
più potenzacon una scheda grafica NVIDIA: un'immagine con PyTorch per CUDA (nel Dockerfile dell'API) e TIREX_DEVICE=cuda nel .env
usarlo dentro un entela 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

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.