Script de création de comptes d’hébergement

Dans cet article, je vous propose un script de création de compte d’hébergement Apache + PHP + MySQL.
Si vous avez un serveur d’hébergement avec une plate-forme LAMP (Linux+Apache+PHP+MySQL), ce script vous permettra d’automatiser la création d’un compte d’hébergement pour un site.

Histoire de ce script

Tout d’abord, je tiens à présenter l’auteur du script initial : Stéphane MUNOS. En fait, il se trouve que depuis un an je travaille dans la même société que Stéphane en tant que Responsable réseau et télécom. Stéphane, qui est développeur web, avait réalisé ce script pour subvenir aux besoins de la société. A mon arrivée, j’ai réutilisé ce script qui a depuis, un peu évolué.
Dans cet article, vous trouverez un script de création d’hébergement simple qui me servira de base pour d’autres articles.

Pré-requis

Ce script fonctionne sur une plate-forme LAMP (Linux+Apache+MySQL+PHP).
Les versions de ces logiciels utilisées pour ce script sont :

  • Apache 1.3.33 (avec le mode suexec)
  • MySQL 4.1
  • PHP 5 (en cgi)

Mais je suis sûr qu’avec quelques adaptations, ce script peut être compatible avec toutes les versions de Linux, Apache, PHP et MySQL.

Principe de fonctionnement

Avant de commencer, je vais vous expliquer comment fonctionne ce script et surtout l’architecture du serveur sur lequel il doit fonctionner.
Ce script crée un compte d’hébergement. Un compte d’hébergement est défini par :

  • Un utilisateur et un mot de passe.
  • Un répertoire.
  • Un fichier de configuration apache.
  • Une base de données.

Afin de rendre ce script utilisable depuis d’autres programmes, j’ai choisi de lui passer 4 paramètres :

  • Le nom d’utilisateur à créer.
  • Le mot de passe de l’utilisateur à créer.
  • Le nom de domaine principal.
  • Un booléen pour la création de la base de donnée : 1 on crée une base / 0 on ne crée pas de base.

L’utilisateur et le mot de passe seront identiques pour l’acces FTP et la base de donnée.
Les répertoires suivants seront créés :

  • Le répertoire principal du compte d’hébergement : /var/www/nom_du_compte
  • Le répertoire de stockage des logs : /var/www/nom_du_compte/logs
  • Le répertoire cgi-bin : /var/www/nom_du_compte/cgi-bin
  • Le répertoire de stockage des fichiers web : /var/www/nom_du_compte/www

Au niveau de Apache, nous allons créer un VirtualHost, qui permettra :

  • De spécifier sur quel nom de domaine doit répondre le serveur.
  • De définir sous quel utilisateur et groupe sera executé le site web.
  • De paramétrer le répertoire dans lequel seront stockés les logs d’accès et d’erreur.
  • De rediriger le répertoire cgi-bin dans celui du compte d’hébergement.
  • De définir le DocumentRoot, c’est à dire l’emplacement où seront stockés les fichiers du site.

Concernant la base de données, nous créerons simplement une base qui portera le nom du compte ainsi qu’un utilisateur qui aura tous les droits sur sa base.

Le script

Avant d’utiliser ce script, voici quelques configurations à faire sur le serveur :
Il faut créer un répertoire vhost afin d’accueillir les fichiers de configuration d’apache pour chaque compte.

 mkdir /etc/apache/vhosts

