# ICAVI Gestion — déploiement OVH

## 1. Principe

Déployer le projet avec la racine web pointant vers :

```text
/projet-icavi/public
```

Ne rendez jamais la racine Laravel (`app`, `config`, `storage`, `.env`, etc.) directement accessible par le navigateur.

## 2. Préparer l'hébergement

Installez/activez :

- PHP 8.2+ compatible Laravel 11 ;
- `PDO MySQL` ;
- `mbstring` ;
- `DOM` ;
- `XML` ;
- `cURL` ;
- les autres extensions listées dans `docs/INSTALL_LOCAL.md` ;
- Composer si votre offre permet son exécution, sinon installez les dépendances depuis une machine de build de même environnement PHP et transférez le dossier `vendor`.

Vérifiez depuis le SSH OVH :

```bash
php -v
php -m | egrep 'ctype|curl|dom|fileinfo|filter|hash|mbstring|openssl|pcre|PDO|pdo_mysql|session|tokenizer|xml'
composer --version
```

## 3. Transférer le code

Transférez le ZIP puis extrayez-le hors de `www` si possible :

```text
/home/USER/icavi/
/home/USER/www/  -> document root vers /home/USER/icavi/public
```

Le nom exact de l'arborescence dépend de l'offre OVH.

## 4. Variables d'environnement

Créez `.env` depuis `.env.example` et renseignez les vrais paramètres OVH :

```dotenv
APP_ENV=production
APP_DEBUG=false
APP_URL=https://votre-domaine.tld

DB_CONNECTION=mysql
DB_HOST=...
DB_PORT=3306
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...
```

Ne placez jamais le mot de passe DB dans Git, dans un commit ou dans une capture d'écran.

## 5. Installation PHP

Dans la racine du projet :

```bash
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
php artisan key:generate --force
php artisan storage:link
```

Ne regénérez pas `APP_KEY` sur une application existante déjà chiffrée : conservez la clé actuelle lors d'un redéploiement.

## 6. Base de données

Avant toute opération : faites une sauvegarde de la base OVH.

Pour une première installation : importez `database/import/icaviss3.sql`.

Pour une base issue du dump fourni, appliquez ensuite les migrations :

```bash
php artisan migrate:status
php artisan migrate --force
```

**Ne lancez jamais `migrate:fresh` sur la base de production.**

## 7. Permissions fichiers

Laravel doit pouvoir écrire dans :

```text
storage/
bootstrap/cache/
```

Exemple SSH :

```bash
chmod -R u+rwX storage bootstrap/cache
mkdir -p storage/app/ged
```

Adaptez propriétaire/groupe aux contraintes de l'hébergement OVH. Évitez `chmod 777`.

## 8. Cache de production

Une fois `.env` correct et la base accessible :

```bash
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Puis, si vous utilisez des déploiements automatisés, répétez ces commandes après chaque changement de configuration/routes.

## 9. Tâches périodiques

La configuration de cette version utilise par défaut `QUEUE_CONNECTION=sync`; aucune infrastructure Redis/queue worker n'est donc requise pour le fonctionnement nominal livré.

Si vous activez ultérieurement les queues, configurez un worker persistant et sa supervision au niveau de l'hébergement.

## 10. HTTPS et production

Activez HTTPS sur le domaine OVH. En production :

```dotenv
APP_ENV=production
APP_DEBUG=false
```

Vérifiez que les cookies/session et les URLs générées utilisent le domaine HTTPS réel.

## 11. Smoke test après mise en ligne

Tester successivement :

```text
/                       dashboard
/login                  authentification
/clients                clients
/products               produits
/sales                  ventes
/documents              documents
/ged                    GED
/permissions            permissions
/bons-sortie-caisse     bons de sortie de caisse
/api/health             healthcheck
```

Puis contrôler `storage/logs/laravel.log` et le statut de la base.

## 12. Retour arrière

Conservez avant chaque release :

- le ZIP de la version précédente ;
- un export SQL de la base ;
- la valeur de `APP_KEY` de la version en service ;
- la configuration `.env` hors dépôt.

Pour un rollback applicatif, restaurez d'abord le code compatible avec le schéma actif ; n'exécutez pas automatiquement les migrations `down` sur la base de production.

## 13. PDF / Chrome headless

L'archivage automatique des bons de sortie de caisse appelle Chrome/Chromium. Installez un navigateur headless compatible avec l'environnement OVH ou configurez `CASH_VOUCHER_CHROME_PATH` vers un binaire accessible par l'utilisateur PHP.

Testez avec le compte d'hébergement qui exécute PHP :

```bash
/usr/bin/google-chrome --version
# ou
/usr/bin/chromium --version
```

Un chemin Chrome valide est nécessaire pour que l'archivage PDF automatique fonctionne. La consultation des bons et le reste de l'application ne doivent pas être confondus avec cette dépendance système.
