|
|
|
@ -0,0 +1,248 @@ |
|
|
|
|
#!/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 |
|
|
|
|
{ |
|
|
|
|
if [ ! -r ${RPROXY_VHOST_TEMPLATE} ]; then |
|
|
|
|
ERROR="${RPROXY_VHOST_TEMPLATE} n'existe pas ou n'est pas lisible" |
|
|
|
|
fct_erreur 2 |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if [ ! -r ${REMOTE_VHOST_TEMPLATE} ]; then |
|
|
|
|
ERROR="${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} ${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} ${REMOTE_TEMPLATE_FILE} > ${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 ${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 ${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 ${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 |