L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
socle_bash/bin/expl_create_vhost.sh

249 lines
9.4 KiB

#!/bin/bash
##----------------------------------------------------------------------
# Script : expl_create_vhost.sh
# Auteur : Doug Le Tough
# Date : 22-07-2017
# Version : 1.0.0
# Objet : Création d'un VHOST sur le rproxy et sur l'hôte du backend
# Le rproxy comme le backend sont considérés être des serveurs
# Apache
#
# ----------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
# ----------------------------------------------------------------------
# Dependances : Aucune
#
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# @OPT: o:domain:domain:1/1::::
# @OPT: f:backend_host:backend_host:1/1::::
# @OPT: o:backend_port:backend_port:1/1::::
# @OPT: f:enable_vhost:enable_vhost:1/1:false:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration définis dans le fichier de configuration du script:
#
# RPROXY_VHOST_TEMPLATE=rproxy_template.conf
# REMOTE_VHOST_TEMPLATE=backend_template.conf
# DEHYDRATED_DOMAIN_LIST=/etc/dehydrated/domains.txt
# HTTPD_PATH=/etc/httpd/sites-available
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_create_vhost.sh -domain <DOMAIN.TLD> [-backend_host <BACKEND_HOST>] -backend_port <BACKEND_PORT> [-enable_vhost true]
##
## ex: expl_create_vhost.sh -domain pad.tetalab.org -backend_host jimmy.local.tetalab.org -backend_port 9001
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur le rproxy (sousetsuken)
##
## Fonctionnement:
## ---------------
## Crée le fichier de configuration sur le rproxy à partir du fichiers modèle local_site_template.conf
## ainsi que le fichier de configuration sur l'hôte du backend à partir du fichier modèle remote_site_template.conf.
##
## Les deux fichiers modèles sont situés dans le répertoire NC_EXPL_MOD.
##
## Le paramètre backend_host est facultatif car certaines applications n'ont pas besoin de passer par un vhost
## (cas de etherpad-light).
##
## Le paramètre enable_vhost est facultatif. Si passé à true, le vhost sera activé sur le rprox comme sur le backend.
## Dans le cas contraire le vhost sera activé sur aucun des deux serveurs.
##
## Remarque importante: Ce script ne redémarre *PAS* les serveurs Apache.
##
##-----------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------
# Initialisation de l'environement
#------------------------------------------------------------------------------------------------------------------
if [ "${USER}" != "asr" ]; then
ERROR="Seul l'utilisateur asr peut utiliser ce script"
echo -e "\033[91m${ERROR}\033[0m"
exit 1
fi
source /etc/profile.d/tetalab.sh
if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then
echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'éxiste pas !"
echo "Arrêt du script par sécurité"
exit 250
fi
source ${NC_EXPL_CFG}/init.conf
IP_ADDR=$(host ${domain} | rev | cut -d' ' -f1 | rev)
IS_PRESENT=$(grep -E ^${DOMAIN}$ ${DEHYDRATED_DOMAIN_LIST} | wc -l)
REMOTE_HTTP_PATH=${backend_host}:${HTTPD_PATH}
REPLACE_DOMAIN="s/SITE_NAME/${domain}/g"
REPLACE_HOST="s/SITE_HOST/${backend_host}/g"
REPLACE_IP_ADDR="s/SITE_IP/${IP_ADDR}/g"
REPLACE_SITE_PORT="s/SITE_PORT/${backend_port}/"
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_port
{
if [ ! ${backend_port} -gt 0 ] 2>/dev/null || [ ! ${backend_port} -lt 65535 ] 2>/dev/null; then
ERROR="Le numéro de port doit être compris entre 0 et 65535"
fct_erreur 2
fi
}
function check_templates
{
fct_message "Vérification de la présence du fichier modèle ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE}" -color rose
if [ ! -r ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} ]; then
ERROR="${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} n'existe pas ou n'est pas lisible"
fct_erreur 2
fi
fct_message "Vérification de la présence du fichier modèle ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE}" -color rose
if [ ! -r ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} ]; then
ERROR="${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} n'existe pas ou n'est pas lisible"
fct_erreur 2
fi
}
function create_rproxy_conf
{
fct_message "Création de la configuration du rproxy:" -color rose
fct_message " * Domaine: ${domain}"
fct_message " * Hôte : ${backend_host}"
fct_message " * Port: ${backend_port}"
sed -s ${REPLACE_DOMAIN} ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} > ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du rproxy (1)"
fct_erreur 2
fi
sed -i ${REPLACE_HOST} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du rproxy (2)"
fct_erreur 2
fi
sed -i ${REPLACE_SITE_PORT} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du rproxy (3)"
fct_erreur 2
fi
fct_message "Installation de la configuration du rproxy vers ${HTTPD_PATH}/${domain}.conf" -color rose
sudo cp ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp ${HTTPD_PATH}/${domain}.conf
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation de la configuration du rproxy"
fct_erreur 2
fi
fct_message "Application des droits sur ${HTTPD_PATH}/${domain}.conf" -color rose
sudo chown root: ${HTTPD_PATH}/${domain}.conf
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des droits."
fct_erreur 2
fi
fct_message "Application des permissions sur ${HTTPD_PATH}/${domain}.conf" -color rose
sudo chmod 644 ${HTTPD_PATH}/${domain}.conf
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des permissions"
fct_erreur 2
fi
}
function create_backend_conf
{
fct_message "Création de la configuration du backend:" -color rose
sed -s ${REPLACE_DOMAIN} ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} > ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du backend (1)"
fct_erreur 2
fi
sed -i ${REPLACE_IP_ADDR} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du backend (2)"
fct_erreur 2
fi
sed -i ${REPLACE_SITE_PORT} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de la configuration du backend (3)"
fct_erreur 2
fi
fct_message "Installation de la configuration du backend sur ${backend_host}" -color rose
scp ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp ${backend_host}:/tmp/${domain}.conf
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation de la configuration du backend (1)"
fct_erreur 2
fi
ssh ${backend_host} "sudo mv /tmp/${domain}.conf ${HTTPD_PATH}/${domain}.conf"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation de la configuration du backend (2)"
fct_erreur 2
fi
fct_message "Application des droits sur le fichier de configuration du backend"
ssh ${backend_host} "sudo chown root: ${HTTPD_PATH}/${domain}.conf"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des droits sur la configuration du backend"
fct_erreur 2
fi
fct_message "Application des permissions sur le fichier de configuration du backend"
ssh ${backend_host} "sudo chmod 644 ${HTTPD_PATH}/${domain}.conf"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des permissions sur la configuration du backend"
fct_erreur 2
fi
}
function add_domain
{
if [ ${IS_PRESENT} -eq 0 ]; then
fct message "Ajout du domaine ${domain} aux domaines dont les certificats sont gérés par dehydrated" -color rose
sudo echo ${domain} >> ${DEHYDRATED_DOMAIN_LIST}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'ajout du domaine dans ${DEHYDRATED_DOMAIN_LIST}"
fct_erreur 2
fi
else
fct_message "${domain} fait déjà partie de la liste des domaines gérés par dehydrated" -color jaune
fi
}
#-----------------------------------------------------------------------
# Traitement
#-----------------------------------------------------------------------
check_port
check_templates
create_rproxy_conf
if [ "${#backend_host}" -gt 0 ]; then
create_backend_conf
fi
add_domain
fct_erreur 0