f92e9425ed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
# Notes de développement
|
|
|
|
## Structure du projet (serveur)
|
|
|
|
```
|
|
/var/www/lan.acegrp.varlog/
|
|
├── public/
|
|
│ ├── index.php # Point d'entrée
|
|
│ ├── route.php # Routeur (actions GET/POST)
|
|
│ └── assets/ # CSS, JS, uploads
|
|
├── templates/ # Vues PHP (incluses via extract() + include)
|
|
│ ├── layout.php
|
|
│ ├── post_form.php
|
|
│ └── post_view.php
|
|
├── src/
|
|
│ ├── db.php # Connexion PDO PostgreSQL
|
|
│ ├── PostManager.php
|
|
│ └── FileManager.php
|
|
├── config/
|
|
│ └── config.php # Charge .env, définit les constantes DB
|
|
└── docs/
|
|
```
|
|
|
|
## Conventions templates
|
|
|
|
Les templates reçoivent leurs variables via `extract()` depuis `route.php`. Toute variable optionnelle (non transmise dans tous les contextes) doit utiliser `??` pour éviter un `Undefined variable` warning :
|
|
|
|
```php
|
|
// Bon
|
|
$dateValue = $published_at ?? date('Y-m-d\TH:i');
|
|
<?= ($published ?? false) ? 'checked' : '' ?>
|
|
|
|
// À éviter
|
|
<?= $published ? 'checked' : '' ?> // Warning si create (pas d'édition)
|
|
```
|
|
|
|
## Permissions serveur
|
|
|
|
PHP-FPM tourne en `www-data`. Les fichiers sensibles (`.env`) appartiennent à `cedrix:www-data 640`. Voir `PROJET.md` § Permissions serveur.
|
|
|
|
## Configuration PHP-FPM recommandée
|
|
|
|
Sur un serveur 2 GB RAM, chaque worker PHP-FPM consomme ~40 MB. Pool recommandé (`/etc/php/8.3/fpm/pool.d/<site>.conf`) :
|
|
|
|
```ini
|
|
pm = dynamic
|
|
pm.max_children = 20
|
|
pm.start_servers = 3
|
|
pm.min_spare_servers = 2
|
|
pm.max_spare_servers = 8
|
|
```
|
|
|
|
Symptôme de saturation : `server reached pm.max_children` dans `/var/log/php8.3-fpm.log`.
|
|
|
|
## Protection contre les bots (anciennes URLs DokuWiki)
|
|
|
|
Les anciens sites migrés depuis DokuWiki reçoivent du trafic de bots sur `/lib/`, `/doku.php`, etc. Utiliser `RedirectMatch 410` dans Apache plutôt que `Require all denied` — le 410 "Gone" est un signal définitif qui pousse les moteurs à retirer ces URLs de leur index.
|
|
|
|
```apache
|
|
# Dans le VirtualHost
|
|
RedirectMatch 410 "^/(lib|doku\.php|feed\.php|install\.php|_media|_detail)(/.*)?$"
|
|
```
|
|
|
|
Un 403 ("accès refusé") est ignoré par les bots sérieux qui continuent de réessayer. Un 410 ("disparu définitivement") les fait arrêter.
|