# Deploy di Mostry su OVH (hosting web, via SFTP)

Obiettivo: il dominio `mizunokame24.ovh` deve servire dalla cartella **`public/`** di Symfony,
tenendo il resto del codice **fuori** dal web (più sicuro). Su OVH si ottiene così:

```
/home/mizunos/                  ← la tua home FTP (qui carichi il progetto)
├─ www/                         ← cartella PUBBLICA servita dal dominio
│   ├─ index.php                (contenuto di public/)
│   ├─ .htaccess                (contenuto di public/)
│   ├─ css/  js/  bundles/      (contenuto di public/)
├─ src/  config/  templates/  vendor/  bin/  var/   ← codice, NON pubblico
├─ .env
├─ .env.local                   ← lo crei tu sul server (vedi sotto)
└─ .ovhconfig                   ← imposta PHP 8.3
```

Perché funziona: `www/index.php` fa `require dirname(__DIR__).'/vendor/...'` →
`dirname(__DIR__)` = `/home/mizunos` = dove stanno `vendor/`, `config/`, ecc. Nessuna modifica al codice.

## 1. Cosa caricare via SFTP (host ftp.cluster121.hosting.ovh.net, porta 22, utente mizunos)
- Carica **il contenuto della cartella `public/`** dentro `/home/mizunos/www/`
  (cioè `index.php`, `.htaccess`, `css/`, `js/`, e `bundles/` se presente).
- Carica **tutto il resto del progetto** in `/home/mizunos/` (accanto a `www/`):
  `src/ config/ templates/ vendor/ bin/ migrations/ .env .ovhconfig composer.json composer.lock symfony.lock`
- **NON caricare**: la cartella `public/` come cartella (il suo contenuto va in `www/`),
  `var/cache/`, `var/log/`, `var/data_dev.db`, `.git/`, `.env.local` (quello locale è di sviluppo).
- **Crea** una cartella vuota `/home/mizunos/var/` (scrivibile): Symfony ci scrive cache e log.

## 2. Imposta PHP 8.3
Il file `.ovhconfig` (già incluso) lo fa. In alternativa/ conferma: pannello OVH →
Web Cloud → Hosting → scheda **PHP** → versione **8.3**.

## 3. Database MySQL
1. Pannello OVH → Hosting → scheda **Database** → **Crea un database** (MySQL).
2. Apri **phpMyAdmin**, seleziona il DB → **Importa** → carica `mostry_schema.sql`.
3. Segna server, nome DB, utente, password.

## 4. Crea `.env.local` sul server (in `/home/mizunos/.env.local`)
Contenuto (riempi i TUOI valori; questo file NON è pubblico ed è fuori da `www`):
```
APP_ENV=prod
APP_DEBUG=0

DATABASE_URL="mysql://UTENTE:PASSWORD@SERVER:3306/NOMEDB?serverVersion=10.11.2-MariaDB&charset=utf8mb4"

MOSTRY_ENCRYPTION_KEY='<genera 32 byte base64: php -r "echo base64_encode(random_bytes(32));">'

MAILER_DSN=smtp://mostry%40mizunokame24.ovh:PASSWORD_CASELLA@ssl0.ovh.net:465?encryption=ssl
MOSTRY_MAIL_FROM='mostry@mizunokame24.ovh'

# Stripe: per ora test, poi live. Il webhook secret è quello dell'ENDPOINT sul dominio (vedi punto 6).
STRIPE_SECRET_KEY='sk_test_...'
STRIPE_WEBHOOK_SECRET='whsec_...'

# Turnstile: in prod metti le TUE chiavi Cloudflare (le test vanno bene per iniziare)
TURNSTILE_SITE_KEY='...'
TURNSTILE_SECRET_KEY='...'

# WhatsApp (quando lo attivi)
WHATSAPP_VERIFY_TOKEN='una-stringa-tua'
WHATSAPP_ACCESS_TOKEN=''
WHATSAPP_API_VERSION='v21.0'
```

## 5. Primo avvio
Apri `https://mizunokame24.ovh`. Symfony compila la cache al primo caricamento (serve `var/` scrivibile).
Se vedi errore 500: quasi sempre è `var/` non scrivibile o `DATABASE_URL` errato.

## 6. Webhook Stripe di PRODUZIONE
Nel dashboard Stripe → Sviluppatori → Webhook → **Aggiungi endpoint**:
`https://mizunokame24.ovh/stripe/webhook`, eventi `checkout.session.completed`, `invoice.paid`,
`invoice.payment_failed`, `customer.subscription.deleted`. Copia il `whsec_...` che ti dà e
mettilo in `.env.local` come STRIPE_WEBHOOK_SECRET. (La Stripe CLI NON serve in produzione.)

## Ottimizzazione (facoltativa, richiede di rifare l'upload di vendor)
In locale: `composer install --no-dev --optimize-autoloader` → vendor più leggero per la prod.
Poi per tornare a sviluppare: `composer install`.
