From 4fd3a0f5bb14a6b7705f87d2bb96af8ee96f168d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Fri, 10 Apr 2020 22:02:55 +0200 Subject: [PATCH] Use uwsgi helper --- conf/nginx.conf | 2 +- conf/{searx.ini => uwsgi.ini} | 0 scripts/_common.sh | 125 ++++++++++++++++++++++++++++++++++ scripts/backup | 4 +- scripts/change_url | 2 +- scripts/install | 9 +-- scripts/remove | 9 +-- scripts/restore | 8 ++- scripts/upgrade | 11 +-- 9 files changed, 147 insertions(+), 23 deletions(-) rename conf/{searx.ini => uwsgi.ini} (100%) diff --git a/conf/nginx.conf b/conf/nginx.conf index 3261a00..4da7fc9 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -9,7 +9,7 @@ location __PATH__/ { uwsgi_param SCRIPT_NAME '__PATH_NO_ROOT__'; include uwsgi_params; uwsgi_modifier1 30; - uwsgi_pass unix:///run/uwsgi/app/searx/socket; + uwsgi_pass unix:///var/run/__NAME__/app.socket; # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; diff --git a/conf/searx.ini b/conf/uwsgi.ini similarity index 100% rename from conf/searx.ini rename to conf/uwsgi.ini diff --git a/scripts/_common.sh b/scripts/_common.sh index 03febb9..87ad26e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -6,3 +6,128 @@ # dependencies used by the app pkg_dependencies="git build-essential libxslt-dev python3-dev python3-venv python3-cffi python3-babel zlib1g-dev libffi-dev libssl-dev python3-lxml uwsgi uwsgi-plugin-python3" + +#================================================= +# UWSGI HELPERS +#================================================= + +# Check if system wide templates are available and correcly configured +# +# usage: ynh_check_global_uwsgi_config +ynh_check_global_uwsgi_config () { + uwsgi --version || ynh_die --message "You need to add uwsgi (and appropriate plugin) as a dependency" + + cat > /etc/systemd/system/uwsgi-app@.service < uwsgi-app@app` +ynh_add_uwsgi_service () { + ynh_check_global_uwsgi_config + + local others_var=${1:-} + local finaluwsgiini="/etc/uwsgi/apps-available/$app.ini" + + # www-data group is needed since it is this nginx who will start the service + usermod --append --groups www-data "$app" || ynh_die --message "It wasn't possible to add user $app to group www-data" + + ynh_backup_if_checksum_is_different "$finaluwsgiini" + cp ../conf/uwsgi.ini "$finaluwsgiini" + + # To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable. + # Substitute in a nginx config file only if the variable is not empty + if test -n "${final_path:-}"; then + ynh_replace_string --match_string "__FINALPATH__" --replace_string "$final_path" --target_file "$finaluwsgiini" + fi + if test -n "${path_url:-}"; then + ynh_replace_string --match_string "__PATH__" --replace_string "$path_url" --target_file "$finaluwsgiini" + fi + if test -n "${app:-}"; then + ynh_replace_string --match_string "__APP__" --replace_string "$app" --target_file "$finaluwsgiini" + fi + + # Replace all other variable given as arguments + for var_to_replace in $others_var + do + # ${var_to_replace^^} make the content of the variable on upper-cases + # ${!var_to_replace} get the content of the variable named $var_to_replace + ynh_replace_string --match_string "__${var_to_replace^^}__" --replace_string "${!var_to_replace}" --target_file "$finaluwsgiini" + done + + ynh_store_file_checksum --file "$finaluwsgiini" + + chown $app:root "$finaluwsgiini" + + # make sure the folder for logs exists and set authorizations + mkdir -p /var/log/uwsgi/$app + chown $app:root /var/log/uwsgi/$app + chmod -R u=rwX,g=rX,o= /var/log/uwsgi/$app + + # Setup specific Systemd rules if necessary + test -e ../conf/uwsgi-app@override.service && \ + mkdir /etc/systemd/system/uwsgi-app@$app.service.d && \ + cp ../conf/uwsgi-app@override.service /etc/systemd/system/uwsgi-app@$app.service.d/override.conf + + systemctl daemon-reload + systemctl enable "uwsgi-app@$app.service" + + # Add as a service + yunohost service add "uwsgi-app@$app" --log "/var/log/uwsgi/$app/$app.log" +} + +# Remove the dedicated uwsgi ini file +# +# usage: ynh_remove_uwsgi_service +ynh_remove_uwsgi_service () { + local finaluwsgiini="/etc/uwsgi/apps-available/$app.ini" + if [ -e "$finaluwsgiini" ]; then + systemctl disable "uwsgi-app@$app.service" + yunohost service remove "uwsgi-app@$app" + + ynh_secure_remove --file="$finaluwsgiini" + ynh_secure_remove --file="/var/log/uwsgi/$app" + ynh_secure_remove --file="/etc/systemd/system/uwsgi-app@$app.service.d" + fi +} diff --git a/scripts/backup b/scripts/backup index 36d515c..b4faae1 100755 --- a/scripts/backup +++ b/scripts/backup @@ -49,7 +49,9 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= ynh_script_progression --message="Backing up uWSGI configuration..." -ynh_backup --src_path="/etc/uwsgi/apps-available/$app.ini" +ynh_backup --src_path "/etc/uwsgi/apps-available/$app.ini" +ynh_backup --src_path "/etc/systemd/system/uwsgi-app@.service" +ynh_backup --src_path "/var/log/uwsgi/$app" #================================================= # END OF SCRIPT diff --git a/scripts/change_url b/scripts/change_url index ceb7b88..5ee60b2 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -101,7 +101,7 @@ ynh_replace_string --match_string="base_url : https://${old_domain}${old_path%/} #================================================= ynh_script_progression --message="Starting Searx..." --weight=2 -ynh_systemd_action --service_name=uwsgi --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/app/$app.log" +ynh_systemd_action --service_name=uwsgi-app@$app.service --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/$app/$app.log" #================================================= # RELOAD NGINX diff --git a/scripts/install b/scripts/install index f151451..92c8131 100644 --- a/scripts/install +++ b/scripts/install @@ -98,7 +98,7 @@ ynh_replace_string --match_string="werkzeug.contrib.fixers" --replace_string="we #================================================= ynh_script_progression --message="Installing Searx..." -python3 -m venv "$final_path" +python3 -m venv --system-site-packages "$final_path" set +u; source $final_path/bin/activate; set -u pip3 install -U pip setuptools pip3 install --requirement $final_path/requirements-ynh.txt @@ -130,10 +130,7 @@ chown $app: --recursive "$final_path" #================================================= ynh_script_progression --message="Configuring uWSGI for Searx..." -cp ../conf/searx.ini /etc/uwsgi/apps-available/$app.ini -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file=/etc/uwsgi/apps-available/$app.ini -ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/uwsgi/apps-available/$app.ini -ln -s /etc/uwsgi/apps-available/$app.ini /etc/uwsgi/apps-enabled/$app.ini +ynh_add_uwsgi_service #================================================= # ADVERTISE SERVICE IN ADMIN PANEL @@ -148,7 +145,7 @@ yunohost service add uwsgi --log "/var/log/uwsgi/app/$app.log" ynh_script_progression --message="Starting Searx..." --weight=4 # Wait for searx to be fully started -ynh_systemd_action --service_name=uwsgi --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/app/$app.log" +ynh_systemd_action --service_name=uwsgi-app@$app.service --action=start --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/$app/$app.log" #================================================= # GENERIC FINALISATION diff --git a/scripts/remove b/scripts/remove index 2362627..9b517ff 100644 --- a/scripts/remove +++ b/scripts/remove @@ -27,13 +27,8 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) ynh_script_progression --message="Stopping and removing the systemd service..." # Remove the uwsgi configuration -ynh_systemd_action --service_name=uwsgi --action=stop -if [ -h "/etc/uwsgi/apps-enabled/$app.ini" ] -then - ynh_print_info --message="Delete uwsgi config for $app" - ynh_secure_remove --file="/etc/uwsgi/apps-enabled/$app.ini" -fi -ynh_secure_remove --file="/etc/uwsgi/apps-available/$app.ini" +ynh_systemd_action --service_name "uwsgi-app@$app.service" --action stop +ynh_remove_uwsgi_service #================================================= # REMOVE DEPENDENCIES diff --git a/scripts/restore b/scripts/restore index 7a6b06d..3ddd68c 100755 --- a/scripts/restore +++ b/scripts/restore @@ -83,7 +83,11 @@ chown $app: --recursive "$final_path" #================================================= ynh_restore_file --origin_path="/etc/uwsgi/apps-available/$app.ini" -ln -s /etc/uwsgi/apps-available/$app.ini /etc/uwsgi/apps-enabled/$app.ini +ynh_restore_file --origin_path "/etc/systemd/system/uwsgi-app@.service" +ynh_restore_file --origin_path "/var/log/uwsgi/$app" +chown $app:root /var/log/uwsgi/$app +systemctl daemon-reload +systemctl enable "uwsgi-app@$app.service" #================================================= # GENERIC FINALISATION @@ -100,7 +104,7 @@ ynh_systemd_action --service_name=nginx --action=reload ynh_script_progression --message="Starting Searx..." --weight=4 # Wait for searx to be fully started -ynh_systemd_action --service_name=uwsgi --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/app/$app.log" +ynh_systemd_action --service_name=uwsgi-app@$app.service --action=start --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/$app/$app.log" #================================================= # END OF SCRIPT diff --git a/scripts/upgrade b/scripts/upgrade index 646ec62..29de5de 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -125,7 +125,7 @@ ynh_script_progression --message="Upgrading Searx..." --weight=7 # Clean venv if it still on python2 test -e $final_path/bin/python3 || ynh_secure_remove --file=$final_path -python3 -m venv "$final_path" +python3 -m venv --system-site-packages "$final_path" set +u; source $final_path/bin/activate; set -u pip3 install -U pip setuptools pip3 install --requirement $final_path/requirements-ynh.txt --upgrade @@ -159,9 +159,10 @@ chown $app: --recursive "$final_path" #================================================= ynh_script_progression --message="Reconfiguring uWSGI for Searx..." -cp ../conf/searx.ini /etc/uwsgi/apps-available/$app.ini -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file=/etc/uwsgi/apps-available/$app.ini -ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file=/etc/uwsgi/apps-available/$app.ini +# Clean old files +ynh_secure_remove --file="/etc/uwsgi/apps-enabled/$app.ini" +ynh_secure_remove --file="/etc/uwsgi/apps-available/$app.ini" +ynh_add_uwsgi_service #================================================= # CHECK SEARX STARTING @@ -169,7 +170,7 @@ ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" ynh_script_progression --message="Restarting Searx..." --weight=3 # Wait for searx to be fully started -ynh_systemd_action --service_name=uwsgi --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/app/$app.log" +ynh_systemd_action --service_name=uwsgi-app@$app.service --action=restart --line_match="spawned uWSGI master process" --log_path="/var/log/uwsgi/$app/$app.log" #================================================= # SETUP SSOWAT