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-09-11 12:11:39 +02:00

240 lines
8.4 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
language=$YNH_APP_ARG_LANGUAGE
bazaar_extension=$YNH_APP_ARG_BAZAAR_EXTENSION
#===================================================
# 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 language $language
ynh_app_setting_set $app final_path $final_path
ynh_app_setting_set $app flarum_version $flarum_version
ynh_app_setting_set $app ssowat_ext_ver $ssowat_ext_ver
ynh_app_setting_set $app bazaar_extension $bazaar_extension
#===================================================
# 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
# First, create the project with core and all basic extensions
exec_composer $app $final_path "create-project flarum/flarum $tmp --stability=beta --ansi -d $tmp"
# Let's fix the core version by explicitely requiring it
exec_composer $app $final_path "require flarum/core:$flarum_version -n --ansi -d $tmp"
# 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
ynh_replace_string "__LOCATION_HACK__" "" "../conf/nginx.conf"
ynh_replace_string "__PATH_HACK__" "/" "../conf/nginx.conf"
else
ynh_replace_string "__LOCATION_HACK__" "$path_url" "../conf/nginx.conf"
ynh_replace_string "__PATH_HACK__" "$path_url$path_url" "../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
#=================================================
# Copy the configuration.yml to working directory
finalflarumconf="$final_path/configuration.yml"
cp ../conf/configuration.yml $finalflarumconf
chown $app:www-data $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
ynh_replace_string "__DOMAIN__" "$domain" "$finalflarumconf"
ynh_replace_string "/__PATH__" "$path_url" "$finalflarumconf"
ynh_replace_string "__USER__" "$app" "$finalflarumconf"
ynh_replace_string "__DB_PWD__" "$db_pwd" "$finalflarumconf"
ynh_replace_string "__ADMIN__" "$admin" "$finalflarumconf"
ynh_replace_string "__ADMIN_PWD__" "$admin_pwd" "$finalflarumconf"
ynh_replace_string "__ADMIN_EML__" "$admin_mail" "$finalflarumconf"
ynh_replace_string "__FORUM_TITLE__" "$title" "$finalflarumconf"
# Execute post-installation
pushd $final_path
exec_as $app "php -d $final_path -d memory_limit=-1 flarum install -f configuration.yml"
# Delete configuration.yml as it sensitive data
ynh_secure_remove $finalflarumconf
popd
# Email setup
sql_command="REPLACE INTO \`settings\` (\`key\`, \`value\`) VALUES
('mail_driver', 'mail'),
('mail_encryption', 'ssl'),
('mail_from', '$app@$domain'),
('mail_host', 'localhost'),
('mail_port', '587');"
ynh_mysql_execute_as_root "$sql_command" $db_name
# Install and activate the SSOwat auth extension
install_and_activate_extension $app $final_path $db_name "tituspijean/flarum-ext-auth-ssowat:$ssowat_ext_ver" "tituspijean-auth-ssowat"
# Configure SSOwat auth extension
ssowatdomain=$(</etc/yunohost/current_host)
sql_command="INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('tituspijean-auth-ssowat.domain', '$ssowatdomain'), ('tituspijean-auth-ssowat.onlyUse', '0');"
ynh_mysql_execute_as_root "$sql_command" $db_name
# Install, activate and set language extensions
case $language in
fr)
install_and_activate_extension $app $final_path $db_name "milescellar/flarum-ext-french" "milescellar-french"
sql_command="UPDATE \`settings\` SET \`value\` = 'fr' WHERE \`settings\`.\`key\` = 'default_locale'"
ynh_mysql_execute_as_root "$sql_command" $db_name
;;
de)
install_and_activate_extension $app $final_path $db_name "cbmainz/flarum-de" "cbmainz-de"
sql_command="UPDATE \`settings\` SET \`value\` = 'de' WHERE \`settings\`.\`key\` = 'default_locale'"
ynh_mysql_execute_as_root "$sql_command" $db_name
;;
esac
if [ $bazaar_extension -eq 1 ]; then
exec_composer $app $final_path "require flagrow/bazaar --ansi"
fi
# 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"