#!/bin/bash #================================================= # GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= source _common.sh source /usr/share/yunohost/helpers #================================================= # MANAGE SCRIPT FAILURE #================================================= # Exit if an error occurs during the execution of the script ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD language=$YNH_APP_ARG_LANGUAGE ssoenabled=$YNH_APP_ARG_SSOENABLED timezone=$(cat /etc/timezone) ### If it's a multi-instance app, meaning it can be installed several times independently ### The id of the app as stated in the manifest is available as $YNH_APP_ID ### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) ### The app instance name is available as $YNH_APP_INSTANCE_NAME ### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample ### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 ### - ynhexample__{N} for the subsequent installations, with N=3,4, ... ### The app instance name is probably what interests you most, since this is ### guaranteed to be unique. This is a good unique identifier to define installation path, ### db names, ... app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= final_path=/var/www/$app test ! -e "$final_path" || ynh_die "This path already contains a folder" # Normalize the url path syntax path_url=$(ynh_normalize_url_path $path_url) # Check web path availability ynh_webpath_available $domain $path_url # Register (book) web path ynh_webpath_register $app $domain $path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= # Save app settings ynh_app_setting_set "$app" admin "$admin" ynh_app_setting_set "$app" ssoenabled "$ssoenabled" ynh_app_setting_set "$app" path "$path_url" #================================================= # STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= # Find a free port port=$(ynh_find_port 9537) # Open this port yunohost firewall allow --no-upnp TCP "$port" 2>&1 ynh_app_setting_set "$app" port "$port" #================================================= # INSTALL DEPENDENCIES #================================================= # Install packages ynh_install_app_dependencies php-gd php-curl php-imagick php-cli php-zmq #================================================= # CREATE A MYSQL DATABASE #================================================= db_name=$(ynh_sanitize_dbid "$app") db_user=$db_name ynh_app_setting_set "$app" db_name "$db_name" ynh_mysql_setup_db "$db_user" "$db_name" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_app_setting_set "$app" final_path "$final_path" ynh_setup_source "$final_path" #================================================= # NGINX CONFIGURATION #================================================= # Create a dedicated nginx config ynh_add_nginx_config ynh_replace_string "//ws/" "/ws/" "$finalnginxconf" # Avoid duplicate / #================================================= # CREATE DEDICATED USER #================================================= # Create a system user ynh_system_user_create "$app" #================================================= # PHP-FPM CONFIGURATION #================================================= # Create a dedicated php-fpm config ynh_replace_string "YHTZ" "$timezone" ../conf/php-fpm.ini ynh_add_fpm_config #================================================= # SET CONFIGURATION FILE #================================================= # TODO: add checksum cp ../conf/db.inc.php "$final_path/config/db.inc.php" ynh_replace_string "__DB_USER__" "$db_user" "$final_path/config/db.inc.php" ynh_replace_string "__DB_PWD__" "$db_pwd" "$final_path/config/db.inc.php" ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/config/db.inc.php" ## TODO: consider installation in a subpath ynh_replace_string "'/ws/'" "'${path_url%/}/ws/'" \ "$final_path/app/assets/js/movim_websocket.js" #================================================= # Install PHP dependencies using composer #================================================= ( cd "$final_path" export COMPOSER_HOME=$final_path curl -sS https://getcomposer.org/installer | php -- --install-dir="$final_path" \ && php composer.phar config --global discard-changes true --quiet \ && php composer.phar install --no-interaction --quiet ) #================================================= # SETUP SYSTEMD #================================================= # Create a dedicated systemd config ynh_replace_string "__URL__" "${domain}${path_url}" ../conf/systemd.service ynh_replace_string "__PORT__" "${port}" ../conf/systemd.service ynh_add_systemd_config #================================================= # Set-up database and configuration #================================================= ( cd "$final_path" php mud.php db --set php mud.php config --loglevel=1 \ --locale="$language" --timezone="$timezone" \ --username="$admin" --password="$password" ) #================================================= # GENERIC FINALIZATION #================================================= # SET PERMISSIONS #================================================= # TODO: use more strict permissions chown -R "$app":www-data "$final_path" find "${final_path}/" -type f -print0 | xargs -0 chmod 0644 find "${final_path}/" -type d -print0 | xargs -0 chmod 0755 chmod 400 "${final_path}/config/db.inc.php" #================================================= # SETUP SSOWAT #================================================= # SSOwat configuration if [[ "$ssoenabled" = "No" ]]; then ynh_app_setting_set "$app" skipped_uris "/" (cd "$final_path" && php mud.php config --xmppwhitelist="$domain") undo_sso_patch else ynh_app_setting_set "$app" unprotected_uris "/" fi #================================================= # RELOAD NGINX #================================================= service nginx reload