# Guide de déploiement — Apache

Ce guide couvre le déploiement de l'application (Laravel 12, PHP ^8.2, Filament 3.2, MySQL, Vite) sur un serveur de production utilisant **Apache** (pas Nginx).

## Points clés

- Queue en base de données (`QUEUE_CONNECTION=database`) — un `queue:work` doit tourner en superviseur pour les mails et l'inscription newsletter (Mailchimp).
- `public/.htaccess` est déjà présent et prêt pour Apache (rewrite, gzip, cache navigateur, blocage des fichiers cachés).
- Il n'y a pas de `.env.example` versionné : le `.env` de production doit être créé à la main sur le serveur.

## 1. Prérequis serveur

Extensions PHP nécessaires :

```bash
php -m | grep -E "mbstring|openssl|pdo_mysql|tokenizer|xml|ctype|json|fileinfo|curl|bcmath|gd|intl"
```

Modules Apache à activer :

```bash
sudo a2enmod rewrite deflate expires headers
sudo systemctl restart apache2
```

## 2. VirtualHost Apache

Le document root doit pointer vers `public/`, **jamais** la racine du projet (sinon `.env`, `app/`, etc. seraient exposés) :

```apache
<VirtualHost *:80>
    ServerName obvious-way.com
    ServerAlias www.obvious-way.com
    DocumentRoot /var/www/obvious-way/public

    <Directory /var/www/obvious-way/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/obvious-way-error.log
    CustomLog ${APACHE_LOG_DIR}/obvious-way-access.log combined
</VirtualHost>
```

`AllowOverride All` est indispensable : c'est ce qui permet au `.htaccess` de `public/` de fonctionner (rewrite vers `index.php`).

Puis HTTPS (recommandé/obligatoire) via Certbot :

```bash
sudo certbot --apache -d obvious-way.com -d www.obvious-way.com
```

## 3. Déployer le code

```bash
cd /var/www
git clone <votre-repo> obvious-way
cd obvious-way
```

Le dépôt `Guichet` peut contenir plusieurs projets (`ICEFLEX`, `obvious_way`) : ne déployez que le sous-dossier `obvious_way`, ou utilisez un repo dédié à ce projet.

## 4. Créer le `.env` de production

```env
APP_NAME="Obvious Way"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://obvious-way.com
APP_KEY=                     # généré à l'étape suivante

APP_LOCALE=fr
APP_FALLBACK_LOCALE=fr
APP_TIMEZONE=Europe/Paris

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=obvious_way
DB_USERNAME=<user_prod>
DB_PASSWORD=<mot_de_passe_fort>

SESSION_DRIVER=database
QUEUE_CONNECTION=database
CACHE_STORE=database

MAIL_MAILER=smtp
MAIL_HOST=<votre_smtp_prod>
MAIL_PORT=587
MAIL_USERNAME=<...>
MAIL_PASSWORD=<...>
MAIL_FROM_ADDRESS=<...>
MAIL_FROM_NAME="${APP_NAME}"

CONTACT_MAIL_TO=<email_reception_contact>

MAILCHIMP_API_KEY=<clé_prod> (à demander)
MAILCHIMP_AUDIENCE_ID=<audience_prod> (à demander)

GOOGLE_ANALYTICS_ID=G-DDCM3WZR49
```

`APP_DEBUG=false` est impératif en production : à `true`, les erreurs exposent la stack trace complète (chemins serveur, requêtes SQL) à n'importe quel visiteur.

## 5. Installer et builder

```bash
composer install --no-dev --optimize-autoloader
php artisan key:generate
npm ci
npm run build
```

`--no-dev` exclut Pest/PHPUnit/Pint du serveur de production.

## 6. Base de données et stockage

```bash
php artisan migrate --force
php artisan storage:link
php artisan db:seed --force   # sur une base vierge(necessaire pour les donnees pardefaut du site)
```

## 7. Caches de production

```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
```

À refaire après chaque déploiement (`php artisan config:clear` avant si vous modifiez `.env`).

## 8. Permissions fichiers

```bash
sudo chown -R www-data:www-data /var/www/obvious-way
sudo find /var/www/obvious-way/storage -type d -exec chmod 775 {} \;
sudo find /var/www/obvious-way/bootstrap/cache -type d -exec chmod 775 {} \;
```

## 9. Worker de queue

`QUEUE_CONNECTION=database` nécessite un process persistant. Avec Supervisor :

```ini
# /etc/supervisor/conf.d/obvious-way-worker.conf
[program:obvious-way-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/obvious-way/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/obvious-way/storage/logs/worker.log
```

```bash
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start obvious-way-worker:*
```

## 10. Créer le compte admin Filament

```bash
php artisan tinker
>>> \App\Models\User::create(['usr_nom' => 'Votre Nom', 'usr_email' => 'admin@obvious-way.com', 'usr_password' => bcrypt('mot_de_passe_fort')])
```

Adaptez les noms de champs à votre modèle `User` réel si besoin.

## Checklist de mise à jour (déploiements suivants)

```bash
git pull
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache
sudo supervisorctl restart obvious-way-worker:*
```
