mirror of
https://github.com/YunoHost-Apps/shaarli_ynh.git
synced 2024-09-03 20:26:10 +02:00
Add support for multi instances and config at install
This commit is contained in:
parent
c91c1b6fd9
commit
329c1f774b
9 changed files with 176 additions and 31 deletions
60
conf/config.json.php
Normal file
60
conf/config.json.php
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?php /*
|
||||||
|
{
|
||||||
|
"resource": {
|
||||||
|
"data_dir": "data",
|
||||||
|
"config": "data\/config.php",
|
||||||
|
"datastore": "data\/datastore.php",
|
||||||
|
"ban_file": "data\/ipbans.php",
|
||||||
|
"updates": "data\/updates.txt",
|
||||||
|
"log": "data\/log.txt",
|
||||||
|
"update_check": "data\/lastupdatecheck.txt",
|
||||||
|
"raintpl_tpl": "tpl\/",
|
||||||
|
"raintpl_tmp": "tmp\/",
|
||||||
|
"thumbnails_cache": "cache",
|
||||||
|
"page_cache": "pagecache"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"ban_after": 4,
|
||||||
|
"ban_duration": 1800,
|
||||||
|
"session_protection_disabled": false,
|
||||||
|
"open_shaarli": false
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"header_link": "?",
|
||||||
|
"links_per_page": 20,
|
||||||
|
"enabled_plugins": [
|
||||||
|
"qrcode"
|
||||||
|
],
|
||||||
|
"timezone": "YNH_TIMEZONE",
|
||||||
|
"title": "YNH_TITLE"
|
||||||
|
},
|
||||||
|
"updates": {
|
||||||
|
"check_updates": true,
|
||||||
|
"check_updates_branch": "stable",
|
||||||
|
"check_updates_interval": 86400
|
||||||
|
},
|
||||||
|
"feed": {
|
||||||
|
"rss_permalinks": true,
|
||||||
|
"show_atom": false
|
||||||
|
},
|
||||||
|
"privacy": {
|
||||||
|
"default_private_links": YNH_PRIVATE_LINK_BY_DEFAULT,
|
||||||
|
"hide_public_links": false,
|
||||||
|
"hide_timestamps": false
|
||||||
|
},
|
||||||
|
"thumbnail": {
|
||||||
|
"enable_thumbnails": true,
|
||||||
|
"enable_localcache": true
|
||||||
|
},
|
||||||
|
"redirector": {
|
||||||
|
"url": "",
|
||||||
|
"encode_url": true
|
||||||
|
},
|
||||||
|
"plugins": [],
|
||||||
|
"credentials": {
|
||||||
|
"login": "YNH_ADMIN",
|
||||||
|
"salt": "YNH_SALT",
|
||||||
|
"hash": "YNH_HASH"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/ ?>
|
1
conf/datastore.php
Normal file
1
conf/datastore.php
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<?php /* tVPJbtswEL3nKyYq0F5sSbYcLzSKAnEPDdDATeygSS8BJY0t1hSpkJRTJ/C/dyg5LRqkly6EDuRoljfz3nDWZ4+CxVPOJuzR0isQeTAVrDe17IQFTjiJAd1H9IBFwbmRgoErECo0VisuO1AKJUouhXUdsDXZuyvu70p3c+54yi1CjlJkQtcWMqlVkzJhQW1kc5uwoHCusiyK1sIVdRpmuoxsWy46lI3uxUZ4916PBTnazIjKCa2aDDHZPqOkMASnn5Aew7IQFujb6drAShjroKpTwgKp1puSm00ISw2YCwfaeJjoEErs+Agoa/Jvo6ReCxUeHZGzRG4UFPreV6qpuUO1DmRa2Vq6Zj5SqA28vqu1m35AWUW5zuoSleMec2sH3rqm2jldgl7Ri7BWfI1U6YYA+Ozeg/oqayXczg+40sZhDlsigFK1YUjoBSHk8gkNVEZ/xYx4SHewQGLBCVSw4PXW529IZUFlxJY79JTHrSUzSAYSwZyNWfCe7ktRYkB0kT4GNPnGnaQyZEE/7o26cb/bHwKRQpZBEsbNaXhKvIBKfCDCb92uaqok9GP8034QwtVyFkz3TX7H17aJJlHoCpUl5jIEq1funpsmgOJtQUM4yIeAnIu+mq0P/6gBefsn0tp73T/fhPjZJiQE95x4QBqUA+vq1SoMQ+jCJ5owpiQSKvCrvidxC4IwWEztgQGFLqp8TPRuPEgGaX80SYZZPBkOJq/Sy9G1vS70UnzM7mbVRVrOq1ORmLv+w8PF1eykOD0bfVn25sm38dvfrMSQxrIo6BzD2ZsSOByoboWpldzBzfwKMq6oFwzBy80/fqwAqVu/IJPeX8vk5J/KhDpvuWioeFkew8HZZfqSPP43M/v9dw== */ ?>
|
7
conf/gen_hash.php
Normal file
7
conf/gen_hash.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
echo sha1($argv[1].$argv[2].$argv[3]);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
10
conf/ipbans.php
Normal file
10
conf/ipbans.php
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
$GLOBALS['IPBANS']=array (
|
||||||
|
'FAILURES' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'BANS' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
);
|
||||||
|
?>
|
1
conf/lastupdatecheck.txt
Normal file
1
conf/lastupdatecheck.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0.7.0 */
|
0
conf/log.txt
Normal file
0
conf/log.txt
Normal file
1
conf/updates.txt
Normal file
1
conf/updates.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
updateMethodMergeDeprecatedConfigFile;updateMethodRenameDashTags;updateMethodConfigToJson;updateMethodEscapeUnescapedConfig;updateMethodDatastoreIds
|
|
@ -2,6 +2,9 @@
|
||||||
"name": "Shaarli",
|
"name": "Shaarli",
|
||||||
"id": "shaarli",
|
"id": "shaarli",
|
||||||
"packaging_format": 1,
|
"packaging_format": 1,
|
||||||
|
"requirements": {
|
||||||
|
"yunohost": ">> 2.3.15"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"en": "The personal, minimalist, super-fast, no-database delicious clone",
|
"en": "The personal, minimalist, super-fast, no-database delicious clone",
|
||||||
"fr": "Clone de delicious, rapide, simple et sans base de données."
|
"fr": "Clone de delicious, rapide, simple et sans base de données."
|
||||||
|
@ -11,7 +14,7 @@
|
||||||
},
|
},
|
||||||
"url": "https://github.com/shaarli/Shaarli",
|
"url": "https://github.com/shaarli/Shaarli",
|
||||||
"version": "0.8.3",
|
"version": "0.8.3",
|
||||||
"multi_instance": "false",
|
"multi_instance": "true",
|
||||||
"arguments": {
|
"arguments": {
|
||||||
"install" : [
|
"install" : [
|
||||||
{
|
{
|
||||||
|
@ -34,7 +37,7 @@
|
||||||
"default": "/shaarli"
|
"default": "/shaarli"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "public",
|
"name": "is_public",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Is it a public Shaarli site ?",
|
"en": "Is it a public Shaarli site ?",
|
||||||
"fr": "Est-ce un site Shaarli public ?"
|
"fr": "Est-ce un site Shaarli public ?"
|
||||||
|
@ -68,6 +71,14 @@
|
||||||
"fr": "Administrateur"
|
"fr": "Administrateur"
|
||||||
},
|
},
|
||||||
"example": "test"
|
"example": "test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "password",
|
||||||
|
"type": "password",
|
||||||
|
"ask": {
|
||||||
|
"en": "Define password for Shaarli user",
|
||||||
|
"fr": "Définissez le mot de passe de l'utilisateur Shaarli"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
112
scripts/install
112
scripts/install
|
@ -1,12 +1,38 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# causes the shell to exit if any subcommand or pipeline returns a non-zero status
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 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
|
# Retrieve arguments
|
||||||
domain=$1
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
path=$2
|
path=$YNH_APP_ARG_PATH
|
||||||
is_public=$3
|
admin=$YNH_APP_ARG_ADMIN
|
||||||
title=$4
|
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||||
privatelinkbydefault=$5
|
title=$YNH_APP_ARG_TITLE
|
||||||
admin=$6
|
privatelinkbydefault=$YNH_APP_ARG_PRIVATELINKBYDEFAULT
|
||||||
|
password=$YNH_APP_ARG_PASSWORD
|
||||||
|
|
||||||
|
# <TODO: cleaning>
|
||||||
|
## Retrieve arguments
|
||||||
|
#domain=$1
|
||||||
|
#path=$2
|
||||||
|
#is_public=$3
|
||||||
|
#title=$4
|
||||||
|
#privatelinkbydefault=$5
|
||||||
|
#admin=$6
|
||||||
|
# </TODO>
|
||||||
|
|
||||||
# Load common variables and helpers
|
# Load common variables and helpers
|
||||||
source ./_common.sh
|
source ./_common.sh
|
||||||
|
@ -17,10 +43,10 @@ if [[ ! $? -eq 0 ]]; then
|
||||||
echo "Error : the chosen admin user does not exist"
|
echo "Error : the chosen admin user does not exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sudo yunohost app setting shaarli admin -v $admin
|
sudo yunohost app setting $app admin -v $admin
|
||||||
|
|
||||||
# Check domain/path availability
|
# Check domain/path availability
|
||||||
sudo yunohost app checkurl $domain$path -a shaarli
|
sudo yunohost app checkurl $domain$path -a $app
|
||||||
if [[ ! $? -eq 0 ]]; then
|
if [[ ! $? -eq 0 ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -29,53 +55,81 @@ fi
|
||||||
sudo apt-get install php5-cli -y -qq
|
sudo apt-get install php5-cli -y -qq
|
||||||
|
|
||||||
# Copy files to the right place
|
# Copy files to the right place
|
||||||
app_home_path=/home/yunohost.app/shaarli
|
app_home_path=/home/yunohost.app/$app
|
||||||
final_path=/var/www/shaarli
|
final_path=/var/www/$app
|
||||||
|
|
||||||
sudo mkdir -p $final_path
|
sudo mkdir -p $final_path
|
||||||
# Download and extract in /var/www
|
# Download and extract in /var/www
|
||||||
extract_shaarli
|
extract_shaarli
|
||||||
|
|
||||||
sudo mkdir -p $app_home_path/data
|
# <TODO: cleaning>
|
||||||
sudo mkdir -p $app_home_path/cache
|
#sudo mkdir -p $app_home_path/data
|
||||||
sudo mkdir -p $app_home_path/pagecache
|
#sudo mkdir -p $app_home_path/cache
|
||||||
sudo mkdir -p $app_home_path/tmp
|
#sudo mkdir -p $app_home_path/pagecache
|
||||||
sudo mkdir -p $app_home_path/conf
|
#sudo mkdir -p $app_home_path/tmp
|
||||||
sudo chown -R www-data: $app_home_path
|
#sudo mkdir -p $app_home_path/conf
|
||||||
|
#sudo chown -R www-data: $app_home_path
|
||||||
|
# </TODO>
|
||||||
|
|
||||||
|
# generate the salt
|
||||||
salt=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p')
|
salt=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{24\}\).*/\1/p')
|
||||||
|
|
||||||
|
# generate the hash with the password
|
||||||
|
password_hash=$(php ../conf/gen_hash.php $password $admin $salt)
|
||||||
|
|
||||||
|
# set the proper value for substitution
|
||||||
if [ $privatelinkbydefault = "No" ]; then
|
if [ $privatelinkbydefault = "No" ]; then
|
||||||
privatelinkbydefault_php=false
|
privatelinkbydefault_php=false
|
||||||
else
|
else
|
||||||
privatelinkbydefault_php=true
|
privatelinkbydefault_php=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sudo sed -i "s@YNH_SALT@$salt@g" ../conf/init_config.php
|
# Prepare the configuration file
|
||||||
sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/init_config.php
|
sudo sed -i "s@YNH_SALT@$salt@g" ../conf/config.json.php
|
||||||
sudo sed -i "s@YNH_TITLE@$title@g" ../conf/init_config.php
|
sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/config.json.php
|
||||||
sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/init_config.php
|
sudo sed -i "s@YNH_HASH@$password_hash@g" ../conf/config.json.php
|
||||||
sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/init_config.php
|
sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/config.json.php
|
||||||
|
sudo sed -i "s@YNH_TITLE@$title@g" ../conf/config.json.php
|
||||||
|
sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/config.json.php
|
||||||
|
|
||||||
sudo cp ../conf/options.php $app_home_path/data/options.php
|
# <TODO: cleaning>
|
||||||
sudo cp ../conf/init_config.php $app_home_path/data/config.php
|
#sudo sed -i "s@YNH_SALT@$salt@g" ../conf/init_config.php
|
||||||
sudo php ../conf/init_config_user.php $(sudo yunohost user list --json | python ../conf/user_list.py)
|
#sudo sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/init_config.php
|
||||||
|
#sudo sed -i "s@YNH_TITLE@$title@g" ../conf/init_config.php
|
||||||
|
#sudo sed -i "s@YNH_PRIVATE_LINK_BY_DEFAULT@$privatelinkbydefault_php@g" ../conf/init_config.php
|
||||||
|
#sudo sed -i "s@YNH_ADMIN@$admin@g" ../conf/init_config.php
|
||||||
|
#
|
||||||
|
#sudo cp ../conf/options.php $app_home_path/data/options.php
|
||||||
|
#sudo cp ../conf/init_config.php $app_home_path/data/config.php
|
||||||
|
#sudo php ../conf/init_config_user.php $(sudo yunohost user list --json | python ../conf/user_list.py)
|
||||||
|
# </TODO>
|
||||||
|
|
||||||
|
# Populate the data directory of the shaarli instance
|
||||||
|
sudo cp ../conf/config.json.php $final_path/data
|
||||||
|
sudo cp ../conf/datastore.php $final_path/data
|
||||||
|
sudo cp ../conf/ipbans.php $final_path/data
|
||||||
|
sudo cp ../conf/lastupdatecheck.txt $final_path/data
|
||||||
|
sudo cp ../conf/log.txt $final_path/data
|
||||||
|
sudo cp ../conf/updates.txt $final_path/data
|
||||||
|
|
||||||
sudo find $final_path -type f | xargs sudo chmod 644
|
sudo find $final_path -type f | xargs sudo chmod 644
|
||||||
sudo find $final_path -type d | xargs sudo chmod 755
|
sudo find $final_path -type d | xargs sudo chmod 755
|
||||||
#sudo chown -R root: $final_path
|
#sudo chown -R root: $final_path
|
||||||
|
|
||||||
sudo find $app_home_path -type f | xargs sudo chmod 600
|
# <TODO: cleaning>
|
||||||
sudo find $app_home_path -type d | xargs sudo chmod 700
|
#sudo find $app_home_path -type f | xargs sudo chmod 600
|
||||||
sudo chown -R www-data: $app_home_path
|
#sudo find $app_home_path -type d | xargs sudo chmod 700
|
||||||
|
#sudo chown -R www-data: $app_home_path
|
||||||
|
# </TODO>
|
||||||
|
|
||||||
# Modify Nginx configuration file and copy it to Nginx conf directory
|
# Modify Nginx configuration file and copy it to Nginx conf directory
|
||||||
sudo sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf
|
sudo sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf
|
||||||
sudo sed -i "s@YNH_ALIAS@$final_path@g" ../conf/nginx.conf
|
sudo sed -i "s@YNH_ALIAS@$final_path@g" ../conf/nginx.conf
|
||||||
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/shaarli.conf
|
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
|
||||||
|
|
||||||
# Reload Nginx and regenerate SSOwat conf
|
# Reload Nginx and regenerate SSOwat conf
|
||||||
if [ $is_public = "Yes" ]; then
|
if [ $is_public = "Yes" ]; then
|
||||||
sudo yunohost app setting shaarli unprotected_uris -v "/"
|
sudo yunohost app setting $app unprotected_uris -v "/"
|
||||||
fi
|
fi
|
||||||
sudo service nginx reload
|
sudo service nginx reload
|
||||||
sudo yunohost app ssowatconf
|
sudo yunohost app ssowatconf
|
||||||
|
|
Loading…
Add table
Reference in a new issue