====== Hébergement web ======
=== Architecture ===
Sur loth, un serveur apache en frontal (port 80 et 443) servant de reverse proxy vers les instances de chaque adherent. Il s'occupe également de la partie ssl
1 adhérent (qui en fait la demande) => 1 compte utilisateur => 1 instance apache (/etc/apache2-ADHERENT) => 1 pool php (/etc/php/8.1/fpm/pool.d/ADHERENT.conf)
tous les process tournent avec l'identité de l'adhérent, pour un cloisonnement optimal.
Le déploiement se fait automatiquement par ansible
===== Mettre en place un nouvel hébergement =====
=== Prérequis ===
Cloner CS_CT/ansible_hadoly.git
Le nom de domaine à héberger doit être associé via un CNAME à [[documentation_technique:machines:loth|loth.hadoly.fr]]
=== Création du playbook ===
Sur la base du modèle suivant:
---
# fichier webhosting.yml
- hosts: loth.hadoly.fr
vars:
adherent_login: CHANGEME
adherent_password: CHANGEME
apache_server_name: CHANGEME
certbot_domains:
- "{{ apache_server_name }}"
certbot_email: CHANGEME
certbot_test: true
certbot_docroot: /srv/tom/www/
certbot_services: [ apache2 ]
roles:
- hebergementweb
- tconstans.certbot
On peut ensuite lancer le playbook:
admin/ansible> ansible-playbook -u thomas -K webhosting.yml
Ce playbook va:
- créer un compte utilisateur (todo: utiliser ldap)
- créer un répertoire personnel pour cet utilisateur
- créer une instance apache qui va tourner avec l'identité de cet utilisateur, sur un port dédié
- créer un pool php en version 8, dédié à l'utilisateur
- créer une base de donnée du nom de l'utilisateur, avec le mot de passe
- configure le serveur web principal qui sert de reverse
- créé et déploie un certificat letsEncrypt
Des fois ça ne marche pas lors de la première exécution, il ne faut pas hésiter à relancer.
=== Supervision ===
Sur zabbix, sur la machine loth il faut:
* reconfigurer le monitoring "check web sites" et rajouter un "steps" concernant le nouveau site, en s'inspirant d'un step existant.
* cloner le trigger "hadoly.fr down" et changer le nom du trigger et l'expression du trigger qui doit ressembler à ça (ex pour hadoly.fr):
''last(/loth/web.test.rspcode[check web sites,alainsaintemarie.fr])<>200last(/loth/web.test.rspcode[check web sites,hadoly.fr])<>200''
=== Axes d'amélioration ===
utiliser l'authentification ldap pour le compte unix de l'adhérent, l'accès à la base de donnée. Cela évitera d'avoir à gérer le mot de passe de l'adhérent
===== Statut =====
WIP
## Notes rapides sur l"'hébergement d'un wordpress:
wp-config.php:
WP_HOME et WP_SITEURL doivent pointer sur le fqdn du site en **http**
```php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
define( 'WP_HOME', 'http://hadoly.fr' ) ;
define( 'WP_SITEURL', 'http://hadoly.fr' ) ;
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
```
config frontal nginx doit inclure la directive:
proxy_set_header X-Forwarded-Proto https;