1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/monitorix_ynh.git synced 2024-09-03 19:46:06 +02:00

Refactor change-url and use helper ynh_add_nginx_config

This commit is contained in:
Josué Tille 2018-05-07 23:08:03 +02:00
parent 6cda38f6db
commit 0dd44b1c15
11 changed files with 124 additions and 99 deletions

View file

@ -470,7 +470,7 @@ secure_log_date_format = %b %e
conn_type = socket conn_type = socket
list = /var/run/mysqld/mysqld.sock list = /var/run/mysqld/mysqld.sock
<desc> <desc>
/var/run/mysqld/mysqld.sock = 3306, __MYSQL_USER__, MYSQL_PASSWORD /var/run/mysqld/mysqld.sock = 3306, __MYSQL_USER__, __MYSQL_PASSWORD__
</desc> </desc>
rigid = 0, 2, 0, 0, 0, 0 rigid = 0, 2, 0, 0, 0, 0
limit = 100, 100, 100, 100, 100, 100 limit = 100, 100, 100, 100, 100, 100

View file

@ -1,8 +1,8 @@
location __YNH_WWW_PATH__ { location __PATH__ {
proxy_pass http://127.0.0.1:__SERVICE_PORT____YNH_WWW_PATH__; proxy_pass http://127.0.0.1:__PORT____PATH__;
allow 127.0.0.0/8; allow 127.0.0.0/8;
location ~ ^__YNH_WWW_PATH__/(.+\.png)$ { location ~ ^__PATH__/(.+\.png)$ {
alias /var/lib/monitorix/www/$1; alias /var/lib/monitorix/www/$1;
} }

View file

@ -1,6 +1,6 @@
server { server {
listen PORT; listen __PORT__;
listen [::]:PORT; listen [::]:__PORT__;
access_log /var/log/nginx/localhost-nginx_status_monitorix.lan-access.log; access_log /var/log/nginx/localhost-nginx_status_monitorix.lan-access.log;
error_log /var/log/nginx/localhost-nginx_status_monitorix.lan-error.log; error_log /var/log/nginx/localhost-nginx_status_monitorix.lan-error.log;

View file

@ -14,7 +14,7 @@
"email": "josue@familletille.ch" "email": "josue@familletille.ch"
}, },
"requirements": { "requirements": {
"yunohost": ">= 2.7.9" "yunohost": ">= 2.7.12"
}, },
"multi_instance": false, "multi_instance": false,
"services": [ "services": [

View file

@ -30,28 +30,26 @@ get_install_source() {
} }
config_nginx() { config_nginx() {
nginx_conf=../conf/nginx.conf ynh_add_nginx_config
ynh_replace_string __YNH_WWW_PATH__ $path $nginx_conf
ynh_replace_string __SERVICE_PORT__ $http_port $nginx_conf # Add special hostname for monitorix status
cp $nginx_conf /etc/nginx/conf.d/$domain.d/$app.conf nginx_status_conf="/etc/nginx/conf.d/monitorix_status.conf"
cp ../conf/nginx_status.conf $nginx_status_conf
# Add special hostname for monitorix status ynh_replace_string __PORT__ $nginx_status_port $nginx_status_conf
nginx_status_conf=../conf/nginx_status.conf
ynh_replace_string PORT $nginx_status_port $nginx_status_conf systemctl reload nginx
cp $nginx_status_conf /etc/nginx/conf.d/monitorix_status.conf
systemctl reload nginx.service
} }
config_monitorix() { config_monitorix() {
monitorix_conf=../conf/monitorix.conf monitorix_conf=/etc/monitorix/monitorix.conf
ynh_replace_string __SERVICE_PORT__ $http_port $monitorix_conf cp ../conf/monitorix.conf $monitorix_conf
ynh_replace_string __SERVICE_PORT__ $port $monitorix_conf
ynh_replace_string __YNH_DOMAIN__ $domain $monitorix_conf ynh_replace_string __YNH_DOMAIN__ $domain $monitorix_conf
ynh_replace_string __NGINX_STATUS_PORT__ $nginx_status_port $monitorix_conf ynh_replace_string __NGINX_STATUS_PORT__ $nginx_status_port $monitorix_conf
ynh_replace_string __YNH_WWW_PATH__ $path $monitorix_conf ynh_replace_string "__YNH_WWW_PATH__/" "${path_url%/}/" $monitorix_conf
ynh_replace_string __YNH_WWW_PATH__ $path_url $monitorix_conf
ynh_replace_string __MYSQL_USER__ $dbuser $monitorix_conf ynh_replace_string __MYSQL_USER__ $dbuser $monitorix_conf
ynh_replace_string MYSQL_PASSWORD $dbpass $monitorix_conf ynh_replace_string __MYSQL_PASSWORD__ $dbpass $monitorix_conf
cp $monitorix_conf /etc/monitorix/monitorix.conf
} }
set_permission() { set_permission() {

View file

@ -15,67 +15,41 @@ source ./experimental_helper.sh
source ./_common.sh source ./_common.sh
# Retrive arguments # Retrive arguments
path_url=$(ynh_normalize_url_path ${YNH_APP_NEW_PATH:-'/'})
old_domain=$YNH_APP_OLD_DOMAIN old_domain=$YNH_APP_OLD_DOMAIN
old_path=$YNH_APP_OLD_PATH domain=$YNH_APP_NEW_DOMAIN
port=$(ynh_app_setting_get "$app" http_port)
new_domain=$YNH_APP_NEW_DOMAIN nginx_status_port=$(ynh_app_setting_get "$app" nginx_status_port)
new_path=$YNH_APP_NEW_PATH dbuser=$app
dbname=$app
test -n "$old_path" || old_path="/" dbpass=$(ynh_app_setting_get "$app" mysqlpwd)
test -n "$new_path" || new_path="/"
new_path=$(ynh_normalize_url_path $new_path)
old_path=$(ynh_normalize_url_path $old_path)
http_port=$(ynh_app_setting_get "$app" http_port)
# 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 # STANDARD MODIFICATIONS
#================================================= #=================================================
# MODIFY URL IN NGINX CONF # Update nginx config
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf if [ "$old_domain" != "$domain" ]
# Change the path in the nginx config file
if [ $change_path -eq 1 ]
then then
ynh_replace_string "location $old_path" "location $new_path" "$nginx_conf_path" old_file_path="/etc/nginx/conf.d/$old_domain.d/$app.conf"
ynh_replace_string "http://127.0.0.1:$http_port$old_path;" "http://127.0.0.1:$http_port$new_path;" "$nginx_conf_path" new_file_path="/etc/nginx/conf.d/$domain.d/$app.conf"
ynh_replace_string "location ~ ^$old_path/(.+\.png)$" "location ~ ^$new_path/(.+\.png)$" "$nginx_conf_path" mv "$old_file_path" "$new_file_path"
# Change the checksum setting name
checksum_setting_old_name=checksum_${old_file_path//[\/ ]/_}
checksum_setting_new_name=checksum_${new_file_path//[\/ ]/_}
checksum_value=$(ynh_app_setting_get $app $checksum_setting_old_name)
ynh_app_setting_set $app $checksum_setting_new_name $checksum_value
fi fi
config_nginx
# Change the domain for nginx # Update monitorix configuration
if [ $change_domain -eq 1 ] config_monitorix
then
sudo mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
fi
# Update Monitorix Config
ynh_replace_string "base_url = $old_path" "base_url = $new_path" /etc/monitorix/monitorix.conf
ynh_replace_string "base_cgi = $old_path/cgi" "base_cgi = $new_path/cgi" /etc/monitorix/monitorix.conf
ynh_replace_string "url_prefix = http://127.0.0.1:$http_port$old_path" "url_prefix = http://127.0.0.1:$http_port$new_path" /etc/monitorix/monitorix.conf
ynh_replace_string "from_address = noreply@$old_domain" "from_address = noreply@$new_domain" /etc/monitorix/monitorix.conf
# Reload services
sudo systemctl reload nginx.service
# Reload monitorix # Reload monitorix
# While we call "restart" sometime for unknown reason monitorix don't cleanly restart. Probably on the stop instruction the webserver is not stoped before the new start instruction. # While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that
# So this fix that # So this fix that
sudo systemctl stop monitorix.service systemctl stop monitorix.service
sleep 1 sleep 1
sudo systemctl start monitorix.service pkill -f "monitorix-httpd listening on" || true
sleep 10 ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -39,4 +39,57 @@ ynh_app_package_version () {
fi fi
version_key=$(ynh_read_manifest "$manifest_path" "version") version_key=$(ynh_read_manifest "$manifest_path" "version")
echo "${version_key/*~ynh/}" echo "${version_key/*~ynh/}"
} }
#!/bin/bash
# Start or restart a service and follow its booting
#
# usage: ynh_check_starting "Line to match" [Log file] [Timeout] [Service name]
#
# | arg: Line to match - The line to find in the log to attest the service have finished to boot.
# | arg: Log file - The log file to watch
# | arg: Service name
# /var/log/$app/$app.log will be used if no other log is defined.
# | arg: Timeout - The maximum time to wait before ending the watching. Defaut 300 seconds.
ynh_check_starting () {
local line_to_match="$1"
local service_name="${4:-$app}"
local app_log="${2:-/var/log/$service_name/$service_name.log}"
local timeout=${3:-300}
ynh_clean_check_starting () {
# Stop the execution of tail.
kill -s 15 $pid_tail 2>&1
ynh_secure_remove "$templog" 2>&1
}
echo "Starting of $service_name" >&2
systemctl stop $service_name
local templog="$(mktemp)"
# Following the starting of the app in its log
tail -F -n0 "$app_log" > "$templog" &
# Get the PID of the tail command
local pid_tail=$!
systemctl start $service_name
local i=0
for i in `seq 1 $timeout`
do
# Read the log until the sentence is found, that means the app finished to start. Or run until the timeout
if grep --quiet "$line_to_match" "$templog"
then
echo "The service $service_name has correctly started." >&2
break
fi
echo -n "." >&2
sleep 1
done
if [ $i -eq $timeout ]
then
echo "The service $service_name didn't fully started before the timeout." >&2
fi
echo ""
ynh_clean_check_starting
}

View file

@ -16,17 +16,17 @@ source ./_common.sh
# Retrieve arguments # Retrieve arguments
domain=$YNH_APP_ARG_DOMAIN domain=$YNH_APP_ARG_DOMAIN
path=$(ynh_normalize_url_path $YNH_APP_ARG_PATH) path_url=$(ynh_normalize_url_path $YNH_APP_ARG_PATH)
# Check domain/path availability # Check domain/path availability
test $(ynh_webpath_available $domain $path) == 'True' || ynh_die "$domain$path is not available, please use an other domain or path." test $(ynh_webpath_available $domain $path_url) == 'True' || ynh_die "$domain$path_url is not available, please use an other domain or path."
ynh_webpath_register $app $domain $path ynh_webpath_register $app $domain $path_url
# Find a port for built-in monitorix HTTP server # Find a port for built-in monitorix HTTP server
http_port=$(ynh_find_port 8080) port=$(ynh_find_port 8080)
nginx_status_port=$(ynh_find_port $(($http_port +1))) nginx_status_port=$(ynh_find_port $(($port +1)))
ynh_app_setting_set $app http_port $http_port ynh_app_setting_set $app http_port $port
ynh_app_setting_set $app nginx_status_port $nginx_status_port ynh_app_setting_set $app nginx_status_port $nginx_status_port
#================================================= #=================================================
@ -66,9 +66,9 @@ set_permission
yunohost service add monitorix yunohost service add monitorix
# Reload monitorix # Reload monitorix
# While we call "restart" sometime for unknown reason monitorix don't cleanly restart. Probably on the stop instruction the webserver is not stoped before the new start instruction. # While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that
# So this fix that # So this fix that
sudo systemctl stop monitorix.service sudo systemctl stop monitorix.service
sleep 1 sleep 1
sudo systemctl start monitorix.service pkill -f "monitorix-httpd listening on" || true
sleep 10 ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -21,10 +21,6 @@ domain=$(ynh_app_setting_get "$app" domain)
# Stop service # Stop service
systemctl stop monitorix.service systemctl stop monitorix.service
# Suppression de la configuration nginx
ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf"
systemctl reload nginx.service
# Drop MySQL database and user # Drop MySQL database and user
dbname=$app dbname=$app
dbuser=$app dbuser=$app
@ -35,6 +31,10 @@ ynh_mysql_drop_user "$dbuser" || true
ynh_secure_remove /var/lib/monitorix ynh_secure_remove /var/lib/monitorix
ynh_secure_remove /usr/share/yunohost/hooks/post_iptable_rules/50-$app ynh_secure_remove /usr/share/yunohost/hooks/post_iptable_rules/50-$app
# Remove nginx config
ynh_secure_remove "/etc/nginx/conf.d/monitorix_status.conf"
ynh_remove_nginx_config
# Autoremove package # Autoremove package
ynh_remove_app_dependencies ynh_remove_app_dependencies
ynh_package_autoremove monitorix ynh_package_autoremove monitorix

View file

@ -16,10 +16,10 @@ source ../settings/scripts/_common.sh
# Retrieve old app settings # Retrieve old app settings
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get "$app" domain)
path=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path)) path_url=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path))
# Check domain/path availability # Check domain/path availability
ynh_webpath_available $domain $path || ynh_die "$domain/$path is not available, please use an other domain or path." ynh_webpath_available $domain $path_url || ynh_die "$domain/$path_url is not available, please use an other domain or path."
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
@ -52,9 +52,9 @@ set_permission
systemctl reload nginx.service systemctl reload nginx.service
# Reload monitorix # Reload monitorix
# While we call "restart" sometime for unknown reason monitorix don't cleanly restart. Probably on the stop instruction the webserver is not stoped before the new start instruction. # While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that
# So this fix that # So this fix that
sudo systemctl stop monitorix.service systemctl stop monitorix.service
sleep 1 sleep 1
sudo systemctl start monitorix.service pkill -f "monitorix-httpd listening on" || true
sleep 10 ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -16,8 +16,8 @@ source ./_common.sh
# Retrieve app settings # Retrieve app settings
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get "$app" domain)
path=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path)) path_url=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path))
http_port=$(ynh_app_setting_get "$app" http_port) port=$(ynh_app_setting_get "$app" http_port)
nginx_status_port=$(ynh_app_setting_get "$app" nginx_status_port) nginx_status_port=$(ynh_app_setting_get "$app" nginx_status_port)
dbuser=$app dbuser=$app
dbname=$app dbname=$app
@ -60,9 +60,9 @@ cp ../conf/post_iptable_rules_hook /usr/share/yunohost/hooks/post_iptable_rules/
set_permission set_permission
# Reload monitorix # Reload monitorix
# While we call "restart" sometime for unknown reason monitorix don't cleanly restart. Probably on the stop instruction the webserver is not stoped before the new start instruction. # While we stop monitorix sometime the built-in web server is not stopped cleanly. So are sure that everything is cleanly stoped by that
# So this fix that # So this fix that
sudo systemctl stop monitorix.service sudo systemctl stop monitorix.service
sleep 1 sleep 1
sudo systemctl start monitorix.service pkill -f "monitorix-httpd listening on" || true
sleep 10 ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'