Domaine type
J'ai intégré le principe de "Type de domaine" (Panneau administrateur/Manage domain type). Un type de domaine contient plusieurs informations :
- entrée DNS nécessaire
- actif ou pas ?
- quel type d'info doit donner l'utilisateur ? Un répertoire local, une ipv4, une ipv6, un texte libre, rien du tout ?
- sa compatibilité. Ce type de domaine peut co-exister avec quels autres type de domaine sur un même sous domaine ? Par exemple, une adresse ipv4 et une redirection web ne peuvent pas toute les deux pointer sur un même sous-domaine, mais une ipv6 et une ipv4 peuvent pointer sur un même sous-domaine. La liste des type compatible est indiqué "à la mano", séparé par des virgules. Ca a le droit de ne pas être intuitif : ca n'est utilisé que par l'administrateur, et il sait ce qu'il fait.
- le serveur doit-il être le serveur DNS du domaine pour autorisé ce type de domaine ?
La liste de type de domaine défini dynamiquement le formulaire d'édition des domaines.
La conf apache appliqué au type de domaine est dépendante du nom du type de domaine. Le type de domaine webmail par exemple applique pour le sous-domaine choisi par l'utilisateur le template apache host_webmail.conf .
Le bouton regenerate permet de demander une régénération de tout les DNS et les conf apache d'un type de domaine. Utile si, par exemple, on a modifié le template apache. Exemple de cas concret : on veut interdire de naviguer dans les répertoire .svn des répertoire locaux des utilisateur. On change le template apache des type de domaine demandant à pointer sur un répertoire local, et on clique "regenerate" dans l'interface web.
Modification des tables domaines et sub_domaines
Déjà, je dégage les table *_standby. Parce que.
Domaines récupère deux nouvelles colonne :
- dns_action : OK aucune action n'est nécessaire, UPDATE si il faut mettre à jour le DNS, DELETE si il faut tout supprimer le domaine et ses sous-domaine
- dns_result : permet de récupérer la valeur de retour du script, et donc d'avoir une idée de si ca a marché, ou pas, et pourquoi
Sub_domaines récupère trois nouvelles colonnes :
- web_action : OK si aucune action n'est nécessaire, UPDATE si il faut mettre à jour la conf web, DELETE si il faut supprimer la conf web (et, par la même occasion, l'entrée DNS)
- web_result : voir dns_result, plus haut
- enable : ENABLE si il faut activer le sous domaine, ENABLED si il est activé, DISABLE si il faut le désactiver et DISABLED si il est désactivé
Update_domains
Update domains est devenu excessivement stupide.
Il se contente de regarder dans la DB quelles sont les opérations qu'il doit effectué, lance la procédure pour l'effectuer et note dans la table que l'action est faite, et la valeur de retour de la fonction qui l'a effectué (permet d'avoir une remonté d'erreur dans l'interface web)
A la fin, il concatène dans un seul fichier tout les fichiers de conf Web, afin d'éviter de surcharger apache avec 7542145 fichiers (ca a une énorme incidence sur ses perfs, cf Lautre.net)
Cas particulier : les enregistrements de type 'only-dns'
Pour ces enregistrements il n'y a pas besoin de lancer des hooks ou quoi que ce soit d'autre, seul le dns a besoin d'être régénéré: c'est le script Function_dns.sh qui s'en occupe. On se contente donc de mettre à jour l'enregistrement de la BDD (le supprimer si 'delete' demandé, l'activer si 'ENABLE' demandé, ...)
Si quelqu'un veut créer un hook sur un enregistrement 'only-dns', il lui suffira de décocher l'option 'Do only a DNS entry' (Section "Edit a domain type" du menu "Admin Control Panel" ) et écrire son joli hook au bon endroit.
Functions.sh
Complétement épuré. Ho yeah baby.
Function_dns.sh
Bon, zieutons :
$TTL 1D
;
; BIND data file for domain test.fr
;
;; This file is automatically regenerate by Alternc
;; Please insert your manual entry after the last comment.
;; If you want to forbid automatic generation, change the LOCKED var
;; LOCKED:NO
;
@ IN SOA pan.coin.org. root.pan.coin.org. (
2011013004 ; serial
21600 ; refresh (6h)
3600 ; retry (1h)
604800 ; expiry (7d)
86400 ) ; RR TTL (24h)
IN NS pan.coin.org.
IN MX 5 pan.coin.org.
@ IN A 1.2.3.44
www IN A 88.191.80.31
www IN AAAA 2001:0910::0
;;; END ALTERNC AUTOGENERATE CONFIGURATION
manual IN A 10.10.10.10
Le fichier de conf DNS est entièrement régénéré à chaque fois qu'on le modifie. Sauf si on a spécifié LOCKED:YES dedans, dans ce cas là alternc n'y touche pas et laisse les humains jouer avec. Si on souhaite avoir des entrée manuelle dedans, il suffit de les rajouter après la ligne de fin de conf autogénérée.
La régénération systématique entière ne prend pas plus de performance : ca continue à être une seule requête SQL, et il toujours nécessaire de toucher au "header" pour bouger le serial.
Avantage : bouger les TTLs deviens très rapide : on change le template, et on tapote "update domaines set dns_action='UPDATE';" et c'est fait.
Functions_hosting.sh
Script bash permettant d'appeler les fonction de création, suppression, activation et désactivation des conf apache de hosts spécifique. Le script applique le template apache spécifique au type de domaine en se basant au type spécifié.
Des hooks sont intégré :
- avant la création
- a la fin de la création
- a l'activation
- a la désactivation
- avant la suppression
Dans chaque cas, la fonction regarde si un script nommé hosting_TYPE.sh (ou TYPE est le type de domaine) existe. Si il existe, il est appelé avec en parametre l'action à effectué, le sous domaine concerné (et les autres info qu'on peut avoir). Par exemple : hosting_vhost.sh create toto.example.fr /var/alternc/html/a/admin/toto-example-fr/ .
Interface utilisateur
L'utilisateur à maintenant une vision de quelles opération sont en attente, ou si elles ont été effectué. Avec les valeurs de retour maintenant dispo en DB, on va même pouvoir rajouter si il y a eu une erreur, quelle est l'erreur.
Il peut aussi activer/désactiver des sites/entrée DNS, sans devoir les supprimer.
Exemple d'ajouts de fonctionnalités
Si je désire permettre aux gens de rajouter une entrée SPF, je rajoute dans les domaines type une entrée de cette manière :
- name : spf
- description : "Type here your SPF entry"
- target : TXT
- entry : %SUB% IN SPF "%TARGET%"
- compatibility : txt,cname,ip,ipv6,local
- enable : true
- only_dns : true
- need_dns : true
Et je modifie les autre domaines_type pour indiquer lesquels peuvent co-exister avec un type SPF.
Si je désire permettre quand même du mass virtual hosting, je cré un domaine_type :
- name : massvhost
- description : "To have a website with mass virtual hosting technologie"
- target : DIRECTORY
- entry : %SUB% IN A @@PUBLIC_IP@@
- compatibility : txt,spf
- enable : true
- only_dns : false
- need_dns : false
Puis, je crée un script hosting_massvhost.sh qui agit ainsi :
- au parametre CREATE, il crée un lien symbolique pour le domaine indiqué en parametre vers le repertoire indiqué aussi en parametre
- au parametre DELETE, il supprime le lien symbolique du domaine passé en parametre
- au parametre ENABLE, il agit comme pour CREATE
- au parametre DISABLE, il agit comme pour DELETE
A chaque fois, le script doit quitter avec un code de retour supérieur à 10, ainsi il indique au script de ne pas lancer d'autres procédure que les siennes.
