Commentaire

Travaillant sur pas mal de développements web, j'ai eu besoin de monter un serveur pour héberger tous mes projets et les rendre consultable depuis le net. Voici les quelques scripts qui me permettent de rapidement monter/démonter un site avec ou sans base de données.

Hébergement multi-sites sous Debian 3.1

Sommaire

top Introduction

Ce document décrit la procédure complète de mise en place d'un hébergement multi-site sur un serveur Apache par l'intermédiaire des Vhosts et de sous-domaines. La plateforme d'installation utilisée est une Debian Sarge 3.1.

Tous les produits installés dans cette procédure sont libre d'utilisation.

top Commentaire(s)/Correction(s)

Merci de me contacter pour tout commentaire ou correction.

Pour cette installation, nous partirons du principe que la machine cible dispose d'une connexion Internet.

top Prérequis

Pour cette procédure, la machine cible doit être installée avec les composants suivants:

La dernière distribution stable de Debian (Sarge 3.1)
Le dernier package Apache (1.3.33-6sarge3)
Le dernier package php (4:4.3.10-18)
Le dernier package mySQL-server (4.0.24-10sarge2)

Pour mettre en place tout cet environnement, il vous suffit d'installer la version de base de Debian, puis de télécharger les packages nécessaires à votre installation. Pensez à mettre à jour votre système avant d'installer.

   [hostname]$ apt-get update
   [hostname]$ apt-get upgrade
   [hostname]$ apt-get install apache mysql-server php4 phpmyadmin
  

top Mise en place

Nous allons créer deux scripts pour cet article: un script de création et un de suppression. Le premier créera un nouveau compte utilisateur qui ne pourra pas se loguer en mode console à notre serveur (mais aura quand même l'accès en FTP), ainsi qu'un répertoire www, le fichier de config apache associé et éventuellement une base mySQL. Le second script supprimera tout ce que le premier aura mis en place.

Toutes les manipulations sont à faire en tant qu'utilisateur root sur la machine. Pour commencer, créons les deux fichiers et affectons les droits de lecture/écriture/exécution uniquement à l'utilisateur root.

   [hostname]$ touch createWebAccount.sh
   [hostname]$ touch removeWebAccount.sh
   [hostname]$ chmod 700 *WebAccount.sh
  

Maintenant, nous pouvons successivement éditer chacun des deux fichiers de script afin de les alimenter. Et pour ce faire, rien de mieux que ce bon vieux VI. Notez que vous pouvez très bien utiliser tout autre éditeur de text suivant vos préférences.

   [hostname]$ vi createWebAccount.sh
  

Puis ...

   [hostname]$ vi removeWebAccount.sh
  

Voici le contenu de chacun des ces deux fichiers de script.

#!/bin/sh
clear

# --- Recuperation des parametres ---
echo -n "Username : ";
read login;

echo -n "Password : ";
read password;
passmysql=$password

echo

# --- creation du user (le programme s'arrete par securite si le user existe deja ) ---
/usr/sbin/useradd -G vhosts -d /home/$login -s /bin/false $login 2>/dev/null
if [ $? -ne 0 ]
then
        echo "[X] User $login already exist, operation aborted !"
else
        echo "$login:$password"|chpasswd
        echo "[+] User \"$login\" created"

        # --- creation des repertoires ---
        /bin/mkdir -p /home/$login/logs /var/www/$login /var/www/$login/www /home/$login/usr/bin
        cp /bin/ls /home/$login/usr/bin
        cp /bin/pwd /home/$login/usr/bin
        chmod u=x,g=x,o=x /home/$login/usr/bin/ls
        chmod u=x,g=x,o=x /home/$login/usr/bin/pwd
        echo "[+] Directories created"

        # --- creation du lien symbolique "www" necessaire a  Proftpd ---
        cd /home/$login/
        ln -s /var/www/$login/www/ www
        echo "[+] Link \"www\" created"

        # --- modifications des droits sur les dossiers ---
        chown -R $login:vhosts /var/www/$login/
        chown -R $login /home/$login/
        chmod -R 755 /var/www/
        echo "[+] Rights changed"

        # --- creation du virtual host (inclus dans httpd.conf) ---
        echo "
<VirtualHost *>
        ServerName $login.spin0us.net
        DocumentRoot /var/www/$login/www/
        ErrorLog /home/$login/logs/error.log
        CustomLog /home/$login/logs/access.log combined
        <Directory /var/www/$login/www/>
                AllowOverride All
                Options -Indexes
                Order Deny,Allow
                Allow from all
        </Directory>
        LogLevel warn
        ServerSignature On
</VirtualHost>
" >> /etc/apache2/sites-available/$login
        a2ensite $login >/dev/null
        echo "[+] VirtualHost Apache created"
        /etc/init.d/apache2 reload >/dev/null
        echo "[!] Apache configuration reloaded"

        # --- mysql ---
        echo -n "Do you need mySQL database for this account ? (y/[n]) "
        read ans
        if [ _$ans = _y -o _$ans = _Y ]
        then
                echo -n "Enter root password for mysql : ";
                read passroot;

                # --- creation de la base ---
                /usr/bin/mysqladmin -u root -p$passroot create $login
                echo "[+] MySQL database \"$login\" created"

                # --- creation du compte + db + droits ---
                /usr/bin/mysql -u root --password=$passroot mysql <<END_COMMANDS
                GRANT ALL ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$passmysql';
                FLUSH PRIVILEGES;
END_COMMANDS

                # --- redemarrage de la base ---
                /usr/bin/mysqladmin -u root -p$passroot reload
                echo "[+] User MySQL \"$login\" created"
        fi
fi
echo
echo
  
#!/bin/bash

# --- Recuperation des parametres ---
echo -n "Username : ";
read login;

# --- Suppression du user ---
/usr/sbin/userdel $login
echo "[-] User $login removed."

# --- Suppression du repertoire www---
/bin/rm -R -f /home/$login
/bin/rm -R -f /var/www/$login
echo "[-] Home directory removed."

# --- Suppression du virtual host---
a2dissite $login >/dev/null
rm -f /etc/apache2/sites-available/$login
echo "[-] Virtualhosts $login removed."

# --- Suppression de la base de donnee et de l'utilisateur---
echo -n "Do you want to remove mySQL database for this account ? (y/[n]) "
read ans
if [ _$ans = _y -o _$ans = _Y ]
then
        mysql -u root --password=...PASSMYSQL... mysql <<END_COMMANDS
        REVOKE ALL ON *.* FROM $login@localhost;
        REVOKE ALL ON $login.* FROM $login@localhost;
        DELETE FROM mysql.user WHERE user='$login';
        DROP DATABASE IF EXISTS $login;
        FLUSH PRIVILEGES;
END_COMMANDS
        /usr/bin/mysqladmin -u root -p"...PASSMYSQL..." reload
fi

# --- On recharge la configuration de apache ---
/etc/init.d/apache2 reload >/dev/null
echo "[!] Apache reloaded ..."
echo "[!] Account $login successfully removed."
  

ATTENTION, dans le second script pensez bien à remplacer les ...PASSMYSQL... par votre mot de passe root pour mySQL.

top Utilisation

Pour utiliser ces deux scripts, rien de plus simple. Il vous suffit de les lancer et de répondre aux questions qui vous sont posées.

 
Vous êtes connecté avec l'adresse IP 18.116.42.208