"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: | ## Prérequis: | ||||||
| ## ---------- | ## ---------- | ||||||
| ## - Le script doit être executé avec les droits root | ## - Le script doit être executé par l'utilisateur asr | ||||||
| ## | ## | ||||||
| ## Fonctionnement: | ## 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 | if [ ! ${RET_VAL} -eq 0 ]; then | ||||||
|   exit_on_error "Erreur lors de la création du fichier de profile" |   exit_on_error "Erreur lors de la création du fichier de profile" | ||||||
| fi | 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 | continue_on_ok | ||||||
| 
 | 
 | ||||||
| # Installation des fichiers de configuration | # 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