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 …

Posté dans