From d851237dc2eb8ac6fc78efc4b6c4f5f4f6a3fe32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Sat, 16 Apr 2016 16:43:13 +0200 Subject: [PATCH] [enh] Update nginx conf_regen hook and simplify plain conf files copy --- data/hooks/conf_regen-old/15-nginx | 86 ------------------- data/hooks/conf_regen/15-nginx | 79 +++++++++++++++++ data/templates/nginx/{ => plain}/global.conf | 0 data/templates/nginx/{ => plain}/ssowat.conf | 0 .../nginx/{ => plain}/yunohost_admin.conf | 0 .../nginx/{ => plain}/yunohost_admin.conf.inc | 0 .../nginx/{ => plain}/yunohost_api.conf.inc | 0 .../nginx/{ => plain}/yunohost_panel.conf.inc | 0 .../{server.conf.sed => server.tpl.conf} | 0 9 files changed, 79 insertions(+), 86 deletions(-) delete mode 100644 data/hooks/conf_regen-old/15-nginx create mode 100755 data/hooks/conf_regen/15-nginx rename data/templates/nginx/{ => plain}/global.conf (100%) rename data/templates/nginx/{ => plain}/ssowat.conf (100%) rename data/templates/nginx/{ => plain}/yunohost_admin.conf (100%) rename data/templates/nginx/{ => plain}/yunohost_admin.conf.inc (100%) rename data/templates/nginx/{ => plain}/yunohost_api.conf.inc (100%) rename data/templates/nginx/{ => plain}/yunohost_panel.conf.inc (100%) rename data/templates/nginx/{server.conf.sed => server.tpl.conf} (100%) diff --git a/data/hooks/conf_regen-old/15-nginx b/data/hooks/conf_regen-old/15-nginx deleted file mode 100644 index d45c0328e..000000000 --- a/data/hooks/conf_regen-old/15-nginx +++ /dev/null @@ -1,86 +0,0 @@ -set -e - -force=$1 - -function safe_copy () { - if [ ! -f /etc/yunohost/installed ]; then - sudo cp $1 $2 - else - if [[ "$force" == "True" ]]; then - sudo yunohost service safecopy \ - -s nginx \ - $1 $2 \ - --force - else - sudo yunohost service safecopy \ - -s nginx \ - $1 $2 - fi - fi -} - -cd /usr/share/yunohost/templates/nginx - -# Copy plain single configuration files -files="ssowat.conf -global.conf -yunohost_admin.conf -yunohost_admin.conf.inc -yunohost_api.conf.inc -yunohost_panel.conf.inc" - -for file in $files; do - safe_copy $file /etc/nginx/conf.d/$file -done - - -if [ -f /etc/yunohost/installed ]; then - - need_restart=False - domain_list=$(sudo yunohost domain list --output-as plain) - - # Copy a configuration file for each YunoHost domain - for domain in $domain_list; do - sudo mkdir -p /etc/nginx/conf.d/$domain.d - cat server.conf.sed \ - | sed "s/{{ domain }}/$domain/g" \ - | sudo tee $domain.conf - [[ $(safe_copy $domain.conf /etc/nginx/conf.d/$domain.conf | tail -n1) == "True" ]] \ - && need_restart=True - - [ -f /etc/nginx/conf.d/$domain.d/yunohost_local.conf ] \ - && [[ $main_domain != $domain ]] \ - && sudo yunohost service saferemove -s nginx \ - /etc/nginx/conf.d/$domain.d/yunohost_local.conf - done - - - # Copy 'yunohost.local' to the main domain conf directory - main_domain=$(cat /etc/yunohost/current_host) - safe_copy yunohost_local.conf \ - /etc/nginx/conf.d/$main_domain.d/yunohost_local.conf - - - # Remove old domains files - for file in /etc/nginx/conf.d/*.*.conf; do - domain=$(echo $file \ - | sed 's|/etc/nginx/conf.d/||' \ - | sed 's|.conf||') - [[ $domain_list =~ $domain ]] \ - || ([[ $(sudo yunohost service saferemove -s nginx $file) == "True" ]] \ - && (sudo rm -r /etc/nginx/conf.d/$domain.d || true)) - done - -else - [ ! -f /etc/nginx/sites-available/default ] \ - || sudo rm -f /etc/nginx/sites-enabled/default - need_restart=True -fi - -# Restart if need be -if [[ "$need_restart" == "True" ]]; then - sudo service nginx restart -else - sudo service nginx reload \ - || sudo service nginx restart -fi diff --git a/data/hooks/conf_regen/15-nginx b/data/hooks/conf_regen/15-nginx new file mode 100755 index 000000000..c9b0a6baa --- /dev/null +++ b/data/hooks/conf_regen/15-nginx @@ -0,0 +1,79 @@ +#!/bin/bash + +set -e + +do_pre_regen() { + pending_dir=$1 + + cd /usr/share/yunohost/templates/nginx + + nginx_dir="${pending_dir}/etc/nginx" + nginx_conf_dir="${nginx_dir}/conf.d" + mkdir -p "$nginx_conf_dir" + + # install plain conf files + cp plain/* "$nginx_conf_dir" + + # retrieve variables + main_domain=$(cat /etc/yunohost/current_host) + domain_list=$(sudo yunohost domain list --output-as plain --quiet) + + # add domain conf files + for domain in $domain_list; do + domain_conf_dir="${nginx_conf_dir}/${domain}.d" + mkdir -p "$domain_conf_dir" + + # NGINX server configuration + cat server.tpl.conf \ + | sed "s/{{ domain }}/${domain}/g" \ + > "${nginx_conf_dir}/${domain}.conf" + + [[ $main_domain != $domain ]] \ + && touch "${domain_conf_dir}/yunohost_local.conf" \ + || cp yunohost_local.conf "${domain_conf_dir}/yunohost_local.conf" + done + + # remove old domain conf files + conf_files=$(ls -1 /etc/nginx/conf.d \ + | awk '/^[^\.]+\.[^\.]+.*\.conf$/ { print $1 }') + for file in $conf_files; do + domain=${file%.conf} + [[ $domain_list =~ $domain ]] \ + || touch "${nginx_conf_dir}/${file}" + done + + # disable default site + mkdir -p "${nginx_dir}/sites-enabled" + touch "${nginx_dir}/sites-enabled/default" +} + +do_post_regen() { + # retrieve variables + # TODO: retrieve only changed/new domains + domain_list=$(sudo yunohost domain list --output-as plain --quiet) + + # create NGINX conf directories for domains + for domain in $domain_list; do + sudo mkdir -p "/etc/nginx/conf.d/${domain}.d" + done + + # TODO: only restart if conf changed + sudo service nginx restart +} + +FORCE=$2 + +case "$1" in + pre) + do_pre_regen $3 + ;; + post) + do_post_regen + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/data/templates/nginx/global.conf b/data/templates/nginx/plain/global.conf similarity index 100% rename from data/templates/nginx/global.conf rename to data/templates/nginx/plain/global.conf diff --git a/data/templates/nginx/ssowat.conf b/data/templates/nginx/plain/ssowat.conf similarity index 100% rename from data/templates/nginx/ssowat.conf rename to data/templates/nginx/plain/ssowat.conf diff --git a/data/templates/nginx/yunohost_admin.conf b/data/templates/nginx/plain/yunohost_admin.conf similarity index 100% rename from data/templates/nginx/yunohost_admin.conf rename to data/templates/nginx/plain/yunohost_admin.conf diff --git a/data/templates/nginx/yunohost_admin.conf.inc b/data/templates/nginx/plain/yunohost_admin.conf.inc similarity index 100% rename from data/templates/nginx/yunohost_admin.conf.inc rename to data/templates/nginx/plain/yunohost_admin.conf.inc diff --git a/data/templates/nginx/yunohost_api.conf.inc b/data/templates/nginx/plain/yunohost_api.conf.inc similarity index 100% rename from data/templates/nginx/yunohost_api.conf.inc rename to data/templates/nginx/plain/yunohost_api.conf.inc diff --git a/data/templates/nginx/yunohost_panel.conf.inc b/data/templates/nginx/plain/yunohost_panel.conf.inc similarity index 100% rename from data/templates/nginx/yunohost_panel.conf.inc rename to data/templates/nginx/plain/yunohost_panel.conf.inc diff --git a/data/templates/nginx/server.conf.sed b/data/templates/nginx/server.tpl.conf similarity index 100% rename from data/templates/nginx/server.conf.sed rename to data/templates/nginx/server.tpl.conf