From d29a3c112822c398f3da1b88e38d5179ace6cb83 Mon Sep 17 00:00:00 2001 From: Jimmy Monin Date: Sun, 3 Jun 2018 17:56:14 +0200 Subject: [PATCH] Add change_url script --- check_process | 2 +- scripts/change_url | 138 +++++++++++++++++++++++++++++++++++++++++++++ scripts/install | 11 ++-- scripts/restore | 1 - scripts/upgrade | 11 ++-- 5 files changed, 151 insertions(+), 12 deletions(-) create mode 100644 scripts/change_url diff --git a/check_process b/check_process index 13bb4ac..0749fa6 100644 --- a/check_process +++ b/check_process @@ -18,7 +18,7 @@ multi_instance=1 incorrect_path=1 port_already_use=0 - change_url=0 + change_url=1 ;;; Levels Level 1=auto Level 2=auto diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..50255cf --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,138 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= + +db_name=$(ynh_app_setting_get "$app" db_name) +db_pwd=$(ynh_app_setting_get $app db_pwd) +final_path=$(ynh_app_setting_get "$app" final_path) + +#================================================= +# CHECK PATHS SYNTAX +#================================================= + +test -n "$old_path" || old_path="/" +test -n "$new_path" || new_path="/" +new_path=$(ynh_normalize_url_path $new_path) +old_path=$(ynh_normalize_url_path $old_path) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF FILE +#================================================= + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + domain="$old_domain" + path_url="$new_path" + ynh_add_nginx_config + # Reference: https://meta.discourse.org/t/subfolder-support-with-docker/30507?u=falco&source_topic_id=54191 + if [ "$path_url" != "/" ] ; then + ynh_replace_string '$proxy_add_x_forwarded_for' '$http_your_original_ip_header' "/etc/nginx/conf.d/$domain.d/$app.conf" + fi + ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum "$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum "/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= + +# Stop Discourse service +systemctl stop $app + +discourse_config_file="$final_path/config/discourse.conf" +# Configure hostname +ynh_replace_string "hostname = .*" "hostname = \"$new_domain\"" "$discourse_config_file" +ynh_replace_string "relative_url_root = .*" "relative_url_root = ${path_url%/}" "$discourse_config_file" +ynh_replace_string "smtp_domain = .*" "smtp_domain = $new_domain" "$discourse_config_file" + +# Calculate and store the config file checksum +ynh_store_file_checksum "$discourse_config_file" + +# Change URL setting +echo "UPDATE site_settings SET value = replace(value, '${old_path%/}/images/', '${new_path%/}/images/'); +UPDATE site_settings SET value = '${new_path}') WHERE name='long_polling_base_url';" + +ynh_psql_connect_as $db_name $db_pwd $db_name <<< "UPDATE site_settings SET value = replace(value, '${old_path%/}/images/', '${new_path%/}/images/'); +UPDATE site_settings SET value = '${new_path}' WHERE name='long_polling_base_url';" + +# Get the number of Unicorn workers used +unicorn_workers=$(cat /etc/systemd/system/$app.service |grep UNICORN_WORKERS | sed "s/.*UNICORN_WORKERS=//") +if [ -z "$unicorn_workers" ] ; then + # By default, 3 workers are used + unicorn_workers=3 +fi +# Wait for discourse to be fully started +ynh_check_starting "INFO -- : worker=$((unicorn_workers-1)) ready" "$final_path/log/unicorn.stderr.log" "240" "$app" + +# # Remap URLs in forum posts +exec_login_as $app RAILS_ENV=production bundle exec script/discourse remap ${old_path%/}/uploads ${new_path%/}/uploads <<< "YES +# " + +rake_exec="exec_login_as $app RAILS_ENV=production bin/rake" + +# Regenerate assets +$rake_exec assets:precompile + +# Regenerate all forum posts +$rake_exec posts:rebake + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX +#================================================= + +systemctl reload nginx diff --git a/scripts/install b/scripts/install index 2f2172f..62c2f47 100644 --- a/scripts/install +++ b/scripts/install @@ -109,14 +109,15 @@ ynh_install_ruby $RUBY_VERSION # NGINX CONFIGURATION #================================================= -# Reference: https://meta.discourse.org/t/subfolder-support-with-docker/30507?u=falco&source_topic_id=54191 -if [ "$path_url" != "/" ] ; then - ynh_replace_string '$proxy_add_x_forwarded_for' '$http_your_original_ip_header' ../conf/nginx.conf -fi - # Create a dedicated nginx config ynh_add_nginx_config +# Reference: https://meta.discourse.org/t/subfolder-support-with-docker/30507?u=falco&source_topic_id=54191 +if [ "$path_url" != "/" ] ; then + ynh_replace_string '$proxy_add_x_forwarded_for' '$http_your_original_ip_header' "/etc/nginx/conf.d/$domain.d/$app.conf" +fi +ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" + #================================================= # SPECIFIC SETUP #================================================= diff --git a/scripts/restore b/scripts/restore index c1c56b3..5784b1b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -76,7 +76,6 @@ gem install bundler) # RESTORE THE POSTGRESQL DATABASE #================================================= -ynh_psql_test_if_first_run ynh_psql_test_if_first_run ynh_psql_setup_db "$db_name" "$db_name" "$db_pwd" # Set extensions diff --git a/scripts/upgrade b/scripts/upgrade index 1041a0c..6bf3417 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -75,14 +75,15 @@ ynh_install_ruby $RUBY_VERSION # NGINX CONFIGURATION #================================================= -# Reference: https://meta.discourse.org/t/subfolder-support-with-docker/30507?u=falco&source_topic_id=54191 -if [ "$path_url" != "/" ] ; then - ynh_replace_string '$proxy_add_x_forwarded_for' '$http_your_original_ip_header' ../conf/nginx.conf -fi - # Create a dedicated nginx config ynh_add_nginx_config +# Reference: https://meta.discourse.org/t/subfolder-support-with-docker/30507?u=falco&source_topic_id=54191 +if [ "$path_url" != "/" ] ; then + ynh_replace_string '$proxy_add_x_forwarded_for' '$http_your_original_ip_header' "/etc/nginx/conf.d/$domain.d/$app.conf" +fi +ynh_store_file_checksum "/etc/nginx/conf.d/$domain.d/$app.conf" + if ! ynh_is_upstream_up_to_date ; then #=================================================