mirror of
https://github.com/YunoHost-Apps/wekan_ynh.git
synced 2024-09-03 20:36:09 +02:00
[enh] Upgrade all the package, backup script
This commit is contained in:
parent
1f5f441280
commit
6447c00312
14 changed files with 3373 additions and 308 deletions
14
README.md
14
README.md
|
@ -8,9 +8,21 @@ For the moment it kind of works, but this is still experimental and has not been
|
|||
|
||||
The main drawback at the moment is that it's [not integrated with the LDAP](https://github.com/wekan/wekan/issues/119). So users have to create accounts (and can create infinite number of accounts) manually, and need to login manually specifically in Wekan.
|
||||
|
||||
## Infos
|
||||
**Package by:** ljf & Aleks
|
||||
|
||||
**Categories:** Productivity, Task
|
||||
|
||||
**Upgrade this package:**
|
||||
`sudo yunohost app upgrade --verbose LimeSurvey -u https://github.com/YunoHost-Apps/wekan_ynh`
|
||||
|
||||
**Multi-user:** Yes.
|
||||
|
||||
**Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan.
|
||||
|
||||
**SSO/LDAP:** SSO and LDAP are not configured.
|
||||
|
||||
## To-do
|
||||
|
||||
- Test / make it work on ARM
|
||||
- LDAP is not yet integrated in Wekan, unfortunately... but some people did tweak things as discussed [here](https://github.com/wekan/wekan/issues/119#issuecomment-224319252)
|
||||
- Upgrade, backup and restore scripts
|
||||
|
|
36
check_process
Normal file
36
check_process
Normal file
|
@ -0,0 +1,36 @@
|
|||
# See here for more informations
|
||||
# https://github.com/YunoHost/package_check#syntax-check_process-file
|
||||
;; Test complet
|
||||
; Manifest
|
||||
domain="domain.tld" (DOMAIN)
|
||||
path="/path" (PATH)
|
||||
is_public=1 (PUBLIC|public=1|private=0)
|
||||
; Checks
|
||||
pkg_linter=1
|
||||
setup_sub_dir=1
|
||||
setup_root=1
|
||||
setup_nourl=0
|
||||
setup_private=1
|
||||
setup_public=1
|
||||
upgrade=1
|
||||
backup_restore=1
|
||||
multi_instance=1
|
||||
incorrect_path=1
|
||||
port_already_use=1
|
||||
change_url=1
|
||||
;;; Levels
|
||||
Level 1=auto
|
||||
Level 2=auto
|
||||
Level 3=auto
|
||||
# Level 4:
|
||||
Level 4=0
|
||||
# Level 5:
|
||||
Level 5=auto
|
||||
Level 6=auto
|
||||
Level 7=auto
|
||||
Level 8=0
|
||||
Level 9=0
|
||||
Level 10=0
|
||||
;;; Options
|
||||
Email=ljf+ynh-wekan@grimaud.me
|
||||
Notification=down
|
6
conf/app.src
Normal file
6
conf/app.src
Normal file
|
@ -0,0 +1,6 @@
|
|||
SOURCE_URL=https://github.com/wekan/wekan/releases/download/v0.45/wekan-0.45.tar.gz
|
||||
SOURCE_SUM=4245f6674e407ad40bc899788058887213d5daf8d7620e0ae0c07af22b7c82aa
|
||||
SOURCE_SUM_PRG=sha256sum
|
||||
ARCH_FORMAT=tar.gz
|
||||
SOURCE_IN_SUBDIR=true
|
||||
SOURCE_FILENAME=wekan-0.45.tar.gz
|
|
@ -1,6 +1,10 @@
|
|||
location YNH_WWW_PATH
|
||||
location __PATH__
|
||||
{
|
||||
proxy_pass http://127.0.0.1:8081;
|
||||
if ($scheme = http) {
|
||||
rewrite ^ https://$server_name$request_uri? permanent;
|
||||
}
|
||||
|
||||
proxy_pass http://127.0.0.1:__PORT__;
|
||||
proxy_http_version 1.1;
|
||||
|
||||
# allow websockets
|
||||
|
@ -10,6 +14,9 @@ location YNH_WWW_PATH
|
|||
# preserve client IP
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
|
||||
proxy_set_header Host $host;
|
||||
#proxy_buffering off;
|
||||
|
||||
# this setting allows the browser to cache the application in
|
||||
# a way compatible with Meteor.
|
||||
# on every applicaiton update the name of CSS and JS file is different,
|
||||
|
@ -19,4 +26,7 @@ location YNH_WWW_PATH
|
|||
{
|
||||
expires 30d;
|
||||
}
|
||||
|
||||
# Include SSOWAT user panel.
|
||||
include conf.d/yunohost_panel.conf.inc;
|
||||
}
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
[Unit]
|
||||
Description=Wekan Server
|
||||
Wants=mongod.service
|
||||
After=network.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=WEKAN_INSTALL_PATH
|
||||
ExecStart=WEKAN_NODEJS_PATH main.js
|
||||
Environment=NODE_ENV=production
|
||||
Environment=MONGO_URL=mongodb://127.0.0.1:27017/WEKAN_DB_NAME
|
||||
Environment=ROOT_URL=http://127.0.0.1:WEKAN_PORTWEKAN_URI PORT=WEKAN_PORT
|
||||
User=wekan
|
||||
Restart=on-failure
|
||||
#StartLimitInterval=86400
|
||||
#StartLimitBurst=5
|
||||
RestartSec=10
|
||||
ExecReload=/bin/kill -USR1 $MAINPID
|
||||
RestartSec=10
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=wekan
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
28
conf/systemd.service
Normal file
28
conf/systemd.service
Normal file
|
@ -0,0 +1,28 @@
|
|||
[Unit]
|
||||
Description=Wekan, task board
|
||||
Wants=mongod.service
|
||||
After=network.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=__APP__
|
||||
Group=__APP__
|
||||
ExecStartPre=__NODEJS__
|
||||
Environment="PATH=__ENV_PATH__"
|
||||
Environment=NODE_ENV=production
|
||||
Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__
|
||||
Environment=ROOT_URL=http://127.0.0.1:__PORT____URI__ PORT=__PORT__
|
||||
WorkingDirectory=__FINALPATH__
|
||||
ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js
|
||||
Restart=on-failure
|
||||
#StartLimitInterval=86400
|
||||
#StartLimitBurst=5
|
||||
RestartSec=10
|
||||
ExecReload=/bin/kill -USR1 $MAINPID
|
||||
RestartSec=10
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=__APP__
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -2,25 +2,25 @@
|
|||
"name": "Wekan",
|
||||
"id": "wekan",
|
||||
"packaging_format": 1,
|
||||
"version": "0.45-1",
|
||||
"description": {
|
||||
"en": "Trello-like kanban",
|
||||
"fr": "Un kanban similaire à Trello"
|
||||
},
|
||||
"url": "https://wekan.io",
|
||||
"license": "free",
|
||||
"license": "MIT",
|
||||
"maintainer": {
|
||||
"name": "alexAubin",
|
||||
"email": "alex.aubin@mailoo.org",
|
||||
"url": "https://github.com/alexAubin/"
|
||||
},
|
||||
"requirements": {
|
||||
"yunohost": ">> 2.4.0"
|
||||
"yunohost": ">= 2.7.2"
|
||||
},
|
||||
"multi_instance": false,
|
||||
"multi_instance": true,
|
||||
"services": [
|
||||
"nginx",
|
||||
"php5-fpm",
|
||||
"mysql"
|
||||
"mongod"
|
||||
],
|
||||
"arguments": {
|
||||
"install" : [
|
||||
|
@ -43,15 +43,6 @@
|
|||
"example": "/wekan",
|
||||
"default": "/wekan"
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"type": "user",
|
||||
"ask": {
|
||||
"en": "Choose an admin user",
|
||||
"fr": "Choisissez l’administrateur"
|
||||
},
|
||||
"example": "johndoe"
|
||||
},
|
||||
{
|
||||
"name": "is_public",
|
||||
"type": "boolean",
|
||||
|
@ -60,15 +51,6 @@
|
|||
"fr": "Est-ce une application publique ?"
|
||||
},
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "language",
|
||||
"ask": {
|
||||
"en": "Choose the application language",
|
||||
"fr": "Choisissez la langue de l'application"
|
||||
},
|
||||
"choices": ["fr", "en"],
|
||||
"default": "fr"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
211
scripts/_future.sh
Normal file
211
scripts/_future.sh
Normal file
|
@ -0,0 +1,211 @@
|
|||
|
||||
|
||||
log() {
|
||||
echo "${1}"
|
||||
}
|
||||
|
||||
info() {
|
||||
log "[INFO] ${1}"
|
||||
}
|
||||
|
||||
warn() {
|
||||
log "[WARN] ${1}"
|
||||
}
|
||||
|
||||
err() {
|
||||
log "[ERR] ${1}"
|
||||
}
|
||||
to_logs() {
|
||||
|
||||
# When yunohost --verbose or bash -x
|
||||
if $_ISVERBOSE; then
|
||||
cat
|
||||
else
|
||||
cat > /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
read_json () {
|
||||
sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
|
||||
}
|
||||
|
||||
read_manifest () {
|
||||
if [ -f '../manifest.json' ] ; then
|
||||
read_json '../manifest.json' "$1"
|
||||
else
|
||||
read_json '../settings/manifest.json' "$1"
|
||||
fi
|
||||
}
|
||||
abort_if_up_to_date () {
|
||||
version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7')
|
||||
last_version=$(read_manifest 'version')
|
||||
if [ "${version}" = "${last_version}" ]; then
|
||||
info "Up-to-date, nothing to do"
|
||||
ynh_die "" 0
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
#=================================================
|
||||
# NODEJS
|
||||
#=================================================
|
||||
|
||||
# INFOS
|
||||
# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser.
|
||||
# C'est ainsi qu'il change de version
|
||||
# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n
|
||||
# ynh_use_nodejs active une version de nodejs dans le script courant
|
||||
# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app
|
||||
# - nodejs_path: Le chemin absolu de cette version de node
|
||||
# Utilisé pour des appels directs à node.
|
||||
# - nodejs_version: Simplement le numéro de version de nodejs pour cette application
|
||||
# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant.
|
||||
# Utilisé pour démarrer un service ou un script qui utilise node ou npm
|
||||
# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire.
|
||||
|
||||
n_install_dir="/opt/node_n"
|
||||
node_version_path="/opt/node_n/n/versions/node"
|
||||
# N_PREFIX est le dossier de n, il doit être chargé dans les variables d'environnement pour n.
|
||||
export N_PREFIX="$n_install_dir"
|
||||
|
||||
ynh_use_nodejs () {
|
||||
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
|
||||
|
||||
load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"; N_PREFIX="$n_install_dir""
|
||||
|
||||
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
|
||||
|
||||
# "Load" a version of node
|
||||
eval $load_n_path; $nodejs_use_version
|
||||
|
||||
# Get the absolute path of this version of node
|
||||
nodejs_path="$(n bin $nodejs_version)"
|
||||
|
||||
# Make an alias for node use
|
||||
ynh_node_exec="eval $load_n_path; n use $nodejs_version"
|
||||
}
|
||||
|
||||
ynh_install_nodejs () {
|
||||
# Use n, https://github.com/tj/n to manage the nodejs versions
|
||||
nodejs_version="$1"
|
||||
local n_install_script="https://git.io/n-install"
|
||||
|
||||
# Create $n_install_dir
|
||||
mkdir -p "$n_install_dir"
|
||||
|
||||
# Load n path in PATH
|
||||
CLEAR_PATH="$n_install_dir/bin:$PATH"
|
||||
# Remove /usr/local/bin in PATH in case of node has already setup.
|
||||
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
|
||||
|
||||
# Move an existing node binary, to avoid to block n.
|
||||
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
|
||||
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
|
||||
|
||||
# If n is not previously setup, install it
|
||||
n --version > /dev/null 2>&1 || \
|
||||
(curl -sL $n_install_script | N_PREFIX=$N_PREFIX bash -s -- -y - 2>&1 )
|
||||
|
||||
# Modify the default N_PREFIX in n script
|
||||
ynh_replace_string "^N_PREFIX=\${N_PREFIX-.*}$" "N_PREFIX=\${N_PREFIX-$N_PREFIX}" "$n_install_dir/bin/n"
|
||||
|
||||
# Restore /usr/local/bin in PATH
|
||||
PATH=$CLEAR_PATH
|
||||
|
||||
# And replace the old node binary.
|
||||
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
|
||||
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
|
||||
|
||||
# Install the requested version of nodejs
|
||||
n $nodejs_version
|
||||
|
||||
# Find the last "real" version for this major version of node.
|
||||
real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
||||
real_nodejs_version=$(basename $real_nodejs_version)
|
||||
|
||||
# Create a symbolic link for this major version. If the file doesn't already exist
|
||||
if [ ! -e "$node_version_path/$nodejs_version" ]
|
||||
then
|
||||
ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version
|
||||
fi
|
||||
|
||||
# Store the ID of this app and the version of node requested for it
|
||||
echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version"
|
||||
|
||||
# Store nodejs_version into the config of this app
|
||||
ynh_app_setting_set $app nodejs_version $nodejs_version
|
||||
|
||||
# Build the update script and set the cronjob
|
||||
ynh_cron_upgrade_node
|
||||
|
||||
ynh_use_nodejs
|
||||
}
|
||||
|
||||
ynh_remove_nodejs () {
|
||||
ynh_use_nodejs
|
||||
|
||||
# Remove the line for this app
|
||||
sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version"
|
||||
|
||||
# If none another app uses this version of nodejs, remove it.
|
||||
if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version"
|
||||
then
|
||||
n rm $nodejs_version
|
||||
fi
|
||||
|
||||
# If none another app uses n, remove n
|
||||
if [ ! -s "$n_install_dir/ynh_app_version" ]
|
||||
then
|
||||
ynh_secure_remove "$n_install_dir"
|
||||
ynh_secure_remove "/usr/local/n"
|
||||
sed --in-place "/N_PREFIX/d" /root/.bashrc
|
||||
fi
|
||||
}
|
||||
|
||||
ynh_cron_upgrade_node () {
|
||||
# Build the update script
|
||||
cat > "$n_install_dir/node_update.sh" << EOF
|
||||
#!/bin/bash
|
||||
|
||||
version_path="$node_version_path"
|
||||
n_install_dir="$n_install_dir"
|
||||
|
||||
# Log the date
|
||||
date
|
||||
|
||||
# List all real installed version of node
|
||||
all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")"
|
||||
|
||||
# Keep only the major version number of each line
|
||||
all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//')
|
||||
|
||||
# Remove double entries
|
||||
all_real_version=\$(echo "\$all_real_version" | sort --unique)
|
||||
|
||||
# Read each major version
|
||||
while read version
|
||||
do
|
||||
echo "Update of the version \$version"
|
||||
sudo \$n_install_dir/bin/n \$version
|
||||
|
||||
# Find the last "real" version for this major version of node.
|
||||
real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1)
|
||||
real_nodejs_version=\$(basename \$real_nodejs_version)
|
||||
|
||||
# Update the symbolic link for this version
|
||||
sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version
|
||||
done <<< "\$(echo "\$all_real_version")"
|
||||
EOF
|
||||
|
||||
chmod +x "$n_install_dir/node_update.sh"
|
||||
|
||||
# Build the cronjob
|
||||
cat > "/etc/cron.daily/node_update" << EOF
|
||||
#!/bin/bash
|
||||
|
||||
$n_install_dir/node_update.sh >> $n_install_dir/node_update.log
|
||||
EOF
|
||||
|
||||
chmod +x "/etc/cron.daily/node_update"
|
||||
}
|
41
scripts/backup
Normal file
41
scripts/backup
Normal file
|
@ -0,0 +1,41 @@
|
|||
#!/bin/bash
|
||||
|
||||
#=================================================
|
||||
# GENERIC START
|
||||
#=================================================
|
||||
# IMPORT GENERIC HELPERS
|
||||
#=================================================
|
||||
source /usr/share/yunohost/helpers
|
||||
|
||||
#=================================================
|
||||
# MANAGE SCRIPT FAILURE
|
||||
#=================================================
|
||||
|
||||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
#=================================================
|
||||
# LOAD SETTINGS
|
||||
#=================================================
|
||||
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
final_path=$(ynh_app_setting_get $app final_path)
|
||||
domain=$(ynh_app_setting_get $app domain)
|
||||
|
||||
#=================================================
|
||||
# STANDARD BACKUP STEPS
|
||||
#=================================================
|
||||
# BACKUP OF THE MAIN DIR OF THE APP
|
||||
#=================================================
|
||||
|
||||
ynh_backup "$final_path"
|
||||
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||
ynh_backup "/etc/systemd/system/$app.service"
|
||||
|
||||
#=================================================
|
||||
# BACKUP OF MONGODB
|
||||
#=================================================
|
||||
|
||||
mongodump --db "$app" -o "./dump"
|
||||
|
274
scripts/install
274
scripts/install
|
@ -1,195 +1,135 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Exit on command errors and treat unset variables as an error
|
||||
set -eu
|
||||
|
||||
# Arguments from manifest
|
||||
readonly APP=$YNH_APP_INSTANCE_NAME
|
||||
readonly DOMAIN=$YNH_APP_ARG_DOMAIN
|
||||
readonly APP_URI=$YNH_APP_ARG_PATH
|
||||
readonly APP_ADMIN=$YNH_APP_ARG_ADMIN
|
||||
readonly APP_IS_PUBLIC=$YNH_APP_ARG_IS_PUBLIC
|
||||
readonly APP_LANGUAGE=$YNH_APP_ARG_LANGUAGE
|
||||
|
||||
readonly APP_INSTALL_PATH="/var/www/wekan"
|
||||
readonly SYSTEMD_CONF_TEMPLATE="$PWD/../conf/systemd.conf"
|
||||
readonly NGINX_CONF_TEMPLATE="$PWD/../conf/nginx.conf"
|
||||
|
||||
readonly METEOR_INSTALL_DIR="/opt/meteor"
|
||||
readonly NVM_INSTALL_DIR="/opt/nvm"
|
||||
readonly METEOR_BIN="/usr/local/bin/meteor"
|
||||
|
||||
# Source YunoHost helpers
|
||||
#=================================================
|
||||
# GENERIC START
|
||||
#=================================================
|
||||
# IMPORT GENERIC HELPERS
|
||||
#=================================================
|
||||
source _future.sh
|
||||
source /usr/share/yunohost/helpers
|
||||
|
||||
function configure_app()
|
||||
{
|
||||
# Save app settings
|
||||
ynh_app_setting_set "$APP" admin "$APP_ADMIN"
|
||||
ynh_app_setting_set "$APP" is_public "$APP_IS_PUBLIC"
|
||||
ynh_app_setting_set "$APP" language "$APP_LANGUAGE"
|
||||
#=================================================
|
||||
# MANAGE SCRIPT FAILURE
|
||||
#=================================================
|
||||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
# Check domain/path availability
|
||||
sudo yunohost app checkurl "${DOMAIN}${APP_URI}" -a "$APP" \
|
||||
|| ynh_die "Path not available: ${DOMAIN}${APP_URI}"
|
||||
}
|
||||
|
||||
function create_user_wekan()
|
||||
{
|
||||
if [[ -z $(sudo getent passwd wekan) ]]
|
||||
then
|
||||
sudo useradd wekan
|
||||
fi
|
||||
}
|
||||
#=================================================
|
||||
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
||||
#=================================================
|
||||
domain=$YNH_APP_ARG_DOMAIN
|
||||
path_url=$YNH_APP_ARG_PATH
|
||||
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||
|
||||
function install_node()
|
||||
{
|
||||
local nvm_install_script="https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh"
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
if [ ! -d "$NVM_INSTALL_DIR" ];
|
||||
then
|
||||
sudo mkdir $NVM_INSTALL_DIR
|
||||
fi
|
||||
sudo chown -R wekan $NVM_INSTALL_DIR
|
||||
cd $NVM_INSTALL_DIR
|
||||
#=================================================
|
||||
# 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"
|
||||
|
||||
# Install nvm
|
||||
sudo curl -o- $nvm_install_script | sudo NVM_DIR=$NVM_INSTALL_DIR bash
|
||||
# Register (book) web path
|
||||
ynh_webpath_register $app $domain $path_url
|
||||
|
||||
# Install latest nodejs
|
||||
sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm install 0.10"
|
||||
}
|
||||
#=================================================
|
||||
# STORE SETTINGS FROM MANIFEST
|
||||
#=================================================
|
||||
ynh_app_setting_set $app is_public $is_public
|
||||
|
||||
function add_swap_if_needed()
|
||||
{
|
||||
local available_swap=$(free | tail -n 1 | awk '{print $2}')
|
||||
local tmp_swap_file=/tmp/wekan_swapfile
|
||||
#=================================================
|
||||
# FIND AND OPEN A PORT
|
||||
#=================================================
|
||||
|
||||
if [ $available_swap -lt 1000000 ];
|
||||
then
|
||||
# It is NOT possible to setup a swap file on a tmpfs filesystem
|
||||
if [[ ! -z $(mount | grep /tmp | grep tmpfs) ]];
|
||||
then
|
||||
tmp_swap_file=/var/cache/wekan_swapfile
|
||||
fi
|
||||
# Find a free port
|
||||
port=$(ynh_find_port 8081)
|
||||
ynh_app_setting_set $app port $port
|
||||
|
||||
sudo dd if=/dev/zero of=$tmp_swap_file bs=1M count=1024
|
||||
sudo chmod 600 $tmp_swap_file
|
||||
sudo mkswap $tmp_swap_file
|
||||
sudo swapon $tmp_swap_file
|
||||
fi
|
||||
}
|
||||
#=================================================
|
||||
# INSTALL DEPENDENCIES
|
||||
#=================================================
|
||||
ynh_install_nodejs 4.8.4
|
||||
|
||||
function install_meteor()
|
||||
{
|
||||
# Install meteor
|
||||
if [ ! -d "$METEOR_INSTALL_DIR" ];
|
||||
then
|
||||
sudo mkdir $METEOR_INSTALL_DIR
|
||||
fi
|
||||
sudo chown -R wekan $METEOR_INSTALL_DIR
|
||||
cd $METEOR_INSTALL_DIR
|
||||
sudo su -c "curl https://install.meteor.com/ | sh"
|
||||
}
|
||||
# Install mongodb
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" > /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||
|
||||
function install_and_build_wekan()
|
||||
{
|
||||
local npm_bin=`sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 >/dev/null && which npm"`
|
||||
ynh_install_app_dependencies "mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools"
|
||||
|
||||
# Give all permissions to app dir to user wekan
|
||||
if [ -d "$APP_INSTALL_PATH" ];
|
||||
then
|
||||
sudo rm -rf $APP_INSTALL_PATH
|
||||
fi
|
||||
sudo mkdir -p $APP_INSTALL_PATH
|
||||
sudo chown -R wekan $APP_INSTALL_PATH
|
||||
cd $APP_INSTALL_PATH
|
||||
|
||||
# Clone wekan github repo
|
||||
sudo su wekan -c "git clone https://github.com/wekan/wekan.git ."
|
||||
#=================================================
|
||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||
#=================================================
|
||||
ynh_app_setting_set $app final_path $final_path
|
||||
# Download, check integrity, uncompress and patch the source from app.src
|
||||
# For this app sources are in app subdirectory
|
||||
ynh_setup_source "$final_path"
|
||||
|
||||
# Install dependencies with npm
|
||||
sudo su wekan -c "$npm_bin install"
|
||||
#=================================================
|
||||
# NGINX CONFIGURATION
|
||||
#=================================================
|
||||
# Create a dedicated nginx config
|
||||
ynh_add_nginx_config
|
||||
|
||||
# Build with meteor
|
||||
sudo rm -rf .build
|
||||
sudo su wekan -c "$METEOR_BIN build .build --directory | tee /tmp/meteor_build.log"
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
|
||||
# Install dependencies .. again ?
|
||||
cd .build/bundle/programs/server
|
||||
sudo su wekan -c "$npm_bin install"
|
||||
}
|
||||
# Create a system user
|
||||
ynh_system_user_create $app "$final_path"
|
||||
|
||||
function remove_swap()
|
||||
{
|
||||
local file1="/tmp/wekan_swapfile"
|
||||
local file2="/var/cache/wekan_swapfile"
|
||||
#=================================================
|
||||
# SPECIFIC SETUP
|
||||
#=================================================
|
||||
# Install wekan dependencies
|
||||
chown -R $app $final_path
|
||||
pushd $final_path/programs/server
|
||||
ynh_use_nodejs
|
||||
npm install
|
||||
popd
|
||||
|
||||
if [ -f $file1 ]; then
|
||||
sudo swapoff $file1
|
||||
sudo rm -f $file1
|
||||
fi
|
||||
if [ -f $file2 ]; then
|
||||
sudo swapoff $file2
|
||||
sudo rm -f $file2
|
||||
fi
|
||||
}
|
||||
# Start mogodb
|
||||
systemctl start mongod
|
||||
systemctl enable mongod
|
||||
|
||||
function install_mongodb()
|
||||
{
|
||||
# Install mongodb
|
||||
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y mongodb-org=3.2.11 mongodb-org-server=3.2.11 mongodb-org-shell=3.2.11 mongodb-org-mongos=3.2.11 mongodb-org-tools=3.2.11
|
||||
sudo systemctl start mongod
|
||||
sudo systemctl enable mongod
|
||||
}
|
||||
#=================================================
|
||||
# SETUP SYSTEMD
|
||||
#=================================================
|
||||
# Create a dedicated systemd config
|
||||
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service"
|
||||
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
|
||||
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
|
||||
ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service"
|
||||
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
|
||||
ynh_add_systemd_config
|
||||
|
||||
function setup_systemd_service()
|
||||
{
|
||||
# Install systemd conf
|
||||
local node_bin=`sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 >/dev/null && which node"`
|
||||
sed -i "s@WEKAN_INSTALL_PATH@$APP_INSTALL_PATH/.build/bundle@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sed -i "s@WEKAN_NODEJS_PATH@$node_bin@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sed -i "s@WEKAN_DOMAIN@$DOMAIN@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sed -i "s@WEKAN_URI@$APP_URI@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sed -i "s@WEKAN_DB_NAME@wekan@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sed -i "s@WEKAN_PORT@8081@g" $SYSTEMD_CONF_TEMPLATE
|
||||
sudo cp $SYSTEMD_CONF_TEMPLATE /etc/systemd/system/wekan.service
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
# SECURE FILES AND DIRECTORIES
|
||||
#=================================================
|
||||
# Set strong right permissions to app files
|
||||
chown -R $app: "$final_path"
|
||||
chmod -R 640 "$final_path"
|
||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||
|
||||
# Start service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl start wekan
|
||||
sudo systemctl enable wekan
|
||||
}
|
||||
#=================================================
|
||||
# ADD SERVICE IN ADMIN PANEL
|
||||
#=================================================
|
||||
yunohost service add mongod --log "/var/log/mongodb.log"
|
||||
|
||||
function configure_nginx_and_ssowat()
|
||||
{
|
||||
# Modify Nginx configuration file and copy it to Nginx conf directory
|
||||
sed -i "s@YNH_WWW_PATH@$APP_URI@g" $NGINX_CONF_TEMPLATE
|
||||
sed -i "s@YNH_WWW_ALIAS@$APP_INSTALL_PATH/@g" $NGINX_CONF_TEMPLATE
|
||||
sudo cp $NGINX_CONF_TEMPLATE /etc/nginx/conf.d/$DOMAIN.d/$APP.conf
|
||||
#=================================================
|
||||
# SETUP SSOWAT
|
||||
#=================================================
|
||||
|
||||
# If app is public, add url to SSOWat conf as skipped_uris
|
||||
if [[ $APP_IS_PUBLIC -eq 1 ]]; then
|
||||
# Make app public if necessary or protect it
|
||||
if [ $is_public -eq 1 ]
|
||||
then
|
||||
# unprotected_uris allows SSO credentials to be passed anyway.
|
||||
ynh_app_setting_set "$APP" unprotected_uris "/"
|
||||
fi
|
||||
|
||||
sudo service nginx reload
|
||||
}
|
||||
|
||||
|
||||
configure_app
|
||||
create_user_wekan
|
||||
install_node
|
||||
add_swap_if_needed
|
||||
install_meteor
|
||||
install_and_build_wekan
|
||||
remove_swap
|
||||
install_mongodb
|
||||
setup_systemd_service
|
||||
configure_nginx_and_ssowat
|
||||
|
||||
ynh_app_setting_set "$app" unprotected_uris "/"
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# RELOAD NGINX
|
||||
#=================================================
|
||||
systemctl reload nginx
|
||||
|
|
133
scripts/remove
133
scripts/remove
|
@ -1,83 +1,82 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Source YunoHost helpers
|
||||
#=================================================
|
||||
# GENERIC STARTING
|
||||
#=================================================
|
||||
# IMPORT GENERIC HELPERS
|
||||
#=================================================
|
||||
source _future.sh
|
||||
source /usr/share/yunohost/helpers
|
||||
|
||||
# Retrieve app settings
|
||||
readonly APP=$YNH_APP_INSTANCE_NAME
|
||||
readonly DOMAIN=$(ynh_app_setting_get "$app" domain)
|
||||
#=================================================
|
||||
# LOAD SETTINGS
|
||||
#=================================================
|
||||
readonly app=$YNH_APP_INSTANCE_NAME
|
||||
readonly domain=$(ynh_app_setting_get "$app" domain)
|
||||
readonly final_path=$(ynh_app_setting_get "$app" final_path)
|
||||
|
||||
readonly APP_INSTALL_PATH="/var/www/wekan"
|
||||
readonly NVM_INSTALL_DIR="/opt/nvm"
|
||||
readonly METEOR_INSTALL_DIR="/opt/meteor"
|
||||
#=================================================
|
||||
# STANDARD REMOVE
|
||||
#=================================================
|
||||
# STOP AND REMOVE SERVICE
|
||||
#=================================================
|
||||
|
||||
function remove_node()
|
||||
{
|
||||
if [ -d "$NVM_INSTALL_DIR" ];
|
||||
then
|
||||
sudo rm -rf $NVM_INSTALL_DIR
|
||||
fi
|
||||
}
|
||||
ynh_remove_systemd_config
|
||||
|
||||
function remove_meteor()
|
||||
{
|
||||
if [ -d "$METEOR_INSTALL_DIR" ];
|
||||
then
|
||||
sudo rm -rf $METEOR_INSTALL_DIR
|
||||
fi
|
||||
}
|
||||
#=================================================
|
||||
# DISABLE SERVICE IN ADMIN PANEL
|
||||
#=================================================
|
||||
|
||||
function remove_wekan()
|
||||
{
|
||||
if [ -d "$APP_INSTALL_PATH" ];
|
||||
then
|
||||
sudo rm -rf $APP_INSTALL_PATH
|
||||
fi
|
||||
}
|
||||
if yunohost service status | grep -q $app # Test l'existence du service dans Yunohost
|
||||
then
|
||||
echo "Remove $app service"
|
||||
yunohost service remove $app
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# REMOVE DB
|
||||
#=================================================
|
||||
mongo $app --eval "db.dropDatabase()"
|
||||
|
||||
#=================================================
|
||||
# REMOVE DEPENDENCIES
|
||||
#=================================================
|
||||
|
||||
ynh_remove_app_dependencies
|
||||
|
||||
#=================================================
|
||||
# REMOVE NODEJS
|
||||
#=================================================
|
||||
|
||||
ynh_remove_nodejs
|
||||
|
||||
|
||||
function remove_mongodb()
|
||||
{
|
||||
sudo systemctl stop mongod
|
||||
sudo systemctl disable mongod
|
||||
#=================================================
|
||||
# REMOVE MONGODB
|
||||
#=================================================
|
||||
# TODO / FIXME : remove the keys added ?
|
||||
#apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||
|
||||
# TODO / FIXME : remove the keys added ?
|
||||
#sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||
#rm -f /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||
|
||||
sudo apt-get remove -y mongodb-org=3.2.11 mongodb-org-server=3.2.11 mongodb-org-shell=3.2.11 mongodb-org-mongos=3.2.11 mongodb-org-tools=3.2.11
|
||||
sudo apt-get update
|
||||
sudo rm -f /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||
sudo apt-get update
|
||||
}
|
||||
#=================================================
|
||||
# REMOVE THE MAIN DIR OF THE APP
|
||||
#=================================================
|
||||
|
||||
function remove_systemd_service()
|
||||
{
|
||||
sudo systemctl stop wekan
|
||||
sudo systemctl disable wekan
|
||||
sudo rm -f /etc/systemd/system/wekan.service
|
||||
sudo systemctl daemon-reload
|
||||
}
|
||||
ynh_secure_remove "/var/www/$app"
|
||||
|
||||
function remove_nginx_conf()
|
||||
{
|
||||
# Modify Nginx configuration file and copy it to Nginx conf directory
|
||||
sudo rm -f /etc/nginx/conf.d/$DOMAIN.d/$APP.conf
|
||||
|
||||
sudo service nginx reload
|
||||
}
|
||||
#=================================================
|
||||
# REMOVE THE NGINX CONFIGURATION
|
||||
#=================================================
|
||||
|
||||
ynh_remove_nginx_config
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALISATION
|
||||
#=================================================
|
||||
# REMOVE DEDICATED USER
|
||||
#=================================================
|
||||
|
||||
ynh_system_user_delete $app
|
||||
|
||||
function remove_user_wekan()
|
||||
{
|
||||
if [[ ! -z $(sudo getent passwd wekan) ]]
|
||||
then
|
||||
sudo userdel wekan
|
||||
fi
|
||||
}
|
||||
|
||||
remove_node
|
||||
remove_meteor
|
||||
remove_wekan
|
||||
remove_mongodb
|
||||
remove_systemd_service
|
||||
remove_nginx_conf
|
||||
remove_user_wekan
|
||||
|
|
111
scripts/restore
Normal file
111
scripts/restore
Normal file
|
@ -0,0 +1,111 @@
|
|||
#!/bin/bash
|
||||
|
||||
#=================================================
|
||||
# GENERIC START
|
||||
#=================================================
|
||||
# IMPORT GENERIC HELPERS
|
||||
#=================================================
|
||||
source ../settings/scripts/_future.sh
|
||||
source /usr/share/yunohost/helpers
|
||||
|
||||
#=================================================
|
||||
# MANAGE SCRIPT FAILURE
|
||||
#=================================================
|
||||
|
||||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
#=================================================
|
||||
# LOAD SETTINGS
|
||||
#=================================================
|
||||
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
domain=$(ynh_app_setting_get $app domain)
|
||||
path_url=$(ynh_app_setting_get $app path_url)
|
||||
is_public=$(ynh_app_setting_get $app is_public)
|
||||
final_path=$(ynh_app_setting_get $app final_path)
|
||||
port=$(ynh_app_setting_get $app final_path)
|
||||
|
||||
#=================================================
|
||||
# CHECK IF THE APP CAN BE RESTORED
|
||||
#=================================================
|
||||
|
||||
yunohost app checkurl "${domain}${path_url}" -a "$app" \
|
||||
|| ynh_die "Path not available: ${domain}${path_url}"
|
||||
test ! -d $final_path \
|
||||
|| ynh_die "There is already a directory: $final_path "
|
||||
|
||||
#=================================================
|
||||
# STANDARD RESTORE STEPS
|
||||
#=================================================
|
||||
ynh_restore
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
|
||||
# Create a system user
|
||||
ynh_system_user_create $app "$final_path"
|
||||
|
||||
|
||||
#=================================================
|
||||
# INSTALL DEPENDENCIES
|
||||
#=================================================
|
||||
ynh_install_nodejs 4.8.4
|
||||
|
||||
# Install mongodb
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" > /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||
|
||||
ynh_install_app_dependencies "mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools"
|
||||
|
||||
#=================================================
|
||||
# RESTORE DB
|
||||
#=================================================
|
||||
# Start mogodb
|
||||
systemctl start mongod
|
||||
systemctl enable mongod
|
||||
mongorestore --db $app ./dump
|
||||
|
||||
#=================================================
|
||||
# SPECIFIC SETUP
|
||||
#=================================================
|
||||
|
||||
# Install wekan dependencies
|
||||
chown -R $app $final_path
|
||||
pushd $final_path/bundle/programs/server
|
||||
ynh_use_nodejs
|
||||
npm install
|
||||
popd
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
# SECURE FILES AND DIRECTORIES
|
||||
#=================================================
|
||||
# Set strong right permissions to app files
|
||||
chown -R $app: "$final_path"
|
||||
chmod -R 640 "$final_path"
|
||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||
|
||||
#=================================================
|
||||
# ADD SERVICE IN ADMIN PANEL
|
||||
#=================================================
|
||||
yunohost service add mongod --log "/var/log/mongodb.log"
|
||||
|
||||
#=================================================
|
||||
# SETUP SSOWAT
|
||||
#=================================================
|
||||
|
||||
# Make app public if necessary or protect it
|
||||
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
|
70
scripts/upgrade
Normal file
70
scripts/upgrade
Normal file
|
@ -0,0 +1,70 @@
|
|||
#!/bin/bash
|
||||
|
||||
#=================================================
|
||||
# GENERIC START
|
||||
#=================================================
|
||||
# IMPORT GENERIC HELPERS
|
||||
#=================================================
|
||||
|
||||
source _future.sh
|
||||
source /usr/share/yunohost/helpers
|
||||
|
||||
#=================================================
|
||||
# LOAD SETTINGS
|
||||
#=================================================
|
||||
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
domain=$(ynh_app_setting_get $app domain)
|
||||
path_url=$(ynh_app_setting_get $app path_url)
|
||||
is_public=$(ynh_app_setting_get $app is_public)
|
||||
final_path=$(ynh_app_setting_get $app final_path)
|
||||
port=$(ynh_app_setting_get $app final_path)
|
||||
|
||||
#=================================================
|
||||
# Check version
|
||||
#=================================================
|
||||
abort_if_up_to_date
|
||||
|
||||
#=================================================
|
||||
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||
#=================================================
|
||||
|
||||
ynh_backup_before_upgrade # Backup the current version of the app
|
||||
ynh_clean_setup () {
|
||||
ynh_restore_upgradebackup # restore it if the upgrade fails
|
||||
}
|
||||
ynh_abort_if_errors # Exit if an error occurs during the execution of the script
|
||||
|
||||
#=================================================
|
||||
# ENSURE DOWNWARD COMPATIBILITY
|
||||
#=================================================
|
||||
|
||||
#if [ "${version}" = "20160501-7" ]; then
|
||||
|
||||
#fi
|
||||
|
||||
#=================================================
|
||||
# STANDARD UPGRADE STEPS
|
||||
#=================================================
|
||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||
#=================================================
|
||||
|
||||
# Download, check integrity, uncompress and patch the source from app.src
|
||||
# For this app sources are in app subdirectory
|
||||
ynh_setup_source "$final_path"
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
# SECURE FILES AND DIRECTORIES
|
||||
#=================================================
|
||||
# Set strong right permissions to app files
|
||||
chown -R $app: "$final_path"
|
||||
chmod -R 640 "$final_path"
|
||||
find "$final_path" -type d -print0 | xargs -0 chmod 750
|
||||
|
||||
#=================================================
|
||||
# RELOAD NGINX
|
||||
#=================================================
|
||||
systemctl reload nginx
|
Loading…
Reference in a new issue