Avant propos
Cet article cible particulièrement les développeur qui travaille sur linux et qui souhaite facilement ajouter un site en local en ne tapant qu’une ligne de commande. J'insiste sur le fait que le script est destiné à une utilisation locale, pour se faciliter la vie dans la création et le développement de nouveaux projets.
Le script sera a adapté à vos besoins, ainsi qu’à votre configuration, il faudra pour cela connaître quelques bases en bash et le tour sera joué.
Je vais dans un premier temps expliquer comment est configuré et organisé mon environnement de travail, car c'est important pour comprendre la logique du script, et ça permettra aussi de l'adapter à ce que vous avez besoins.
Le serveur web installé sur ma machine est donc un LAMP, à savoir Linux, Apache, Mysql et PHP.
J’essaye d’avoir une architecture logique dans l’arborescence de mes dossiers projets web, en tout cas logique pour moi, peut-être que certain d’entre vous trouverons celle-ci bien compliqué.
Donc j’ai un dossier « P » dans mon dossier « home ». Avec dedans un dossier par lettre « A », « B », la lettre correspondant simplement à la première lettre du site. Par exemple « amazon.fr » sera rangé dans « A » et google.fr dans « G ».
Chaque site est dans un dossier à son nom sans les « www ». Enfin dans chaque dossier de site j’ai un dossier DUMP contenant une sauvegarde de la base de données, un dossier WWW qui sera le dossier racine du site avec toute l’arborescence du site et enfin un dossiers SOURCES avec les fichiers source graphique (.psd, .ai).
En image ça donne ça :
En partant de cette arbo de travail je souhaitais pouvoir ajouter un site en ligne en ne tapant qu’une ligne de commande.
Après avoir renseigné l’url de mon site le script doit :
- Créer automatiquement les dossiers de l’arborescence.
Ou
Récupérer automatiquement le dépôt git de mon site ce qui créera la même arborescence. - Créer un Vhost sur apache au nom du site
- Créer automatiquement une base de données et un utilisateurs MySQL au nom du site
- Créer un fichier de bienvenue PHP et un fichier de sauvegarde des identifiants MYSQL
- Modifier le fichier hosts pour le rendre accessible en local
- Rebooter apache
- Le site sera à ce moment là disponible et on pourra y accéder en tapant son url. Si vous laissez la dernière ligne du script firefox l’ouvrira directement.
Voici le script, j’ai essayé de le commenter un maximum.
Il s'agit évidement d'une base que je vous invite à essayer de comprendre et le modifier à votre sauce pour qu'il colle le plus possible à vos besoins.
Mise en oeuvre
Généralement je mets tous mes script BASH au même endroit, dans un dossier nommé logiquement BASH à la racine de mon dossier perso "~/BASH". Je vais me répéter c'est une base adapté à ma logique, adaptez donc à vos besoins.
#!/bin/bash
PATH_PROJECT=~/P/
## Récupération du premier paramètre
URI_SITE=$1
## Récupération du second paramètre
GIT=$2
MYSQL_DBB="sites-"${URI_SITE:0:8}
WORK_FOLDER="WWW"
DUMP_FOLDER="_DUMP_"
DATE=`date +%Y-%m-%d`
NAS_FOLDER=$DATE"_"$URI_SITE"_AlbanL"
CONTENT_NOTES="##Accès MYSQL\n\nHOST:localhost\n\nUSER:"$MYSQL_DBB"\n\nPWD:123456\n\nBDD:"$MYSQL_DBB
DEPOT_GIT="git@votre-depot-git.tld:identifiant/"$URI_SITE".git"
## Login root de votre MySql
USER_MYSQL="root"
PWD_MYSQL="monpasswordroot"
## Récupération de la première lettre du site
FIRST_LETTER=${URI_SITE:0:1}
## Transformation de la lettre en majuscule
declare -u FIRST_LETTER
FIRST_LETTER=$FIRST_LETTER
FOLDER_PATH=$PATH_PROJECT$FIRST_LETTER
## Tester cette lettre pour voir si il existe déjà un dossier avec ce nom
if [ ! -e $FOLDER_PATH ]; then
mkdir $FOLDER_PATH
echo -e "$FOLDER_PATH a été créé !\n"
chmod 0755 $FOLDER_PATH
else
echo -e "$FOLDER_PATH éxiste déjà !\n"
fi
echo "-= Deuxième Param $GIT =-"
if [ $GIT = "git" ]; then
echo "-= Recupération du depot git =-"
##Récupération du dépot
cd $FOLDER_PATH
git clone $DEPOT_GIT
cd ~/
else
## Si il ne s'agit pas d'un dépot git alors création normal des dossiers
if [ ! -e $FOLDER_PATH"/"$URI_SITE ]; then
mkdir $FOLDER_PATH"/"$URI_SITE
echo -e $FOLDER_PATH"/"$URI_SITE" a été créé !\n"
else
echo -e $FOLDER_PATH"/"$URI_SITE" éxiste déjà !\n"
fi
fi
## Test avant de créer le dossier de travail
if [ ! -e $FOLDER_PATH"/"$URI_SITE"/"$WORK_FOLDER ]; then
mkdir $FOLDER_PATH"/"$URI_SITE"/"$WORK_FOLDER
echo -e $FOLDER_PATH"/"$URI_SITE"/"$WORK_FOLDER" a été créé !\n"
else
echo -e $FOLDER_PATH"/"$URI_SITE"/"$WORK_FOLDER" éxiste déjà !\n"
fi
## Test pour voir si le dossier DUMP existe
if [ ! -e $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER ]; then
mkdir $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER
echo -e $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER" a été créé !\n"
chmod 0755 $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER
echo -e $CONTENT_NOTES > $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER"/access.txt"
else
echo -e $FOLDER_PATH"/"$URI_SITE"/"$DUMP_FOLDER" éxiste déjà !\n"
fi
## Copier le fichier index.php
if [ $GIT != "git" ]; then
echo "-= Copier le fichier index de bienvenue =-"
cp ~/BASH/index.php $FOLDER_PATH"/"$URI_SITE"/"$WORK_FOLDER"/index.php"
fi
## Connexion à la base de données + création des tables et de l’utilisateur + droits sur la BDD
echo "-= Création de la base de données =-"
touch ~/BASH/script.sql && echo "CREATE DATABASE \`$MYSQL_DBB\`;" > ~/BASH/script.sql
mysql --user=$USER_MYSQL --password=$PWD_MYSQL < ~/BASH/script.sql
rm -rf ~/BASH/script.sql
touch ~/BASH/script.sql && echo "CREATE USER \`$MYSQL_DBB\`;" > ~/BASH/script.sql
mysql --user=$USER_MYSQL --password=$PWD_MYSQL < ~/BASH/script.sql
rm -rf ~/BASH/script.sql
GRANT="GRANT ALL ON \`$MYSQL_DBB\`.* to '$MYSQL_DBB'@'localhost' identified by '123456';"
touch ~/BASH/script.sql && echo $GRANT > ~/BASH/script.sql
mysql --user=$USER_MYSQL --password=$PWD_MYSQL < ~/BASH/script.sql
rm -rf ~/BASH/script.sql
## Ajouter le vhosts
echo "-= Ajouter le virtual host de $URI_SITE =-"
VHOST="<VirtualHost *:80>
DocumentRoot $FOLDER_PATH/$URI_SITE/$WORK_FOLDER/
ServerName $URI_SITE
ServerAlias www.$URI_SITE
<Directory $FOLDER_PATH/$URI_SITE/$WORK_FOLDER/>
Options +Indexes +FollowSymLinks +MultiViews +Includes
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>"
sudo bash -c "echo \"$VHOST\" > /etc/apache2/sites-available/$URI_SITE.conf"
# Ajouter dans le fichier hosts
echo "-= $URI_SITE ajouté au fichier hosts =-"
sudo bash -c "echo \"127.0.0.1 www.$URI_SITE\" >> /etc/hosts"
# Enable dans apache
sudo a2ensite $URI_SITE
echo "-= Restart Apache =-"
# Un petit reload d'apache
sudo service apache2 restart
echo "Le site est accessible sur : http://www.$URI_SITE"
#ouverture du site sur firefox
firefox "http://www."$URI_SITE
Création du fichier
nano ~/BASH/local_site.sh
Copier / Coller dans nano le contenu du script présenté ci-dessus
Enregistrez avec CTRL + X et validez
rendre le fichier exécutable
chmod +x ~/BASH/local_site.sh
On va maintenant ajouter un alias pour nous simplifier encore la vie.
nano ~/.bash_aliases
Ajouter la ligne suivante à la fin du fichier
alias addsite= ‘~/BASH/local_site.sh’
Enregistrer avec CTRL + X
validation de l'alias en tapant la ligne suivante
source ~/bash_aliases
L’installation est maintenant terminée et vous pouvez ajouter un site en tapant la ligne de commande suivante
addsite site-de-test.com
A la fin le script s'ouvrira dans firefox,
