# Configs VPS Octave (Ubuntu 24.04 LTS)

Configurations versionnées pour l’installation Octave sur un VPS (OVH) via `install_octave.sh` à la racine du projet. L’image Ubuntu 24.04 fournit déjà `ca-certificates`, `curl`, `software-properties-common`, `git` ; le script installe PHP 8.5 (PPA ondrej/php), nginx, wkhtmltopdf, fail2ban, clamav, squid et déploie les configs ci‑dessous (universe activé pour wkhtmltopdf).

## Structure

Les fichiers sous `etc/` sont versionnés. Le script déploie des **liens symboliques** depuis `/etc` vers ces fichiers (pas de copie).

- **etc/nginx/sites-available/octave.template.conf** — Template nginx BO (placeholders `__DOCUMENT_ROOT__`, `__WORDPRESS_PATH__`). WordPress servi sous `/infos/` (alias vers `WORDPRESS_PATH`). Le script génère un fichier nommé selon `NGINX_SITE` et crée un symlink `/etc/nginx/sites-available/<NGINX_SITE>` → ce fichier (dans le dépôt).
- **etc/nginx/sites-available/octave-fo.template.conf** — Template nginx FO (placeholders `__DOMAIN__`, `__DOCUMENT_ROOT__`). Menu « Créer un site nginx pour un domaine FO » : entrée « icade » génère `icade.octave.immo` avec root vers `APP_PATH/apps/front/octave/fo/public` (ou `FO_DOCUMENT_ROOT`). SSL : `certbot --nginx -d <domaine>`.
- **etc/php/8.5/fpm/php.ini-snippet** — Snippet PHP, symlink vers `/etc/php/8.5/fpm/conf.d/99-octave.ini`.
- **etc/php/8.5/fpm/pool.d/octave.conf** — Pool FPM Octave (déployé avec « configs » ou « php-fpm »). Remplace le pool `www` (même socket), inclut proxy Squid pour les requêtes sortantes.
- **etc/fail2ban/jail.local** — Symlink depuis `/etc/fail2ban/jail.local`.
- **etc/clamav/clamd.conf.snippet** — Options ClamAV (à merger selon besoin).
- **etc/squid/squid.conf.minimal** — Symlink depuis `/etc/squid/squid.conf`.

### Squid et trafic PHP (requêtes sortantes)

Squid sert à tracer les connexions HTTP/HTTPS sortantes dans `/var/log/squid/access.log`. **Par défaut, PHP (Laravel `Http::get()`, commandes `php artisan`) n’utilise pas le proxy** : les appels (ex. `https://geo.api.gouv.fr/communes` dans le BO) partent en direct et n’apparaissent pas dans les logs.

Pour que tout le trafic sortant PHP passe par Squid :

1. **PHP-FPM (requêtes web)** : le pool Octave déployé par `install_octave.sh` (option « configs » ou « php-fpm ») contient déjà `env[HTTP_PROXY]` et `env[HTTPS_PROXY]`. Il remplace le pool `www` (même socket), aucune modification nginx nécessaire.
2. **PHP-CLI (`php artisan`, cron)** : exporter les variables avant la commande, par ex. `export HTTP_PROXY=http://127.0.0.1:3128 HTTPS_PROXY=http://127.0.0.1:3128` dans la session ou le script cron.

Pour les requêtes **HTTPS**, Squid ne log que le host et le port (ex. `CONNECT geo.api.gouv.fr:443`), pas le chemin (`/communes`), sauf mise en place d’un SSL bump (non couvert ici).

## Utilisation

À la racine du dépôt :

```bash
sudo ./install_octave.sh menu   # menu interactif
sudo ./install_octave.sh full   # tout installer
sudo ./install_octave.sh web    # PHP + nginx uniquement
sudo ./install_octave.sh dirs   # appliquer droits sur APP_PATH après déploiement du code
```

Par défaut : `APP_PATH` = répertoire du script, `DOCUMENT_ROOT` = `APP_PATH/apps/front/octave/bo/public`, `NGINX_SITE` = `www.octave.immo`. Variables : `APP_PATH`, `DOCUMENT_ROOT`, `NGINX_SITE`, `APP_USER`, `WEB_USER` (voir `./install_octave.sh --help`).

### Prod / Préprod

Même template, nom du site et racine document configurables :

| Environnement | NGINX_SITE | DOCUMENT_ROOT (ex.) |
|---------------|------------|----------------------|
| **Prod** (BO + WordPress) | `www.octave.immo` (défaut) | `APP_PATH/apps/front/octave/bo/public` |
| **Prod** (FO Icade) | `icade.octave.immo` | `APP_PATH/apps/front/octave/fo/public` (ou chemin FO Icade) |
| **Préprod** (BO) | `preprod.octave.immo` | idem relatif au dépôt préprod |
| **Préprod** (FO Icade) | `preprod-icade.octave.immo` | idem FO préprod |

Exemple préprod BO : `NGINX_SITE=preprod.octave.immo DOCUMENT_ROOT=/home/ubuntu/preprod.octave.immo/apps/front/octave/bo/public sudo -E ./install_octave.sh config`. Pour un site FO (ex. Icade) : menu option **8** ou `sudo ./install_octave.sh fo icade` (génère `icade.octave.immo`). Variable `FO_DOCUMENT_ROOT` pour surcharger la racine (défaut : `APP_PATH/apps/front/octave/fo/public`). SSL : `certbot --nginx -d icade.octave.immo`.

## Test en Docker (simulation prod)

Conteneur Ubuntu 24.04 avec systemd pour valider le script sans VPS réel. **Docker doit être démarré.**

À la racine du dépôt :

```bash
./infra/octave-vps/run-install-in-docker.sh
```

Ou manuellement :

```bash
docker compose -f infra/octave-vps/docker-compose.yml up -d
sleep 15
docker compose -f infra/octave-vps/docker-compose.yml exec vps bash -c "cd /workspace && ./install_octave.sh check"
docker compose -f infra/octave-vps/docker-compose.yml exec vps bash -c "cd /workspace && ./install_octave.sh full"
```

Arrêt : `docker compose -f infra/octave-vps/docker-compose.yml down`

## Après installation

1. Quand le projet est dans le dépôt (ex. `/home/ubuntu/www.octave.immo`), `APP_PATH` et `DOCUMENT_ROOT` pointent par défaut sur ce dépôt et `apps/front/octave/bo/public`.
2. Exécuter `sudo ./install_octave.sh dirs` pour appliquer les droits (storage/cache en écriture pour www-data).
3. Dans `apps/front/octave/bo` et `fo` : `composer install`, `.env`, `php artisan key:generate`, `php artisan storage:link`, migrations.
4. Adapter `server_name` dans le template nginx (fichier versionné) et SSL (Certbot) si besoin.