Ensuite, il faut ajouter à la fin de votre fichier de configuration apache (httpd.conf) :

 NameVirtualHost *  Include vhosts/*.conf

Passons maintenant au script :
1. On récupère les informations passées en paramètre :

 login=$1;  password=$2;  domaine=$3;  base=$4;

2. On crée l’utilisateur qui exécutera le site :

 # --- création du user (le programme s'arrête par sécurité si le user existe déjà) ---  /usr/sbin/useradd $login -p `perl -e "print crypt('$password',pwet)"` -g web -d /var/www/$login -m  if [ $? -ne 0 ]  	then  	echo "L'utilisateur $login existe déjà, opération annulée !"  	exit 0  fi

3. On crée les répertoires :

 # --- création des répertoires  mkdir /var/www/$login /var/www/$login/logs /var/www/$login/www /var/www/$login/cgi-bin  #echo "Répertoires créés ...\n"

4. On copie le cgi de php dans le répertoire cgi-bin du compte (Attention à vérifier que le chemin du cgi de php soit le même sur votre serveur) :

 #-- Copie de php5-cgi dans le répertoire cgi-bin de l'utilisateur  /bin/cp -R /usr/lib/cgi-bin/php /var/www/$login/cgi-bin  #echo "php5 copié ...\n"

5. On met les bonne permissions sur les répertoires :

 # -- modifications des droits sur les dossiers  chown -R $login:web /var/www/$login/  chmod -R 755 /var/www/  #echo "Droits modifiés ...\n"

6. Création du virtual host de apache :

 # --- création du virtual host (httpd.conf) ---  echo "  <VirtualHost *>          ServerName $domaine          DocumentRoot /var/www/$login/www/          ErrorLog /var/www/$login/logs/error.log          CustomLog /var/www/$login/logs/access.log combined          User $login          Group web            ScriptAlias /cgi-bin/ /var/www/$login/cgi-bin/          <Directory /var/www/$login/www/>                  AllowOverride All                  Options -Indexes +ExecCGI                  Order Deny,Allow                  Allow from all          </Directory>    </VirtualHost>    " >> /etc/apache/vhosts/$login.conf  #echo "VirtualHost créé ...\n"

7. Création de la base de données :

 # --- mysql ---  if [ $base = '1' ]  then 	# --- création du compte + db + droits dans mySQL 	/usr/bin/mysqladmin -u root --password=mot_de_passe_root create $login 	#echo "Base MySQL \"$login\" créée ...\n" 	/usr/bin/mysql -u root --password=mot_de_passe_root mysql <<END_COMMANDS 	GRANT ALL PRIVILEGES ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$password'; 	FLUSH PRIVILEGES; 	END_COMMANDS 	/usr/bin/mysqladmin -u root -p"mot_de_passe_root" reload 	#echo "User MySQL \"$login\" créé ...\n"  fi

8. On recharge la configuration d’apache :

 /etc/init.d/apache reload  #echo "Apache relancé ..."

9. Configuration de phpmyadmin Si vous utilisez ou désirez utiliser phpmyadmin, voici la configuration à utiliser. Cela vous permettra d’accéder à la même url pour tout le monde et que chaque utilisateur puisse se connecter et ne voir que les bases auxquelles il a accès.

 // url de votre phpmyadmin  $cfg['PmaAbsoluteUri'] = 'http://url_d_acces_a_votre_phpmyadmin';  [...]  // votre phrase secrete pour le cryptage du cookie  $cfg['blowfish_secret'] = 'une_phrase_secrete';  [...]  // méthode d'authentification par cookie  $cfg['Servers'][$i]['auth_type']     = 'cookie';    // Authentication method (config, http or cookie based)?  $cfg['Servers'][$i]['user']          = '';          // MySQL user  $cfg['Servers'][$i]['password']      = '';          // MySQL password (only needed

Conclusion

J’espère que ce script vous aidera ; d’autres du même type devraient bientôt suivre, permettant la suppression d’un compte d’hébergement, la création d’un accès aux statistiques, l’appel de ce script via une page d’admin en php, …
Donc surveillez bien, ça devrait bientot venir …

Vous pouvez laisser une réponse, ou trackback depuis votre site web.
  • http://www.tatane.com/index.php/script-de-creation-de-comptes-web Tatane.com

    Script de création de comptes Web

    Grace à ce script vous pourrez rapidement créer des hébergements Web sur votre serveur, à la manière d’un hébergement mutualisé. C’est à dire qu’en fournissant au script un login, un mot de passe et un domaine, vous…

  • http://blog.titaxium.org/fedora-core-4-et-creation-de-comptes-web TitaX[Addictive]

    Fedora Core 4 et créaion de comptes web

    Héberger des sites web grâce à un serveur apache/mysql c’est facile sur Fedora Core 4. J’ai donc cherché la possibilité de créer rapidement des comptes qui serviraient à héberger ces sites. J’ai repris ce script en le modifiant et l’adaptant à la distribution Fedora Core 4 et à mes besoins.

  • http://www.freedmz.com Kilombo

    Salut,

    Beau travail sur les scripts !!
    Je serais preneur de ce qui vous dites à la fin du billet concernant l’appel depuis du PHP.
    Je fait actuellement de l’hebergement mais uniquement sur comptes virtuels stockés dans une base MySQL.

    Pouvez vous me tenir au courant de cette interface.

    Merci

    Bonne continuation.

    Kilombo