"Ajout expl_create_vhost.sh"
This commit is contained in:
parent
4aa8e9642f
commit
ac1f00a9df
248
bin/expl_create_vhost.sh
Executable file
248
bin/expl_create_vhost.sh
Executable file
@ -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
|
@ -37,7 +37,7 @@
|
||||
##
|
||||
## Prérequis:
|
||||
## ----------
|
||||
## - Le script doit être executé avec les droits root
|
||||
## - Le script doit être executé par l'utilisateur asr
|
||||
##
|
||||
## Fonctionnement:
|
||||
## ---------------
|
||||
|
4
conf/expl_create_vhost.conf
Normal file
4
conf/expl_create_vhost.conf
Normal file
@ -0,0 +1,4 @@
|
||||
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
|
@ -79,6 +79,11 @@ RET_VAL=$?
|
||||
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||
exit_on_error "Erreur lors de la création du fichier de profile"
|
||||
fi
|
||||
chmod +x ${PROFILE_DIR}/${PROFILE_FILE}
|
||||
RET_VAL=$?
|
||||
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||
exit_on_error "Erreur lors de l'application des permissions sur ${PROFILE_DIR}/${PROFILE_FILE}"
|
||||
fi
|
||||
continue_on_ok
|
||||
|
||||
# Installation des fichiers de configuration
|
||||
|
13
mod/backend_template.conf
Normal file
13
mod/backend_template.conf
Normal file
@ -0,0 +1,13 @@
|
||||
<VirtualHost SITE_IP:SITE_PORT>
|
||||
ServerName SITE_NAME
|
||||
ServerAdmin bofh@tetalab.org
|
||||
DocumentRoot /var/www/SITE_NAME
|
||||
RemoteIPHeader X-Forwarded-For
|
||||
RemoteIPInternalProxy 192.168.122.0/24
|
||||
<Directory /var/www/SITE_NAME>
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
ErrorLog /var/log/httpd/SITE_NAME.error.log
|
||||
CustomLog /var/log/httpd/SITE_NAME.access.log combined
|
||||
</VirtualHost>
|
36
mod/rproxy_template.conf
Normal file
36
mod/rproxy_template.conf
Normal file
@ -0,0 +1,36 @@
|
||||
<VirtualHost 192.168.122.42:80>
|
||||
# ReverseProxy with https redirect template
|
||||
#
|
||||
# Written by Doug Le Tough
|
||||
#
|
||||
# Usage:
|
||||
# sed -s 's/SITE_NAME/example.com/g' site_template.conf > example.org.conf
|
||||
# sed -i 's/SITE_HOST/hostname.local.tetalab.org/g' example.org.conf
|
||||
#
|
||||
Define FQDN SITE_NAME
|
||||
Define HOST SITE_HOST
|
||||
Define HOST_PORT SITE_PORT
|
||||
ServerName ${FQDN}
|
||||
### All HTTP requests are converted to HTTPS requests
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteCond %{HTTPS} off
|
||||
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
|
||||
</IfModule>
|
||||
ErrorLog "/var/log/httpd/${FQDN}_error.log"
|
||||
CustomLog "/var/log/httpd/${FQDN}_access.log" Combined
|
||||
</VirtualHost>
|
||||
<VirtualHost 192.168.122.42:443>
|
||||
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
|
||||
ServerName ${FQDN}
|
||||
ProxyPreserveHost On
|
||||
SSLEngine on
|
||||
SSLCertificateFile /etc/dehydrated/certs/${FQDN}/cert.pem
|
||||
SSLCertificateKeyFile /etc/dehydrated/certs/${FQDN}/privkey.pem
|
||||
SSLCertificateChainFile /etc/dehydrated/certs/${FQDN}/fullchain.pem
|
||||
RequestHeader set X_FORWARDED_PROTO 'https'
|
||||
ProxyPass / http://${HOST}:${HOST_PORT}/
|
||||
ProxyPassReverse / http://${HOST}:${HOST_PORT}/
|
||||
ErrorLog "/var/log/httpd/${FQDN}_error.log"
|
||||
CustomLog "/var/log/httpd/${FQDN}_access.log" Combined
|
||||
</VirtualHost>
|
1
msg/expl_create_vhost.msg
Normal file
1
msg/expl_create_vhost.msg
Normal file
@ -0,0 +1 @@
|
||||
2 | erreur | stop | ${ERROR}
|
Loading…
Reference in New Issue
Block a user