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.
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
- 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