From 1bc6347115b5c39f243402b7ffe28b9e45472012 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 12 Feb 2020 21:38:32 +0100 Subject: [PATCH 1/3] Update check_process --- check_process | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/check_process b/check_process index 1786d8e..5ea1043 100644 --- a/check_process +++ b/check_process @@ -17,7 +17,12 @@ setup_private=1 setup_public=1 upgrade=1 - upgrade=1 from_commit=280ba0d4a9ebb9d8948e0db97200dbcb89b6c323 + # 1.3.1 + upgrade=1 from_commit=22ca62492ce32d22ac710758bca4e3be0534566c + # 1.4.1 + upgrade=1 from_commit=33620aacc6f6e2ac003ae6bd2de57dc5d74a5343 + # 2.0.0 + upgrade=1 from_commit=032acd21b36030c9c1680d882d54c8011439e83c backup_restore=1 multi_instance=1 # This test is no longer necessary since the version 2.7 (PR: https://github.com/YunoHost/yunohost/pull/304), you can still do it if your app could be installed with this version. From 2bb6445d0c2a851005dabf9473b6908efda729f8 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 13 Feb 2020 20:02:14 +0100 Subject: [PATCH 2/3] fix upgrade from 1.4.1 --- scripts/upgrade | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index f3f5e10..b519a18 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -102,8 +102,11 @@ then tmpdir="$(mktemp -d)" # Backup the config file in the temp dir - cp -a "$final_path/config/local-production.json" "$tmpdir/local-production.json" cp -a "$final_path/config/production.yaml" "$tmpdir/production.yaml" + if [ -s "$final_path/config/local-production.json" ] + then + cp -a "$final_path/config/local-production.json" "$tmpdir/local-production.json" + fi # Remove the app directory securely ynh_secure_remove --file="$final_path" From a2149a69cb183cb3a8793713c8f0365357d0a762 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 23 Feb 2020 19:42:08 +0100 Subject: [PATCH 3/3] Applying example_ynh --- README.md | 1 - conf/nginx.conf | 208 ++++++++++++++++++++++++------------------------ scripts/backup | 3 +- scripts/install | 17 +++- scripts/remove | 9 ++- scripts/restore | 8 +- scripts/upgrade | 13 ++- 7 files changed, 139 insertions(+), 120 deletions(-) diff --git a/README.md b/README.md index 22f9279..ddc504a 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,6 @@ Want to see in action? * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/peertube%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/peertube/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/peertube%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/peertube/) -* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/peertube%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/peertube/) ## Links diff --git a/conf/nginx.conf b/conf/nginx.conf index 13aecb8..3531e4e 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,121 +1,117 @@ - # Bypass PeerTube for performance reasons. Could be removed - location ~ ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$ { - add_header Cache-Control "public, max-age=31536000, immutable"; +# Bypass PeerTube for performance reasons. Could be removed +location ~ ^/client/(.*\.(js|css|woff2|otf|ttf|woff|eot))$ { + add_header Cache-Control "public, max-age=31536000, immutable"; - alias __FINALPATH__/client/dist/$1; - } - # Bypass PeerTube for performance reasons. Could be removed - location ~ ^/static/(thumbnails|avatars)/ { - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } + alias __FINALPATH__/client/dist/$1; +} +# Bypass PeerTube for performance reasons. Could be removed +location ~ ^/static/(thumbnails|avatars)/ { + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + + # Cache 2 hours + add_header Cache-Control "public, max-age=7200"; + + root /home/yunohost.app/__NAME__/storage; + + rewrite ^/static/(thumbnails|avatars)/(.*)$ /$1/$2 break; + try_files $uri /; +} + +location / { + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + proxy_pass http://localhost:__PORT__; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # This is the maximum upload size, which roughly matches the maximum size of a video file + # you can send via the API or the web interface. By default this is 8GB, but administrators + # can increase or decrease the limit. Currently there's no way to communicate this limit + # to users automatically, so you may want to leave a note in your instance 'about' page if + # you change this. + # + # Note that temporary space is needed equal to the total size of all concurrent uploads. + # This data gets stored in /var/lib/nginx by default, so you may want to put this directory + # on a dedicated filesystem. + # + client_max_body_size 8G; + proxy_connect_timeout 600; + proxy_send_timeout 600; + proxy_read_timeout 600; + send_timeout 600; + + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; +} + +# Bypass PeerTube for performance reasons. Could be removed +location ~ ^/static/(webseed|redundancy)/ { + # Clients usually have 4 simultaneous webseed connections, so the real limit is 3MB/s per client + limit_rate 800k; + + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + + if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - # Cache 2 hours - add_header Cache-Control "public, max-age=7200"; - - root /home/yunohost.app/__NAME__/storage; - - rewrite ^/static/(thumbnails|avatars)/(.*)$ /$1/$2 break; - try_files $uri /; - } - - location / { - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - proxy_pass http://localhost:__PORT__; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - # This is the maximum upload size, which roughly matches the maximum size of a video file - # you can send via the API or the web interface. By default this is 8GB, but administrators - # can increase or decrease the limit. Currently there's no way to communicate this limit - # to users automatically, so you may want to leave a note in your instance 'about' page if - # you change this. - # - # Note that temporary space is needed equal to the total size of all concurrent uploads. - # This data gets stored in /var/lib/nginx by default, so you may want to put this directory - # on a dedicated filesystem. - # - client_max_body_size 8G; - proxy_connect_timeout 600; - proxy_send_timeout 600; - proxy_read_timeout 600; - send_timeout 600; - - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Don't spam access log file with byte range requests + access_log off; } - # Bypass PeerTube for performance reasons. Could be removed - location ~ ^/static/(webseed|redundancy)/ { - # Clients usually have 4 simultaneous webseed connections, so the real limit is 3MB/s per client - limit_rate 800k; + root /home/yunohost.app/__NAME__/storage; - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } + rewrite ^/static/webseed/(.*)$ /videos/$1 break; + rewrite ^/static/redundancy/(.*)$ /redundancy/$1 break; - if ($request_method = 'GET') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + try_files $uri /; +} - # Don't spam access log file with byte range requests - access_log off; - } - - root /home/yunohost.app/__NAME__/storage; - - rewrite ^/static/webseed/(.*)$ /videos/$1 break; - rewrite ^/static/redundancy/(.*)$ /redundancy/$1 break; - - try_files $uri /; - - - } - - # Websocket tracker - location /tracker/socket { - # Peers send a message to the tracker every 15 minutes - # Don't close the websocket before this time - proxy_read_timeout 1200s; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $host; - proxy_pass http://localhost:__PORT__; - } +# Websocket tracker +location /tracker/socket { + # Peers send a message to the tracker every 15 minutes + # Don't close the websocket before this time + proxy_read_timeout 1200s; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_pass http://localhost:__PORT__; +} location /socket.io { - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $host; - - proxy_pass http://localhost:__PORT__; - - # enable WebSockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_pass http://localhost:__PORT__; + # enable WebSockets + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; +} diff --git a/scripts/backup b/scripts/backup index 40f3993..a708505 100644 --- a/scripts/backup +++ b/scripts/backup @@ -13,6 +13,7 @@ source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= +ynh_print_info --message="Managing script failure..." ynh_clean_setup () { ynh_clean_check_starting @@ -38,7 +39,7 @@ db_name=$(ynh_app_setting_get --app=$app --key=psql_db) #================================================= ynh_print_info --message="Stopping a systemd service..." -ynh_systemd_action --service_name=$app --action="stop" +ynh_systemd_action --service_name=$app --action="stop" --log_path="systemd" #================================================= # BACKUP THE APP MAIN DIR diff --git a/scripts/install b/scripts/install index aa37bd1..2ea1c77 100644 --- a/scripts/install +++ b/scripts/install @@ -14,6 +14,7 @@ source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= +ynh_print_info --message="Managing script failure..." ynh_clean_setup () { ynh_clean_check_starting @@ -24,6 +25,7 @@ ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= +ynh_print_info --message="Retrieving arguments from the manifest..." domain=$YNH_APP_ARG_DOMAIN path_url="/" @@ -61,7 +63,7 @@ ynh_app_setting_set --app=$app --key=is_public --value=$is_public #================================================= ynh_print_info --message="Configuring firewall..." -# Find a free port +# Find an available port port=$(ynh_find_port --port=9000) ynh_app_setting_set --app=$app --key=port --value=$port @@ -132,7 +134,7 @@ ynh_system_user_create --username=$app --home_dir=$final_path #================================================= # CREATE THE DATA DIRECTORY #================================================= -ynh_print_info --message="Create the data directory..." +ynh_print_info --message="Creating the data directory..." # Define app's data directory datadir="/home/yunohost.app/${app}/storage" @@ -146,6 +148,7 @@ chown -R "$app":"$app" "$datadir" #================================================= # MODIFY A CONFIG FILE #================================================= +ynh_print_info --message="Modifying a config file..." cp ../conf/production.yaml "$final_path/config/production.yaml" ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$final_path/config/production.yaml" @@ -161,6 +164,7 @@ cp ../conf/local-production.json "$final_path/config/local-production.json" #================================================= # FIX NGINX DOMAIN CONFIGURATION #================================================= +ynh_print_info --message="Fixing nginx domain configuration..." cp -R ../conf/nginx_regen_conf.hook /usr/share/yunohost/hooks/conf_regen/15-nginx_$app ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="/usr/share/yunohost/hooks/conf_regen/15-nginx_$app" @@ -169,6 +173,7 @@ yunohost tools regen-conf nginx #================================================= # STORE THE CHECKSUM OF THE CONFIG FILE #================================================= +ynh_print_info --message="Storing the config file checksum..." # Calculate and store the config file checksum into the app settings ynh_store_file_checksum --file="$final_path/config/production.yaml" @@ -177,6 +182,7 @@ ynh_store_file_checksum --file="$final_path/config/local-production.json" #================================================= # BUILD YARN DEPENDENCIES #================================================= +ynh_print_info --message="Building yarn dependencies..." chown -R "$app":"$app" $final_path @@ -188,6 +194,7 @@ popd #================================================= # SETUP SYSTEMD #================================================= +ynh_print_info --message="Configuring a systemd service..." ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service" # Create a dedicated systemd config @@ -198,6 +205,7 @@ ynh_add_systemd_config #================================================= # SECURE FILES AND DIRECTORIES #================================================= +ynh_print_info --message="Securing files and directories..." # Set permissions to app files chown -R "$app":"$app" $final_path @@ -211,10 +219,10 @@ ynh_print_info --message="Configuring log rotation..." ynh_use_logrotate --logfile="/home/yunohost.app/${app}/storage/logs/peertube.log" #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# INTEGRATE SERVICE IN YUNOHOST #================================================= +ynh_print_info --message="Integrating service in YunoHost..." -# if using yunohost version 3.2 or more in the 'manifest.json', a description can be added yunohost service add $app --description "$app daemon for Peertube" --log "/home/yunohost.app/${app}/storage/logs/peertube.log" #================================================= @@ -222,6 +230,7 @@ yunohost service add $app --description "$app daemon for Peertube" --log "/home/ #================================================= ynh_print_info --message="Starting a systemd service..." +# Start a systemd service ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost" #================================================= diff --git a/scripts/remove b/scripts/remove index df5dca4..3f3420e 100644 --- a/scripts/remove +++ b/scripts/remove @@ -27,11 +27,12 @@ admin_email=$(ynh_app_setting_get --app=$app --key=admin_email) #================================================= # STANDARD REMOVE #================================================= -# REMOVE SERVICE FROM ADMIN PANEL +# REMOVE SERVICE INTEGRATION IN YUNOHOST #================================================= +ynh_print_info --message="Removing service integration in YunoHost..." -# Remove a service from the admin panel, added by `yunohost service add` -if ynh_exec_warn_less yunohost service status $app >/dev/null 2>&1 +# Remove the service from the list of services known by Yunohost (added from `yunohost service add`) +if ynh_exec_warn_less yunohost service status $app >/dev/null then ynh_print_info --message="Removing $app service..." yunohost service remove $app @@ -89,6 +90,7 @@ ynh_remove_logrotate #================================================= # CLOSE A PORT #================================================= +ynh_print_info --message="Closing a port..." if yunohost firewall list | grep -q "\- $port$" then @@ -101,6 +103,7 @@ fi #================================================= # RESTORE ORIGINAL NGINX DOMAIN CONFIGURATION #================================================= +ynh_print_info --message="Restoring original nginx domain configuration..." ynh_secure_remove --file="/usr/share/yunohost/hooks/conf_regen/15-nginx_$app" yunohost tools regen-conf nginx diff --git a/scripts/restore b/scripts/restore index 927db52..d60859a 100644 --- a/scripts/restore +++ b/scripts/restore @@ -13,6 +13,7 @@ source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= +ynh_print_info --message="Managing script failure..." ynh_clean_setup () { ynh_clean_check_starting @@ -50,6 +51,7 @@ test ! -d $final_path \ #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= +ynh_print_info --message="Restoring the nginx configuration..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" @@ -71,6 +73,7 @@ ynh_system_user_create --username=$app --home_dir=$final_path #================================================= # RESTORE USER RIGHTS #================================================= +ynh_print_info --message="Restoring user rights..." # Set right permissions if [ ! -d "/home/yunohost.app/$app" ]; then @@ -104,6 +107,7 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st #================================================= # FIX NGINX DOMAIN CONFIGURATION #================================================= +ynh_print_info --message="Fixing nginx domain configuration..." ynh_restore_file --origin_path="/usr/share/yunohost/hooks/conf_regen/15-nginx_$app" yunohost tools regen-conf nginx @@ -126,8 +130,9 @@ ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# INTEGRATE SERVICE IN YUNOHOST #================================================= +ynh_print_info --message="Integrating service in YunoHost..." yunohost service add $app --description "$app daemon for Peertube" --log "/home/yunohost.app/${app}/storage/logs/peertube.log" @@ -141,6 +146,7 @@ ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --l #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= +ynh_print_info --message="Restoring the logrotate configuration..." ynh_restore_file --origin_path="/etc/logrotate.d/$app" diff --git a/scripts/upgrade b/scripts/upgrade index b519a18..5e499c0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -29,6 +29,7 @@ db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) #================================================= # CHECK VERSION #================================================= +ynh_print_info --message="Checking version..." upgrade_type=$(ynh_check_app_version_changed) @@ -88,7 +89,7 @@ ynh_abort_if_errors #================================================= ynh_print_info --message="Stopping a systemd service..." -ynh_systemd_action --service_name=$app --action="stop" +ynh_systemd_action --service_name=$app --action="stop" --log_path="systemd" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -163,14 +164,15 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st #================================================= ynh_print_info --message="Making sure dedicated system user exists..." -# Create a system user -ynh_system_user_create "$app" +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app #================================================= # SPECIFIC UPGRADE #================================================= # MODIFY A CONFIG FILE #================================================= +ynh_print_info --message="Modifying a config file..." ynh_backup_if_checksum_is_different --file="$final_path/config/local-production.json" ynh_backup_if_checksum_is_different --file="$final_path/config/production.yaml" @@ -190,6 +192,7 @@ ynh_store_file_checksum --file="$final_path/config/production.yaml" #================================================= # FIX NGINX DOMAIN CONFIGURATION #================================================= +ynh_print_info --message="Fixing nginx domain configuration..." cp -R ../conf/nginx_regen_conf.hook /usr/share/yunohost/hooks/conf_regen/15-nginx_$app ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="/usr/share/yunohost/hooks/conf_regen/15-nginx_$app" @@ -198,6 +201,7 @@ yunohost tools regen-conf nginx #================================================= # BUILD YARN DEPENDENCIES #================================================= +ynh_print_info --message="Building yarn dependencies..." chown -R "$app":"$app" $final_path @@ -228,6 +232,7 @@ ynh_add_systemd_config #================================================= # SECURE FILES AND DIRECTORIES #================================================= +ynh_print_info --message="Securing files and directories..." # Set permissions on app files chown -R "$app":"$app" "$final_path" @@ -248,7 +253,7 @@ fi #================================================= # START SYSTEMD SERVICE #================================================= -ynh_print_info --message="Start $app service..." +ynh_print_info --message="Starting a systemd service..." ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost"