Vhosts Apache & multisite Telaria
Prérequis : stack web installée (
02-stack-web.md), TLS configuré (04-tls-https.md). Telaria est une application multisite : un seul déploiement Symfony sert plusieurs domaines avec des contenus distincts, grùce auSiteResolverdu bundletlr-symfony.
1. Structure des répertoires
/var/www/
âââ telaria/
âââ public/ â document root Apache (index.php)
âââ src/
âââ templates/
âââ var/
â âââ cache/ â chown www-data
â âââ log/ â chown www-data
â âââ rag/ â index SQLite kNN (www-data + setgid)
âââ vendor/
âââ .env
âââ .env.local â secrets (non versionnĂ©, non commitĂ©)
Permissions correctes :
sudo chown -R ubuntu:www-data /var/www/telaria sudo find /var/www/telaria -type d -exec chmod 750 {} \; sudo find /var/www/telaria -type f -exec chmod 640 {} \; # var/ : www-data doit pouvoir écrire (cache, logs, sessions) sudo chown -R www-data:www-data /var/www/telaria/var sudo chmod -R ug+rwX /var/www/telaria/var
2. Vhost type â HTTP + HTTPS
Un vhost se décompose toujours en deux blocs :
- HTTP (port 80) : redirige vers HTTPS (301)
- HTTPS (port 443) : sert l'application
# /etc/apache2/sites-available/telaria.conf <VirtualHost *:80> ServerName telaria.dev ServerAlias www.telaria.dev RewriteEngine On RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </VirtualHost> <VirtualHost *:443> ServerName telaria.dev ServerAlias www.telaria.dev Protocols h2 http/1.1 DocumentRoot /var/www/telaria/public <Directory /var/www/telaria/public> AllowOverride None Require all granted FallbackResource /index.php </Directory> # PHP-FPM via socket UNIX <FilesMatch "\.php$"> SetHandler "proxy:unix:/run/php/php8.5-fpm.sock|fcgi://telaria.dev" </FilesMatch> # TLS SSLEngine on SSLCertificateFile /etc/letsencrypt/live/telaria.dev/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/telaria.dev/privkey.pem # OCSP Stapling SSLUseStapling On # Logs ErrorLog ${APACHE_LOG_DIR}/telaria.dev-error.log CustomLog ${APACHE_LOG_DIR}/telaria.dev-access.log combined </VirtualHost>
sudo a2ensite telaria.conf sudo systemctl reload apache2
3. Multisite â comment Telaria sert plusieurs domaines
Telaria implĂ©mente le multisite via le bundle tlr-symfony : chaque requĂȘte HTTP est interceptĂ©e par un SiteResolver qui identifie le site courant Ă partir du Host header.
Principe
RequĂȘte HTTP â Apache â Symfony â SiteResolver
â
lit Host: telaria.dev
â
rĂ©sout â entitĂ© Site
â
injecte SiteContext
â
controllers, templates, CMS
adaptent leur réponse au site
Un seul vhost Apache â tous les sous-domaines
Le certificat wildcard *.telaria.dev couvre tous les sous-domaines. Apache les attrape tous avec un ServerAlias wildcard :
<VirtualHost *:443> ServerName telaria.dev ServerAlias *.telaria.dev # ... mĂȘme config PHP-FPM, mĂȘme DocumentRoot # C'est Symfony (SiteResolver) qui diffĂ©rencie les sites, pas Apache </VirtualHost>
Entité Site en base de données
Chaque site est une ligne dans la table site :
| id | host | name | active |
|---|---|---|---|
| 1 | telaria.dev | Telaria | true |
| 2 | docs.telaria.dev | Telaria Docs | true |
Le SiteResolver fait une requĂȘte Doctrine sur le Host header â retourne le Site courant â injecte un SiteContext dans les services qui en ont besoin (CMS, templates, etc.).
CMS multi-domaines
Le bundle tlr-symfony fournit un moteur CMS (CmsContent, CmsPage) scopĂ© par site. Chaque CmsPage appartient Ă un Site. Une URL canonique custom peut ĂȘtre dĂ©finie par page (feature F3).
4. Vhosts versionnĂ©s â tlr-vhosts
Les fichiers de configuration Apache ne sont pas modifiés directement sur le serveur : ils sont versionnés dans le dépÎt tlr-vhosts et déployés via Ansible (tlr-ansible).
tlr-vhosts/ âââ telaria.conf â vhost telaria.dev âââ adoption.conf â vhost adoption.lan (prĂ©prod) âââ ...
Le rĂŽle Ansible system copie les fichiers .conf vers /etc/apache2/sites-available/ et appelle a2ensite. Modification d'un vhost = commit dans tlr-vhosts + ansible-playbook.
5. Activer / recharger
# Activer un site sudo a2ensite telaria.conf sudo systemctl reload apache2 # Désactiver un site sudo a2dissite telaria.conf sudo systemctl reload apache2 # Tester la config avant reload sudo apache2ctl configtest sudo apachectl -t -D DUMP_VHOSTS
6. Diagnostics
# Vérifier que le vhost répond curl -I https://telaria.dev curl -I --http2 https://telaria.dev # vérifier HTTP/2 # Vérifier le bon vhost résolu sudo apachectl -t -D DUMP_VHOSTS | grep telaria # Logs en temps réel sudo tail -f /var/log/apache2/telaria.dev-error.log
Ătape suivante : 04-tls-https.md