1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/flarum_ynh.git synced 2024-09-03 18:36:24 +02:00
flarum_ynh/scripts/install
2018-02-15 21:58:56 +01:00

223 lines
7.8 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
#===================================================
# This is 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 you are interested the 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
# Retrieve arguments
domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN
title=$YNH_APP_ARG_TITLE
is_public=$YNH_APP_ARG_IS_PUBLIC
flarum_version="v0.1.0-beta.7"
#===================================================
# 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 domain $domain
ynh_app_setting_set $app path $path_url
ynh_app_setting_set $app admin $admin
ynh_app_setting_set $app is_public $is_public
ynh_app_setting_set $app final_path $final_path
ynh_app_setting_set $app flarum_version $flarum_version
#===================================================
# CREATE DEDICATED USER
#===================================================
ynh_system_user_create $app $final_path
sudo usermod -a -G www-data $app
# Create working directory
sudo mkdir -p "$final_path/.composer"
sudo chown -R $app:www-data $final_path
sudo chmod -R 0775 $final_path
#=================================================
# COMPOSER INSTALLATION
#=================================================
init_composer $app $final_path
#=================================================
# FLARUM INSTALLATION
#=================================================
# Prepare Flarum temp directory
tmp=/tmp/$app
sudo mkdir -p $tmp
sudo chown -R $app:www-data $tmp
sudo chmod -R 0775 $tmp
# Install Flarum
exec_composer $app $final_path "create-project flarum/flarum $tmp $flarum_version --stability=beta --ansi"
# Copy Flarum to working directory and clean temp directory
sudo cp -Rf $tmp/* $final_path
sudo chown -R $app:www-data $final_path
sudo chmod -R 0775 $final_path
ynh_secure_remove $tmp
#=================================================
# CREATE A MYSQL DATABASE
#=================================================
db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set $app db_name $db_name
ynh_mysql_setup_db $db_name $db_name
ynh_app_setting_set "$app" db_pwd "$db_pwd"
#=================================================
# NGINX CONFIGURATION
#=================================================
# Bug in Nginx with locations and aliases (see http://stackoverflow.com/a/35102259 )
if [ $path_url = "/" ]; then
sed -i "s@__LOCATION_HACK__@@g" ../conf/nginx.conf
sed -i "s@__PATH_HACK__@/@g" ../conf/nginx.conf
else
sed -i "s@__LOCATION_HACK__@$path_url@g" ../conf/nginx.conf
sed -i "s@__PATH_HACK__@$path_url$path_url@g" ../conf/nginx.conf
fi
# Create a dedicated nginx config
ynh_add_nginx_config
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
# Create a dedicated php-fpm config
ynh_add_fpm_config
#=================================================
# SETUP LOGROTATE
#=================================================
# Use logrotate to manage app-specific logfile(s)
ynh_use_logrotate
#=================================================
# SETUP SSOWAT
#=================================================
if [ $is_public -eq 0 ]
then # Remove the public access
ynh_app_setting_delete $app skipped_uris
fi
# Make app public if necessary
if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway.
ynh_app_setting_set $app unprotected_uris "/"
fi
#=================================================
# RELOAD NGINX
#=================================================
systemctl reload nginx
#=================================================
# FLARUM POST-INSTALL
#=================================================
if [[ -n $admin && -n $title ]]; then
# If admin user and title were specified, start post-installation
# Copy the configuration.yml to working directory
finalflarumconf="$final_path/configuration.yml"
cp ../conf/configuration.yml $finalflarumconf
# Generate admin password and retrieve their email address
admin_pwd=$(ynh_string_random 8)
admin_mail=$(ynh_user_get_info $admin mail)
# Populate configuration.yml
sed -i "s@__DOMAIN__@$domain@g" $finalflarumconf
sed -i "s@/__PATH__@$path_url@g" $finalflarumconf
sed -i "s@__USER__@$app@g" $finalflarumconf
sed -i "s@__DB_PWD__@$db_pwd@g" $finalflarumconf
sed -i "s@__ADMIN__@$admin@g" $finalflarumconf
sed -i "s@__ADMIN_PWD__@$admin_pwd@g" $finalflarumconf
sed -i "s%__ADMIN_EML__%$admin_mail%g" $finalflarumconf
sed -i "s@__FORUM_TITLE__@$title@g" $finalflarumconf
# Execute post-installation
cd $final_path
exec_as $app "php -d memory_limit=-1 flarum install -f configuration.yml"
# Delete configuration.yml as it sensitive data
ynh_secure_remove $finalflarumconf
# Install the SSOwat auth extension
exec_composer $app $final_path "require tituspijean/flarum-ext-auth-ssowat:*@dev --ansi"
# Configure SSOwat auth extension
ssowatdomain=$(</etc/yunohost/current_host)
sql_command="INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('flarum-ext-auth-ssowat.address', '$ssowatdomain'), ('flarum-ext-auth-ssowat.onlyUse', '0');"
ynh_mysql_execute_as_root "$sql_command" $db_name
# Enable SSOwat auth extension
# Retrieve current enabled extensions
sql_command="SELECT \`value\` FROM settings WHERE \`key\` = 'extensions_enabled'"
old_extensions_enabled=$(ynh_mysql_execute_as_root "$sql_command" $db_name | tail -1)
# Append the extension name at the end of the list
addition=",\"tituspijean-auth-ssowat\"]"
new_extensions_enabled=${old_extensions_enabled::-1}$addition
sql_command="UPDATE \`settings\` SET \`value\`='$new_extensions_enabled' WHERE \`key\`='extensions_enabled';"
ynh_mysql_execute_as_root "$sql_command" $db_name
# Send login credentials to admin
app_message="User : $admin, password : $admin_pwd
Change your password!
Your forum is accessible at https://$domain$path_url"
>&2 echo $app_message
ynh_send_readme_to_admin "$app_message" "$admin"
else
# If admin user and title were not specified, ask admin to perform manual post-installation
app_message="Post-installation required, visit your Flarum instance."
>&2 echo $app_message
ynh_send_readme_to_admin "$app_message" "$admin"
fi