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.
Prérequis
- Avoir installé nano.
Contexte
Ce script bash fournit :
- L'activation du nouveau domaine dans Apache.
- La gestion des www (www.anael.eu et anael.eu seront utilisables)
- La création des répertoires dans /var/www qui seront utilisés par le nouveau domaine
- La configuration des droits sur ces répertoires.
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