1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/wekan_ynh.git synced 2024-09-03 20:36:09 +02:00
wekan_ynh/scripts/install
2017-02-11 20:52:42 +01:00

167 lines
5.2 KiB
Bash
Executable file
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
# 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"
export NVM_INSTALL_DIR="/opt/nvm"
# Source YunoHost helpers
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"
# Check domain/path availability
sudo yunohost app checkurl "${DOMAIN}${APP_URI}" -a "$APP" \
|| ynh_die "Path not available: ${DOMAIN}${APP_URI}"
}
function install_node()
{
local nvm_install_script="https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh"
# Install nvm
sudo curl -o- $nvm_install_script | sudo NVM_DIR=$NVM_INSTALL_DIR bash
# Install latest nodejs
sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm install 0.10 && nvm use 0.10"
}
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
METEOR_INSTALL_DIR="/opt/meteor"
METEOR_BIN="/usr/local/bin/meteor"
sudo su admin -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 && curl https://install.meteor.com/ | sh"
}
function install_and_build_wekan()
{
# Clone wekan github repo
sudo mkdir -p $APP_INSTALL_PATH
cd $APP_INSTALL_PATH
sudo git clone https://github.com/wekan/wekan.git .
# Give all permissions to admin (it's the user we'll use to build :/)
sudo chown -R admin /var/www/wekan/
# Install dependencies with npm
sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 && npm install"
# Build with meteor
sudo rm -rf .build
sudo su admin -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 && $METEOR_BIN build .build --directory | tee /tmp/meteor_build.log"
# Install dependencies .. again ?
cd .build/bundle/programs/server
sudo su -c ". $NVM_INSTALL_DIR/nvm.sh && nvm use 0.10 && npm install"
}
function remove_swap()
{
local file1="/tmp/wekan_swapfile"
local file2="/var/cache/wekan_swapfile"
if [ -f $file1 ]; then
sudo swapoff $file1
sudo rm -f $file2
fi
if [ -f $file1 ]; then
sudo swapoff $file1
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
sudo cp $SYSTEMD_CONF_TEMPLATE /etc/systemd/system/wekan@.service
# Start service
sudo systemctl daemon-reload
sudo systemctl start wekan@admin
sudo systemctl enable wekan@admin
}
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
install_node
add_swap_if_needed
install_meteor
install_and_build_wekan
remove_swap
install_mongodb
setup_systemd_service
configure_nginx_and_ssowat