Ceci est une ancienne révision du document !


Ajout d'un domaine via script bash

Retour à la liste des tutoriels

Création d'un script bash permettant d'automatiser la création de sites pour Apache.
Ce script exécute des commandes de manière automatisée.
L'auteur décline toute responsabilité quand aux dégâts que ce script pourrait créer sur votre serveur.
Ce script à été testé avec soin, mais des dysfonctionnements peuvent subsister.
N'utilisez ce script qu'à vos risques et périls.
Prérequis


Contexte

Ce script bash fournit :

Création du script

Je préconise le stockage des scripts dans /root afin d'éviter qu'ils ne soient mis à plusieurs endroits sur votre serveur.

  • Créez un fichier
nano /root/add_site.sh
  • Copiez y le script contenu ci-dessous.
  • Rendez le fichier exécutable
 chmod +x /root/add_site.sh
Pour créer le domaine “anael.eu”, tapez
/root/add_site.sh anael.eu

Script bash

add_site.sh
#!/bin/bash
#	add_site.sh
# Script permettant l'ajout de domaines dans la configuration d'Apache2
# Auteur : Anael Mobilia
# Source : http://mon-serveur.anael.eu/doku.php/apache/ajout_domaine_script_bash
# Licence : CC Attribution-Noncommercial-Share Alike 3.0 Unported
#		http://creativecommons.org/licenses/by-nc-sa/3.0/
 
# Expression régulière validant les NDD - inspirée de http://simonslick.com/VEAF/
REGEXP_NDD="^[a-zA-Z0-9.-]{1,255}\.[a-zA-Z]{2,63}$"
 
# Expression régulière distinguant les domaines & sous domaines
REGEXP_DOMAINE="^[a-zA-Z0-9-]{1,255}\.[a-zA-Z]{2,63}$"
 
# Répertoire contenant les fichiers de configuration des domaines apache
APACHE_SITES="/etc/apache2/sites-available/"
 
# Répertoire racine pour le domaine (un dossier au nom du domaine y sera créé)
# [/var/www/]default/www
BASE_WWW='/var/www/'
 
# Répertoire contenant les pages web (relatif à BASE_WWW)
# /var/www/default[/www]
WWW='/www'
 
# Répertoire contenant les logs (relatif à BASE_WWW)
# /var/www/default[/logs]
LOGS='/logs'
 
# Mail de l'admin
MAIL_ADMIN='webmaster@an*el.eu'
 
# Utilisateur se connectant en FTP pour effectuer les modifications
USER_WEB='user-web'
 
################# Ne pas effectuer de modification après cette ligne #########################
##### VERIFICATIONS #####
# Vérification du passage d'un paramètre (le domaine à créer)
if [ ! $1 ]
then
	echo "Préciser le domaine à ajouter ($0 anael.eu) !"
        exit 10
fi
 
# Vérification du nom de domaine proposé
if [[ ! "$1" =~ $REGEXP_NDD ]]
then
	echo "Le nom de domaine $1 n'est pas valide !"
	exit 11
fi
 
# Vérification que le domaine n'existe pas déjà
if [ -f $APACHE_SITES$1 ]
then
	echo "Le domaine $1 est déjà configuré pour Apache"
	exit 12
fi
 
# Retour utilisateur
echo "Création de la configuration du domaine"
 
##### CREATION FICHIER DE CONF APACHE #####
# Création du fichier de configuration Apache du domaine
touch $APACHE_SITES$1
 
# Vérification de la bonne création du fichier de configuration
if [ $? != 0 ]
then
	echo "Erreur à la création du fichier de configuration Apache ($APACHE_SITE$1). Etes-vous bien root ?"
	exit 13
fi
 
 
#Ajout du contenu du fichier de configuration apache
# Contenu par défaut du fichier de configuration Apache du domaine ainsi créé
# Il faut ajouter \n pour revenir à la ligne \t pour faire une tabulation
APACHE_DOMAINE_CONF="<VirtualHost *:80>
\r\n\tServerAdmin $MAIL_ADMIN
\r\n\tServerName $1"
 
# Si c'est un domaine (et non pas un sous domaine...)
if [[ "$1" =~ $REGEXP_DOMAINE ]]
then
        APACHE_DOMAINE_CONF=$APACHE_DOMAINE_CONF"\r\n\tServerAlias www.$1"
fi
 
APACHE_DOMAINE_CONF=$APACHE_DOMAINE_CONF"\r\n
\r\n\tDocumentRoot $BASE_WWW$1$WWW
\r\n\t<Directory $BASE_WWW$1$WWW/>
\r\n\t\tOptions -Indexes FollowSymLinks
\r\n\t\tAllowOverride AuthConfig Options
\r\n\t\tOrder allow,deny
\r\n\t\tallow from all
\r\n\t</Directory>
\r\n
\r\n\tErrorLog $BASE_WWW$1$LOGS/error.log
\r\n
\r\n\t# Possible values include: debug, info, notice, warn, error, crit,
\r\n\t# alert, emerg.
\r\n\tLogLevel warn
\r\n
\r\n\tCustomLog $BASE_WWW$1$LOGS/access.log combined
\r\n
\r\n\t<IfModule mod_php5.c>
\r\n\t\tphp_admin_value open_basedir $BASE_WWW$1$WWW/:/tmp/
\r\n\t</IfModule>
\r\n</VirtualHost>"
 
# Enregistrement de la configuration dans le fichier
echo -e $APACHE_DOMAINE_CONF > $APACHE_SITES$1
 
##### CREATION DES REPERTOIRES + DROITS #####
# Création des répertoires
# Retour utilisateur
echo "Création des répertoires sur le disque"
# Répertoire du domaine
mkdir $BASE_WWW$1
# Vérification de la bonne création du répertoire
if [ $? != 0 ]
then
        echo "Erreur à la création du répertoire ($BASE_WWW$1). Etes-vous bien root ?"
        exit 14
fi
 
# Répertoire des pages web
mkdir $BASE_WWW$1$WWW
# Vérification de la bonne création du répertoire
if [ $? != 0 ]
then
        echo "Erreur à la création du répertoire ($BASE_WWW$1$WWW). Etes-vous bien root ?"
        exit 15
fi
 
# Répertoire des logs
mkdir $BASE_WWW$1$LOGS
# Vérification de la bonne création du répertoire
if [ $? != 0 ]
then
        echo "Erreur à la création du répertoire ($BASE_WWW$1$LOGS). Etes-vous bien root ?"
        exit 16
fi
 
# Retour utilisateur
echo "Définition des droits sur les répertoires"
# Droits sur les répertoires
chown www-data:www-data $BASE_WWW$1
chmod 750 -R $BASE_WWW$1
chown -R $USER_WEB:www-data $BASE_WWW$1/*
 
 
##### ACTIVATION APACHE #####
# Retour utilisateur
echo "Activation du domaine dans la configuration d'Apache"
# Activation du domaine Apache
a2ensite $1
#Vérification de la bonne exécution
if [ $? != 0 ]
then
        echo "Erreur à l'activation du site $1. Vérifiez la configuration des domaines délivrés par Apache."
	echo "Une erreur peut planter Apache au prochain reload !"
        exit 17
fi
 
# Retour utilisateur
echo "Rechargement de la configuration d'Apache"
# Relance d'apache
/etc/init.d/apache2 reload
#Vérification de la bonne exécution
if [ $? != 0 ]
then
        echo "Erreur au rechargement d'Apache !"
        echo "Vos sites ne sont plus accessibles !"
        exit 18
fi


Liens