====== Proposer des sites mutualisés ======
**Problématique de base** : nous offrons la possibilité d'avoir son site web sur nos serveurs. Assos ou particuliers (et Yann et Zat ont pleeeein de sites à transférer).
Tant qu'il y avait une ou deux organisations avec peu de site ça allait, mais ça explose vite, et on ne peux pas laisser accès à "tout, tout le monde" ni administrer tout entièrement. La solution serait donc de proposer quelque chose façon "mutualisé" : la possibilité de gérer son propre espace web et ses propres domaines.
**Exploration des possibles** : j'ai regardé divers logiciels (dont Froxlor), malheureusement ils me semblent mal adaptés dans notre cas. Mais cela m'a permis de revoir nos besoins.
On veut permettre l'hébergement de trucs en html/css/php/js, guère plus. S'il y a des sites plus complexes, on passe à d'autres besoins. On peut potentiellement permettre de lier à des bases de données (mariadb etc), mais pour le moment je n'ai pas intégré ça dans la structure.
* Chaque utilisatrice gère son dossier et son organisation (accès sftp ?). Et pas celui des voisines.
* à voir si on laisse les users bidouiller apache/nginx, a priori ça risque surtout de créer des soucis donc je dirais que non.
* Identité et accès centralisé => via LDAP, qui sera interrogé par PAM.
* Gestion des quotas etc (idem grâce à l'interrogation de champs dans LDAP, et "setquota")
* Notifications si les limites de quota sont atteintes et si l'adhésion est expirée
A priori, on nous dira "je veux un site pour machin.exemple.org". On lancera un script qui fera "tout" et donnera donc accès à cet espace sftp où poser les fichiers de son site. Certficat let'encrypt géré de notre côté. L'utilisatrice a ensuite accès à une interface web avec la liste de son/ses site(s), que mettre dans son dns, son quota disque.
Or les solutions existantes proposent plus... trop ! Mail, DNS, entre autre, et ça fiche un bazar monstre. Donc je prévois de créer la solution maison.
===== Interface utilisatrice =====
C'est quelque chose qui va être à construire de toute façon (hors mutualisé).
Il existe des logiciels permettant de construire des tableaux de bord maison, je pense m'appuyer sur ça. Par exemple (pas testé) :
* https://homer-demo.netlify.app/
* https://dashy.to/
=> ou pas. Parce que c'est encore des trucs qui font le café, en demandant d'installer des milliards de trucs. On a assez de compétences pour faire ce qu'il faut avec un peu de php ?
Certaines infos s'obtiendront en interrogeant l'annuaire LDAP. Connexion via SSO.
Ce qui doit être affiché :
* L'état de son adhésion (lien Paheko ?)
* Gérer son profil (mail, mot de passe, identifiant)(Lien LDAP)
* Liste de ses "données" (autant que possible)
* RGPD, laisser les gens gérer et voir ce qu'ils ont chez nous
* Formules : combien d'espace disque possible
* par exemple combien d'espace il reste sur tel et tel service ?
* Lien vers les divers services
* Service "sites mutualisés" :
* Liste des sites
* Infos sur ce qu'il faut mettre dans les DNS (et état de ces derniers via un bouton "vérifier" ?).
===== Interface administratrice =====
* Voir l’état des comptes (statut de l'adhésion, quotas, accès et droits)
* Gestion du cycle de vie des comptes :
* Suspendre ou archiver des comptes
* Liste des comptes ayant encore des données mais archivés. Mesure temporaire (pour réactiver si besoin), pas d'archivage "ad vitam". Durée de rétention ? 6 mois ? Un an ?
* Prévenir les gens de l'arrivée des échéances, automatiquement
* champ adhesion_expiry dans ldap, vérifié par un script externe ?
* Le côté associatif/tresorerie à séparer ?
===== Scripts =====
Il me semble aussi simple d'avoir des script bash qui sont appelés suivant les besoins. On ne fait pas des sites complètement sans intervention admin, puisqu'on est entre humains et non dans des relations clients.
==== Initialisation et mise à jour de l'espace utilisatrice ====
- Vérifier que l'utilisatrice existe (ldapsearch) et qu'elle a le droit d'avoir un espace "site"
- Vérifier si elle existe et fait partie des bons groupes sur le système et sinon, le faire (changement de droit ou création)
- Vérifier que l'arborescence par défaut existe et la créer
- /home/gudule/
├── www/ → racine web
├── logs/ → logs apache
├── private/ → trucs pas publiques
└── conf/ → vhost customisable ?
- Vérifier/Restreindre l'accès
- accès SFTP chrooté (via Match Group dans sshd_config)
- Initialiser un quota disque
- ''setquota -u gudule 15000000 16000000 0 0 /home/gudule/'' (à vérifier)
- Vérifier les permissions des dossiers (750, chown gudule:webusers, etc.)
=== Expiration ===
Si l'utilisatrice n'est plus membre de webuser ou que sa date d'expiration est dépassée :
* Désactivation du site web sur apache (''a2dissite exemple.org'')
* Ne pas effacer les données dans la foulée, laisser quelques mois (que les gens aient le temps de dire "hey j'avais juste oublié !). Mais quel test mettre pour savoir depuis quand c'est "down" ?
* Indiquer dans l'interface admin
==== Déploiement d'un site ====
Sans doute avec un mix Ansible/Bash.
- Vérifier que l'utilisatrice a les droits etc
- Générer la redirection SSL Passthrough sur le Nginx du proxy, relancer Nginx.
- Générer un vhost Apache et son certificat SSL.
- Activer le site, vérifier les erreurs, relancer Apache.
Les scripts sont faits en grande partie là-dessus.
Sources pour s'inspirer :
* https://gitnet.fr/deblan/vhost-manager
* https://github.com/YunoHost-Apps/my_webapp_ynh/blob/testing/scripts/install
==== Surveillance des sites ====
Récupérer les infos suivantes :
* que mettre côté dns
* liste de son/ses sites
* quota disque