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.

251 lines
9.6 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. Ce script ajoute également le domaine passé en argument à la liste des domaines
# gérés par Dehydrated.
#
#------------------------------------------------------------------------------------------------------------------
# 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>
##
## 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).
##
##
## Remarque importante: Ce script n'active *PAS* le virtualhost et 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 ${backend_host} | 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 jaune
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 jaune
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 jaune
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 jaune
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 jaune
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 jaune
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 jaune
fct_message " * Domaine: ${domain}"
fct_message " * Addresse IP du backend: ${IP_ADDR}"
fct_message " * Port: ${backend_port}"
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 jaune
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 jaune
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