Version 5 — Janvier 2008 — 82.254.xx.xx
Consulter au préalable « La mutualisation facile »
La mise en place d’un service d’hébergement nécessite un panneau de gestion des utilisateurs et des services associés. Cette note a pour objet d’exploiter l’excellente « mutualisation facile de sites SPIP spip » pour la mise en place d’un service d’hébergement mutualisé de sites SPIP spip .
Ce qui est proposé ici :
Pour héberger des sous-domaine en mondomain.tld, il suffit d’insérer dans la zone DNS un enregistrement utilisant le joker pour faire pointer tous les sous-domaines vers l’adresse IP x.x.x.x
* 10800 IN A x.x.x.x
Ainsi tous les sous-domaines en mondomain.tld pointent vers un SPIP spip potentiel.
spip}
Configuration de spip/config/mes_options.php
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
require _DIR_RACINE.'mutualisation/mutualiser.php';
$site = str_replace('www.', '', $_SERVER['HTTP_HOST']);
if ($site != $_SERVER['HTTP_HOST']) {
include_spip('inc/headers');
redirige_par_entete('http://'.$site.'/');
}
define('_DIR_PLUGINS', _DIR_RACINE . 'spip/' . $site . '/plugins/');
define ('_INSTALL_SERVER_DB', 'mysql');
define ('_INSTALL_HOST_DB', 'localhost');
define ('_INSTALL_USER_DB_ROOT', 'root');
define ('_INSTALL_PASS_DB_ROOT', '*******');
define ('_INSTALL_NAME_DB', 'mu_'.prefixe_mutualisation($site));
define ('_INSTALL_TABLE_PREFIX', 'spip');
define ('_INSTALL_PANEL_HOST_DB', 'localhost');
define ('_INSTALL_PANEL_USER_DB', 'root');
define ('_INSTALL_PANEL_PASS_DB', '********');
define ('_INSTALL_PANEL_NAME_DB', 'mutualisation_spip');
define ('_INSTALL_PANEL_NAME_TABLE', 'utilisateurs');
define ('_INSTALL_PANEL_FIELD_SITE', 'url');
define ('_INSTALL_PANEL_FIELD_PASS', 'password');
define ('_INSTALL_PANEL_FIELD_CODE', 'code');
demarrer_site($site,
array(
'creer_site' => true,
'creer_base' => true,
'creer_user_base' => true,
'repertoire' => 'spip',
'mail' => 'moi@chezmoi.com',
'utiliser_panel' => true
)
);
?>
La seconde section de définition des _INSTALL_PANEL_*
permet de spécifier la BD, la table et les champs où on récupère les informations des utilisateurs, à savoir le domaine (_INSTALL_PANEL_FIELD_SITE
), le mot de passe MySQL/FTP mysql/ftp (_INSTALL_PANEL_FIELD_PASS
) et le code permettant au propriétaire du site d’activer son espace (_INSTALL_PANEL_FIELD_CODE
).
Le code d’un panel minimal est donné ici en exemple. Son mode de fonctionnement correspond à un service d’hébergement de type communautaire et non marchand. Des modérateurs invitent des personnes à disposer d’un site SPIP spip . Une fois identifié, le modérateur spécifie le prénom, nom et email du propriétaire du site. Il spécifie l’URL (toto.mondomain.tld ou encore autredomaine.tld) et le mot de passe FTP/MySQL ftp/mysql . Arbitrairement, on laisse à la mutualisation facile de définir les identifiants MySQL mysql et FTP ftp mais on choisit le mot de passe (rien de plus pénible qu’un mot de passe consistant en une suite de caractère aléatoire). Lors du choix de l’URL l’url , une vérification de la disponibilité de l’URL l’url est effectuée. On effectue aussi un ping pour voir si le sous-domaine ou le domaine pointe bien vers le serveur d’hébergement.
Le futur propriétaire du site reçoit un courrier automatique l’annonçant que untel l’a invité à disposer du site machin.mondomain.tld et précise code d’activation, identifiants MySQL mysql et FTP ftp .
Cet exemple de panel est proposé sans prétention : c’est juste pour donner des idées. Par fainéantise fainéantisme , il s’appuie sur les librairies PEAR pear Auth, QuickForm, Mail et Ping.
Installation des librairies PEAR pear
apt-get install pear
pear install Auth
pear install HTML_Common HTML_QuickForm
pear install HTML_QuickForm_Renderer_Tableless
pear install HTML_QuickForm_DHTMLRulesTableless
pear install Mail
pear install Net_Ping
Structure de la base
-- Structure de la table <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bW9kZXJhdGV1cnM8L2NvZGU+"></span>
CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bW9kZXJhdGV1cnM8L2NvZGU+"></span> (
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dWlkPC9jb2RlPg=="></span> bigint(21) NOT NULL auto_increment,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bG9naW48L2NvZGU+"></span> varchar(20) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cGFzc3dvcmQ8L2NvZGU+"></span> varchar(35) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cHJlbm9tPC9jb2RlPg=="></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bm9tPC9jb2RlPg=="></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZW1haWw8L2NvZGU+"></span> varchar(50) NOT NULL,
PRIMARY KEY (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dWlkPC9jb2RlPg=="></span>)
) ENGINE=MyISAM;
-- Structure de la table <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dXRpbGlzYXRldXJzPC9jb2RlPg=="></span>
CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dXRpbGlzYXRldXJzPC9jb2RlPg=="></span> (
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bG9naW48L2NvZGU+"></span> varchar(20) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cGFzc3dvcmQ8L2NvZGU+"></span> varchar(35) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dXJsPC9jb2RlPg=="></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZGlyZWN0b3J5PC9jb2RlPg=="></span> varchar(250) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cHJlbm9tPC9jb2RlPg=="></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bm9tPC9jb2RlPg=="></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZW1haWw8L2NvZGU+"></span> varchar(50) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bW9kZXJhdGV1cjwvY29kZT4="></span> bigint(21) NOT NULL,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y29kZTwvY29kZT4="></span> varchar(20) NOT NULL,
PRIMARY KEY (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bG9naW48L2NvZGU+"></span>)
) ENGINE=MyISAM;
Les modérateurs sont à ajouter à la main via phpMyAdmin en utilisant la fonction md5 pour les mots de passe.
Codes de l’exemple de panel
Le fichier etc/config.inc.php
est à adapté de manière similaire à ce que vous avez fait pour spip/config/mes_options.php
ftp}
Tout serveur FTP ftp disposant d’une extension MySQL mysql pour aller chercher les utilisateurs fait l’affaire affaire . A titre d’exemple, de par sa robustesse et sa simplicité, nous utilisons ici pure-ftpd
apt-get install pure-ftpd-mysql
Éditer Editer /etc/pure-ftpd/db/mysql.conf
pour l’adapter à vos besoins :
MYSQLUser root
MYSQLPassword ******
MYSQLDatabase mutualisation_spip
MYSQLCrypt md5
MYSQLGetPW SELECT password FROM utilisateurs WHERE login="\L"
MYSQLDefaultUID 33
MYSQLDefaultGID 33
MYSQLGetDir SELECT directory FROM utilisateurs WHERE login="\L"
En outre :
/etc/pure-ftpd/auth/70pam
pour y mettre : no
/etc/pure-ftpd/conf/Umask
pour y mettre : 022 022
(ou le mask adapté à vos besoins)/etc/pure-ftpd/conf/ChrootEveryone
pour y mettre : Yes
(Très important ! Pour éviter qu’un utilisateur puisse remonter dans l’arborescence et accéder aux espaces personnels des autres utilisateurs.Un moyen simple pour tester en local sans se prendre la tête à mettre en place un serveur DNS et à configurer vos propres zones locales et d’ajouter des hostnames dans /etc/hosts
comme par exemple :
127...1 toto.chezmoi.com
127...1 titi.chezmoi.com
127...1 tutu.chezmoi.com
Pour peu qu’Apache peux qu’apache pointe vers le bon répertoire (par exemple DocumentRoot /var/www/spip/</code var/www//spip/</code > vous pourrez tester l’activation des sites toto.chezmoi.com, titi.chezmoi.com, etc...
Retours, critiques, etc... sont les bienvenues !