# Deploy di Tigertips su VPS (Linux)

Guida passo-passo per spostare il sistema dal PC locale (WAMP) a un VPS.
Tutti gli script sono portabili (path relativi, configurazione nel `.env`):
non serve toccare codice.

## Requisiti sul VPS

- Linux (Ubuntu/Debian consigliato)
- Python **3.11+** (`python3 --version`)
- MySQL o MariaDB
- Accesso in uscita verso: football-data.co.uk, understat.com,
  transfermarkt.com, mondopengwin.it, api.anthropic.com, telegram.org
- **Timezone**: impostare `Europe/Rome` (`timedatectl set-timezone Europe/Rome`).
  Gli orari delle partite nel DB sono orari italiani: le finestre degli agenti
  (S1/S2) e i cron le assumono tali.

## 1. Copia del progetto

```bash
# sul VPS
sudo mkdir -p /var/www/tigertips && cd /var/www/tigertips
# copia dal PC (da Windows, con scp o WinSCP): tutta la cartella Tigertips
# ESCLUSI: data/raw (ricostruibile, pesante), __pycache__, logs
```

Poi ambiente Python:

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

## 2. Configurazione

```bash
cp .env.example .env
nano .env      # DB_USER/DB_PASSWORD del VPS + chiavi API
```

Sul VPS crea un utente MySQL dedicato (NON usare root senza password come in
locale):

```sql
CREATE USER 'tigertips'@'localhost' IDENTIFIED BY 'una-password-seria';
GRANT ALL PRIVILEGES ON tigertips.* TO 'tigertips'@'localhost';
```

## 3. Migrazione del database

Sul PC locale (WAMP in esecuzione):

```powershell
cd c:\wamp64\bin\mysql\mysql9.1.0\bin      # adatta alla versione
.\mysqldump.exe -u root tigertips > c:\wamp64\www\Tigertips\tigertips_dump.sql
```

Sul VPS:

```bash
mysql -u tigertips -p -e "CREATE DATABASE tigertips CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
mysql -u tigertips -p tigertips < tigertips_dump.sql
```

In alternativa (DB ricostruibile da zero, ~30 min): `download_data.py` →
`import_db.py` → `download_xg.py` → `import_xg.py` → `download_players.py` →
`download_referees.py` → `create_live_tables.py`.

## 4. Sessione Telegram

Il file `telegram.session` è legato alla macchina solo logicamente: **copialo**
insieme al progetto e funziona. Se preferisci una sessione pulita, sul VPS:

```bash
python scripts/telegram_collector.py --login
```

(serve il codice che arriva su Telegram: fallo da terminale interattivo/SSH).

## 5. Cron (equivalenti dei task Windows)

`crontab -e` e aggiungi (adatta il path se diverso):

```cron
# Tigertips — tutte le ore italiane (timezone del server = Europe/Rome)
30 3 * * *      cd /var/www/tigertips && .venv/bin/python scripts/update_results.py >> logs/results.log 2>&1
0 9 * * *       cd /var/www/tigertips && .venv/bin/python scripts/run_daily.py >> logs/cron.log 2>&1
*/15 11-22 * * * cd /var/www/tigertips && .venv/bin/python scripts/run_agents.py --stage S2 >> logs/s2.log 2>&1
```

```bash
mkdir -p /var/www/tigertips/logs
```

Sul PC locale, dopo la migrazione, **disattiva i task Windows** per non avere
due sistemi che scrivono (Task Scheduler → Tigertips Daily / Results / S2 →
Disabilita).

## 6. Verifica post-deploy

```bash
cd /var/www/tigertips && source .venv/bin/activate
python scripts/score_tipsters.py       # legge il DB: se stampa il verdetto, DB ok
python scripts/sync_fixtures.py        # rete + scrittura DB
python scripts/daily_picks.py          # catena modello completa
python scripts/run_agents.py --stage S1   # dispatcher (esce muto se nessuna partita)
tail -f logs/cron.log                  # dopo il primo giro schedulato
```

## Note operative

- **Chiavi**: se il progetto passa per repository o altri PC, rigenera
  ANTHROPIC_API_KEY dalla console Anthropic (la attuale ha girato in chiaro).
- **Peso DB**: ~30 MB con tutto lo storico; il dump si trasferisce in secondi.
- **data/raw**: è solo cache dei download (CSV, HTML Transfermarkt, foto
  Telegram). Non serve migrarla; si ripopola da sola se un giorno rilanci i
  downloader storici.
- **Il sito PHP** leggerà le tabelle: `daily_picks` (pronostici a fasce),
  `matches`+`teams`+`leagues` (storico e calendario), `tips`+`tipsters`
  (tribunale), `agent_signals`/`predictions` (pipeline live),
  `player_stats`, colonna `matches.referee` (profili arbitro).
