2017-02-10 17:06:59 +01:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# Exit on command errors and treat unset variables as an error
|
|
|
|
|
set -eu
|
|
|
|
|
|
|
|
|
|
# Arguments from manifest
|
2017-02-11 20:52:42 +01:00
|
|
|
|
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
|
2017-02-10 17:06:59 +01:00
|
|
|
|
|
2017-02-11 20:52:42 +01:00
|
|
|
|
readonly APP_INSTALL_PATH="/var/www/wekan"
|
|
|
|
|
readonly SYSTEMD_CONF_TEMPLATE="$PWD/../conf/systemd.conf"
|
|
|
|
|
readonly NGINX_CONF_TEMPLATE="$PWD/../conf/nginx.conf"
|
2017-02-10 17:06:59 +01:00
|
|
|
|
|
2017-02-12 03:01:35 +01:00
|
|
|
|
readonly METEOR_INSTALL_DIR="/opt/meteor"
|
|
|
|
|
readonly NVM_INSTALL_DIR="/opt/nvm"
|
|
|
|
|
readonly METEOR_BIN="/usr/local/bin/meteor"
|
2017-02-11 14:42:28 +01:00
|
|
|
|
|
2017-02-10 17:06:59 +01:00
|
|
|
|
# Source YunoHost helpers
|
|
|
|
|
source /usr/share/yunohost/helpers
|
|
|
|
|
|
2017-02-11 20:52:42 +01:00
|
|
|
|
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"
|
|
|
|
|
|
|
|
|
|
# Check domain/path availability
|
|
|
|
|
sudo yunohost app checkurl "${DOMAIN}${APP_URI}" -a "$APP" \
|
|
|
|
|
|| ynh_die "Path not available: ${DOMAIN}${APP_URI}"
|
|
|
|
|
}
|
2017-02-12 02:05:53 +01:00
|
|
|
|
|
|
|
|
|
function create_user_wekan()
|
|
|
|
|
{
|
|
|
|
|
if [[ -z $(sudo getent passwd wekan) ]]
|
|
|
|
|
then
|
|
|
|
|
sudo useradd wekan
|
|
|
|
|
fi
|
|
|
|
|
}
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
function install_node()
|
|
|
|
|
{
|
|
|
|
|
local nvm_install_script="https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh"
|
2017-02-12 02:05:53 +01:00
|
|
|
|
|
|
|
|
|
if [ ! -d "$NVM_INSTALL_DIR" ];
|
|
|
|
|
then
|
|
|
|
|
sudo mkdir $NVM_INSTALL_DIR
|
|
|
|
|
fi
|
|
|
|
|
sudo chown -R wekan $NVM_INSTALL_DIR
|
|
|
|
|
cd $NVM_INSTALL_DIR
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
# Install nvm
|
|
|
|
|
sudo curl -o- $nvm_install_script | sudo NVM_DIR=$NVM_INSTALL_DIR bash
|
|
|
|
|
|
|
|
|
|
# Install latest nodejs
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm install 0.10"
|
2017-02-11 20:52:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function add_swap_if_needed()
|
|
|
|
|
{
|
|
|
|
|
local available_swap=$(free | tail -n 1 | awk '{print $2}')
|
|
|
|
|
local tmp_swap_file=/tmp/wekan_swapfile
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function install_meteor()
|
|
|
|
|
{
|
|
|
|
|
# Install meteor
|
2017-02-12 02:05:53 +01:00
|
|
|
|
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"
|
2017-02-11 20:52:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function install_and_build_wekan()
|
|
|
|
|
{
|
2017-02-12 02:05:53 +01:00
|
|
|
|
local npm_bin=`sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 >/dev/null && which npm"`
|
|
|
|
|
|
2017-02-12 03:01:35 +01:00
|
|
|
|
# Give all permissions to app dir to user wekan
|
2017-02-12 02:05:53 +01:00
|
|
|
|
if [ -d "$APP_INSTALL_PATH" ];
|
|
|
|
|
then
|
|
|
|
|
sudo rm -rf $APP_INSTALL_PATH
|
|
|
|
|
fi
|
2017-02-11 20:52:42 +01:00
|
|
|
|
sudo mkdir -p $APP_INSTALL_PATH
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo chown -R wekan $APP_INSTALL_PATH
|
2017-02-11 20:52:42 +01:00
|
|
|
|
cd $APP_INSTALL_PATH
|
2017-02-12 03:01:35 +01:00
|
|
|
|
|
|
|
|
|
# Clone wekan github repo
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo su wekan -c "git clone https://github.com/wekan/wekan.git ."
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
# Install dependencies with npm
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo su wekan -c "$npm_bin install"
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
# Build with meteor
|
|
|
|
|
sudo rm -rf .build
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo su wekan -c "$METEOR_BIN build .build --directory | tee /tmp/meteor_build.log"
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
# Install dependencies .. again ?
|
|
|
|
|
cd .build/bundle/programs/server
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo su wekan -c "$npm_bin install"
|
2017-02-11 20:52:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function remove_swap()
|
|
|
|
|
{
|
|
|
|
|
local file1="/tmp/wekan_swapfile"
|
|
|
|
|
local file2="/var/cache/wekan_swapfile"
|
|
|
|
|
|
|
|
|
|
if [ -f $file1 ]; then
|
|
|
|
|
sudo swapoff $file1
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo rm -f $file1
|
2017-02-11 20:52:42 +01:00
|
|
|
|
fi
|
2017-02-12 02:05:53 +01:00
|
|
|
|
if [ -f $file2 ]; then
|
|
|
|
|
sudo swapoff $file2
|
2017-02-11 20:52:42 +01:00
|
|
|
|
sudo rm -f $file2
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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_PATH@$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
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo cp $SYSTEMD_CONF_TEMPLATE /etc/systemd/system/wekan.service
|
2017-02-11 20:52:42 +01:00
|
|
|
|
|
|
|
|
|
# Start service
|
|
|
|
|
sudo systemctl daemon-reload
|
2017-02-12 02:05:53 +01:00
|
|
|
|
sudo systemctl start wekan
|
|
|
|
|
sudo systemctl enable wekan
|
2017-02-11 20:52:42 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
# If app is public, add url to SSOWat conf as skipped_uris
|
|
|
|
|
if [[ $APP_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
|
2017-02-12 02:05:53 +01:00
|
|
|
|
create_user_wekan
|
2017-02-11 20:52:42 +01:00
|
|
|
|
install_node
|
|
|
|
|
add_swap_if_needed
|
|
|
|
|
install_meteor
|
|
|
|
|
install_and_build_wekan
|
|
|
|
|
remove_swap
|
|
|
|
|
install_mongodb
|
|
|
|
|
setup_systemd_service
|
|
|
|
|
configure_nginx_and_ssowat
|
2017-02-10 21:39:28 +01:00
|
|
|
|
|
|
|
|
|
|