|
|
|
|
@ -1,4 +1,12 @@
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# helper functions
|
|
|
|
|
log_step() {
|
|
|
|
|
local message="$1"
|
|
|
|
|
echo -e "\e[34m$message\e[0m" # blue in console
|
|
|
|
|
echo "<div color='blue'>$message</div>" >> "$UPDATE_HTML" # blue in html
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# check for parameter
|
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
|
echo "Usage: Please provide a branch name as the first argument."
|
|
|
|
|
@ -75,18 +83,18 @@ TODAY=$(date +"%Y-%m-%d")
|
|
|
|
|
exec > >(tee -a $UPDATE_HTML) 2>&1
|
|
|
|
|
|
|
|
|
|
# configure nginx for the update-page
|
|
|
|
|
echo 'Configuring nginx to serve the update-page' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Configuring nginx to serve the update-page'
|
|
|
|
|
ln -sf $SCRIPT_DIR/nginx/sites-available/update-page.conf $SCRIPT_DIR/nginx/sites-enabled/default
|
|
|
|
|
sudo /etc/init.d/nginx restart
|
|
|
|
|
|
|
|
|
|
# stop all services
|
|
|
|
|
echo 'Stop and delete all Gradido services' >> $UPDATE_HTML
|
|
|
|
|
log_step "Stop and delete all Gradido services"
|
|
|
|
|
pm2 delete all
|
|
|
|
|
pm2 save
|
|
|
|
|
|
|
|
|
|
# git
|
|
|
|
|
BRANCH=$1
|
|
|
|
|
echo "Starting with git pull - branch:$BRANCH" >> $UPDATE_HTML
|
|
|
|
|
log_step "Starting with git pull - branch:$BRANCH"
|
|
|
|
|
cd $PROJECT_ROOT
|
|
|
|
|
# TODO: this overfetches alot, but ensures we can use start.sh with tags
|
|
|
|
|
git fetch --all
|
|
|
|
|
@ -99,7 +107,7 @@ export BUILD_COMMIT="$(git rev-parse HEAD)"
|
|
|
|
|
# *** set FEDERATION_PORT from FEDERATION_COMMUNITY_APIS and create gradido-federation.conf file
|
|
|
|
|
rm -f $NGINX_CONFIG_DIR/gradido.conf.tmp
|
|
|
|
|
rm -f $NGINX_CONFIG_DIR/gradido-federation.conf.locations
|
|
|
|
|
echo "====================================================================================================" >> $UPDATE_HTML
|
|
|
|
|
log_step "===================================================================================================="
|
|
|
|
|
IFS="," read -a API_ARRAY <<< $FEDERATION_COMMUNITY_APIS
|
|
|
|
|
for api in "${API_ARRAY[@]}"
|
|
|
|
|
do
|
|
|
|
|
@ -109,18 +117,18 @@ do
|
|
|
|
|
FEDERATION_PORT=${FEDERATION_COMMUNITY_API_PORT:-5000}
|
|
|
|
|
FEDERATION_PORT=$(($FEDERATION_PORT + $port))
|
|
|
|
|
export FEDERATION_PORT
|
|
|
|
|
echo "create ngingx config: location /api/$FEDERATION_APIVERSION to http://127.0.0.1:$FEDERATION_PORT" >> $UPDATE_HTML
|
|
|
|
|
log_step "create ngingx config: location /api/$FEDERATION_APIVERSION to http://127.0.0.1:$FEDERATION_PORT"
|
|
|
|
|
envsubst '$FEDERATION_APIVERSION, $FEDERATION_PORT' < $NGINX_CONFIG_DIR/gradido-federation.conf.template >> $NGINX_CONFIG_DIR/gradido-federation.conf.locations
|
|
|
|
|
done
|
|
|
|
|
unset FEDERATION_APIVERSION
|
|
|
|
|
unset FEDERATION_PORT
|
|
|
|
|
echo "====================================================================================================" >> $UPDATE_HTML
|
|
|
|
|
log_step "===================================================================================================="
|
|
|
|
|
|
|
|
|
|
# *** 2nd read gradido-federation.conf file in env variable to be replaced in 3rd step
|
|
|
|
|
export FEDERATION_NGINX_CONF=$(< $NGINX_CONFIG_DIR/gradido-federation.conf.locations)
|
|
|
|
|
|
|
|
|
|
# *** 3rd generate gradido nginx config including federation modules per api-version
|
|
|
|
|
echo 'Generate new gradido nginx config' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Generate new gradido nginx config'
|
|
|
|
|
case "$URL_PROTOCOL" in
|
|
|
|
|
'https') TEMPLATE_FILE="gradido.conf.ssl.template" ;;
|
|
|
|
|
*) TEMPLATE_FILE="gradido.conf.template" ;;
|
|
|
|
|
@ -132,18 +140,20 @@ rm $NGINX_CONFIG_DIR/gradido.conf.tmp
|
|
|
|
|
rm $NGINX_CONFIG_DIR/gradido-federation.conf.locations
|
|
|
|
|
|
|
|
|
|
# Generate update-page.conf from template
|
|
|
|
|
echo 'Generate new update-page nginx config' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Generate new update-page nginx config'
|
|
|
|
|
case "$URL_PROTOCOL" in
|
|
|
|
|
'https') TEMPLATE_FILE="update-page.conf.ssl.template" ;;
|
|
|
|
|
*) TEMPLATE_FILE="update-page.conf.template" ;;
|
|
|
|
|
esac
|
|
|
|
|
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $NGINX_CONFIG_DIR/$TEMPLATE_FILE > $NGINX_CONFIG_DIR/update-page.conf
|
|
|
|
|
|
|
|
|
|
log_step 'Clean tmp and yarn cache'
|
|
|
|
|
# Clean tmp folder - remove yarn files
|
|
|
|
|
find /tmp -name "yarn--*" -exec rm -r {} \;
|
|
|
|
|
# Clean user cache folder
|
|
|
|
|
rm -Rf ~/.cache/yarn
|
|
|
|
|
|
|
|
|
|
log_step 'Remove all node_modules and build folders'
|
|
|
|
|
# Remove node_modules folders
|
|
|
|
|
# we had problems with corrupted node_modules folder
|
|
|
|
|
rm -Rf $PROJECT_ROOT/database/node_modules
|
|
|
|
|
@ -164,6 +174,7 @@ rm -Rf $PROJECT_ROOT/admin/build
|
|
|
|
|
rm -Rf $PROJECT_ROOT/dht-node/build
|
|
|
|
|
rm -Rf $PROJECT_ROOT/federation/build
|
|
|
|
|
|
|
|
|
|
log_step 'Regenerate .env files'
|
|
|
|
|
# Regenerate .env files
|
|
|
|
|
cp -f $PROJECT_ROOT/database/.env $PROJECT_ROOT/database/.env.bak
|
|
|
|
|
cp -f $PROJECT_ROOT/backend/.env $PROJECT_ROOT/backend/.env.bak
|
|
|
|
|
@ -179,7 +190,7 @@ envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/dht-node/.env
|
|
|
|
|
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $PROJECT_ROOT/federation/.env.template > $PROJECT_ROOT/federation/.env
|
|
|
|
|
|
|
|
|
|
# Install & build database
|
|
|
|
|
echo 'Updating database' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating database'
|
|
|
|
|
cd $PROJECT_ROOT/database
|
|
|
|
|
yarn install
|
|
|
|
|
yarn build
|
|
|
|
|
@ -191,13 +202,13 @@ else
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Install & build config
|
|
|
|
|
echo 'Updating config' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating config'
|
|
|
|
|
cd $PROJECT_ROOT/config
|
|
|
|
|
yarn install
|
|
|
|
|
yarn build
|
|
|
|
|
|
|
|
|
|
# Install & build backend
|
|
|
|
|
echo 'Updating backend' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating backend'
|
|
|
|
|
cd $PROJECT_ROOT/backend
|
|
|
|
|
# TODO maybe handle this differently?
|
|
|
|
|
unset NODE_ENV
|
|
|
|
|
@ -211,7 +222,7 @@ export NODE_ENV=production
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Install & build frontend
|
|
|
|
|
echo 'Updating frontend' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating frontend'
|
|
|
|
|
cd $PROJECT_ROOT/frontend
|
|
|
|
|
# TODO maybe handle this differently?
|
|
|
|
|
unset NODE_ENV
|
|
|
|
|
@ -224,7 +235,7 @@ yarn build
|
|
|
|
|
export NODE_ENV=production
|
|
|
|
|
|
|
|
|
|
# Install & build admin
|
|
|
|
|
echo 'Updating admin' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating admin'
|
|
|
|
|
cd $PROJECT_ROOT/admin
|
|
|
|
|
# TODO maybe handle this differently?
|
|
|
|
|
unset NODE_ENV
|
|
|
|
|
@ -239,7 +250,7 @@ export NODE_ENV=production
|
|
|
|
|
nvm use default
|
|
|
|
|
|
|
|
|
|
# Install & build dht-node
|
|
|
|
|
echo 'Updating dht-node' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating dht-node'
|
|
|
|
|
cd $PROJECT_ROOT/dht-node
|
|
|
|
|
# TODO maybe handle this differently?
|
|
|
|
|
unset NODE_ENV
|
|
|
|
|
@ -249,7 +260,7 @@ yarn build
|
|
|
|
|
export NODE_ENV=production
|
|
|
|
|
|
|
|
|
|
# Install & build federation
|
|
|
|
|
echo 'Updating federation' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Updating federation'
|
|
|
|
|
cd $PROJECT_ROOT/federation
|
|
|
|
|
# TODO maybe handle this differently?
|
|
|
|
|
unset NODE_ENV
|
|
|
|
|
@ -268,34 +279,34 @@ if [ ! -z $FEDERATION_DHT_TOPIC ]; then
|
|
|
|
|
pm2 start --name gradido-dht-node "yarn --cwd $PROJECT_ROOT/dht-node start" -l $GRADIDO_LOG_PATH/pm2.dht-node.$TODAY.log --log-date-format 'YYYY-MM-DD HH:mm:ss.SSS'
|
|
|
|
|
pm2 save
|
|
|
|
|
else
|
|
|
|
|
echo "=====================================================================" >> $UPDATE_HTML
|
|
|
|
|
echo "WARNING: FEDERATION_DHT_TOPIC not configured. DHT-Node not started..." >> $UPDATE_HTML
|
|
|
|
|
echo "=====================================================================" >> $UPDATE_HTML
|
|
|
|
|
fi
|
|
|
|
|
log_step "====================================================================="
|
|
|
|
|
log_step "WARNING: FEDERATION_DHT_TOPIC not configured. DHT-Node not started..."
|
|
|
|
|
log_step "====================================================================="
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# set FEDERATION_PORT from FEDERATION_COMMUNITY_APIS
|
|
|
|
|
IFS="," read -a API_ARRAY <<< $FEDERATION_COMMUNITY_APIS
|
|
|
|
|
for api in "${API_ARRAY[@]}"
|
|
|
|
|
do
|
|
|
|
|
export FEDERATION_API=$api
|
|
|
|
|
echo "FEDERATION_API=$FEDERATION_API" >> $UPDATE_HTML
|
|
|
|
|
log_step "FEDERATION_API=$FEDERATION_API"
|
|
|
|
|
export MODULENAME=gradido-federation-$api
|
|
|
|
|
echo "MODULENAME=$MODULENAME" >> $UPDATE_HTML
|
|
|
|
|
log_step "MODULENAME=$MODULENAME"
|
|
|
|
|
# calculate port by remove '_' and add value of api to baseport
|
|
|
|
|
port=${api//_/}
|
|
|
|
|
FEDERATION_PORT=${FEDERATION_COMMUNITY_API_PORT:-5000}
|
|
|
|
|
FEDERATION_PORT=$(($FEDERATION_PORT + $port))
|
|
|
|
|
export FEDERATION_PORT
|
|
|
|
|
echo "====================================================" >> $UPDATE_HTML
|
|
|
|
|
echo " start $MODULENAME listening on port=$FEDERATION_PORT" >> $UPDATE_HTML
|
|
|
|
|
echo "====================================================" >> $UPDATE_HTML
|
|
|
|
|
log_step "===================================================="
|
|
|
|
|
log_step " start $MODULENAME listening on port=$FEDERATION_PORT"
|
|
|
|
|
log_step "===================================================="
|
|
|
|
|
# pm2 delete $MODULENAME
|
|
|
|
|
pm2 start --name $MODULENAME "yarn --cwd $PROJECT_ROOT/federation start" -l $GRADIDO_LOG_PATH/pm2.$MODULENAME.$TODAY.log --log-date-format 'YYYY-MM-DD HH:mm:ss.SSS'
|
|
|
|
|
pm2 save
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# let nginx showing gradido
|
|
|
|
|
echo 'Configuring nginx to serve gradido again' >> $UPDATE_HTML
|
|
|
|
|
log_step 'Configuring nginx to serve gradido again'
|
|
|
|
|
ln -sf $SCRIPT_DIR/nginx/sites-available/gradido.conf $SCRIPT_DIR/nginx/sites-enabled/default
|
|
|
|
|
sudo /etc/init.d/nginx restart
|
|
|
|
|
|
|
|
|
|
|