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
list = /var/run/mysqld/mysqld.sock
<desc>
/var/run/mysqld/mysqld.sock = 3306, __MYSQL_USER__, MYSQL_PASSWORD
/var/run/mysqld/mysqld.sock = 3306, __MYSQL_USER__, __MYSQL_PASSWORD__
</desc>
rigid = 0, 2, 0, 0, 0, 0
limit = 100, 100, 100, 100, 100, 100

View file

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

View file

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

View file

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

View file

@ -30,28 +30,26 @@ get_install_source() {
}
config_nginx() {
nginx_conf=../conf/nginx.conf
ynh_replace_string __YNH_WWW_PATH__ $path $nginx_conf
ynh_replace_string __SERVICE_PORT__ $http_port $nginx_conf
cp $nginx_conf /etc/nginx/conf.d/$domain.d/$app.conf
ynh_add_nginx_config
# Add special hostname for monitorix status
nginx_status_conf=../conf/nginx_status.conf
ynh_replace_string PORT $nginx_status_port $nginx_status_conf
cp $nginx_status_conf /etc/nginx/conf.d/monitorix_status.conf
nginx_status_conf="/etc/nginx/conf.d/monitorix_status.conf"
cp ../conf/nginx_status.conf $nginx_status_conf
ynh_replace_string __PORT__ $nginx_status_port $nginx_status_conf
systemctl reload nginx.service
systemctl reload nginx
}
config_monitorix() {
monitorix_conf=../conf/monitorix.conf
ynh_replace_string __SERVICE_PORT__ $http_port $monitorix_conf
monitorix_conf=/etc/monitorix/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 __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_PASSWORD $dbpass $monitorix_conf
cp $monitorix_conf /etc/monitorix/monitorix.conf
ynh_replace_string __MYSQL_PASSWORD__ $dbpass $monitorix_conf
}
set_permission() {

View file

@ -15,67 +15,41 @@ source ./experimental_helper.sh
source ./_common.sh
# Retrive arguments
path_url=$(ynh_normalize_url_path ${YNH_APP_NEW_PATH:-'/'})
old_domain=$YNH_APP_OLD_DOMAIN
old_path=$YNH_APP_OLD_PATH
new_domain=$YNH_APP_NEW_DOMAIN
new_path=$YNH_APP_NEW_PATH
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)
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
domain=$YNH_APP_NEW_DOMAIN
port=$(ynh_app_setting_get "$app" http_port)
nginx_status_port=$(ynh_app_setting_get "$app" nginx_status_port)
dbuser=$app
dbname=$app
dbpass=$(ynh_app_setting_get "$app" mysqlpwd)
#=================================================
# STANDARD MODIFICATIONS
#=================================================
# MODIFY URL IN NGINX CONF
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 ]
# Update nginx config
if [ "$old_domain" != "$domain" ]
then
ynh_replace_string "location $old_path" "location $new_path" "$nginx_conf_path"
ynh_replace_string "http://127.0.0.1:$http_port$old_path;" "http://127.0.0.1:$http_port$new_path;" "$nginx_conf_path"
ynh_replace_string "location ~ ^$old_path/(.+\.png)$" "location ~ ^$new_path/(.+\.png)$" "$nginx_conf_path"
old_file_path="/etc/nginx/conf.d/$old_domain.d/$app.conf"
new_file_path="/etc/nginx/conf.d/$domain.d/$app.conf"
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
config_nginx
# Change the domain for nginx
if [ $change_domain -eq 1 ]
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
# Update monitorix configuration
config_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
sudo systemctl stop monitorix.service
systemctl stop monitorix.service
sleep 1
sudo systemctl start monitorix.service
sleep 10
pkill -f "monitorix-httpd listening on" || true
ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -40,3 +40,56 @@ ynh_app_package_version () {
version_key=$(ynh_read_manifest "$manifest_path" "version")
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
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
test $(ynh_webpath_available $domain $path) == 'True' || ynh_die "$domain$path is not available, please use an other domain or path."
ynh_webpath_register $app $domain $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_url
# Find a port for built-in monitorix HTTP server
http_port=$(ynh_find_port 8080)
nginx_status_port=$(ynh_find_port $(($http_port +1)))
port=$(ynh_find_port 8080)
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
#=================================================
@ -66,9 +66,9 @@ set_permission
yunohost service add 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
sudo systemctl stop monitorix.service
sleep 1
sudo systemctl start monitorix.service
sleep 10
pkill -f "monitorix-httpd listening on" || true
ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -21,10 +21,6 @@ domain=$(ynh_app_setting_get "$app" domain)
# Stop 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
dbname=$app
dbuser=$app
@ -35,6 +31,10 @@ ynh_mysql_drop_user "$dbuser" || true
ynh_secure_remove /var/lib/monitorix
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
ynh_remove_app_dependencies
ynh_package_autoremove monitorix

View file

@ -16,10 +16,10 @@ source ../settings/scripts/_common.sh
# Retrieve old app settings
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
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
@ -52,9 +52,9 @@ set_permission
systemctl reload nginx.service
# 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
sudo systemctl stop monitorix.service
systemctl stop monitorix.service
sleep 1
sudo systemctl start monitorix.service
sleep 10
pkill -f "monitorix-httpd listening on" || true
ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'

View file

@ -16,8 +16,8 @@ source ./_common.sh
# Retrieve app settings
domain=$(ynh_app_setting_get "$app" domain)
path=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path))
http_port=$(ynh_app_setting_get "$app" http_port)
path_url=$(ynh_normalize_url_path $(ynh_app_setting_get "$app" path))
port=$(ynh_app_setting_get "$app" http_port)
nginx_status_port=$(ynh_app_setting_get "$app" nginx_status_port)
dbuser=$app
dbname=$app
@ -60,9 +60,9 @@ cp ../conf/post_iptable_rules_hook /usr/share/yunohost/hooks/post_iptable_rules/
set_permission
# 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
sudo systemctl stop monitorix.service
sleep 1
sudo systemctl start monitorix.service
sleep 10
pkill -f "monitorix-httpd listening on" || true
ynh_check_starting ' - Ok, ready.' '/var/log/monitorix'