diff --git a/deployment/bare_metal/install.sh b/deployment/bare_metal/install.sh
index 8ba2c518a..4257b0917 100755
--- a/deployment/bare_metal/install.sh
+++ b/deployment/bare_metal/install.sh
@@ -68,11 +68,9 @@ cp .env.dist .env
# Install nginx
sudo apt-get install -y nginx
-cd /etc/nginx/sites-enabled # TODO change directory again
-sudo rm default
-sudo ln -s /home/gradido/gradido/deployment/bare_metal/nginx/sites-available/gradido.conf gradido.conf
-cd /etc/nginx/sites-available
-sudo ln -s /home/gradido/gradido/deployment/bare_metal/nginx/sites-available/gradido.conf gradido.conf
+sudo rm /etc/nginx/sites-enabled/default
+sudo ln -s /home/gradido/gradido/deployment/bare_metal/nginx/sites-available/gradido.conf /etc/nginx/sites-available
+sudo ln -s /etc/nginx/sites-available/gradido.conf /etc/nginx/sites-enabled
cd /etc/nginx
sudo ln -s /home/gradido/gradido/deployment/bare_metal/nginx/common common
diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh
index 14b2c5c6b..22c31f0c7 100755
--- a/deployment/bare_metal/start.sh
+++ b/deployment/bare_metal/start.sh
@@ -1,52 +1,94 @@
#!/bin/bash
-# TODO Load .env
+# Find current directory & configure paths
+SCRIPT_PATH=$(realpath $0)
+SCRIPT_DIR=$(dirname $SCRIPT_PATH)
+LOCK_FILE=$SCRIPT_PATH/update.lock
+UPDATE_HTML=$SCRIPT_PATH/update-page/updating.html
+PROJECT_ROOT=$SCRIPT_DIR/../../
-# TODO update git branch
+# Load .env or .env.dist if not present
+set -o allexport
+if [ -f "$SCRIPT_DIR.env"]; then
+ source $SCRIPT_DIR.env
+else
+ source $SCRIPT_DIR.env.dist
+fi
+set +o allexport
+
+# lock start
+if [ -f $LOCK_FILE ] ; then
+ retVal="Already building!"
+ return "${retVal}" 2>/dev/null || exit "${retVal}"
+fi
+touch $LOCK_FILE
+
+UPDATE_SITE_CONFIG=stage1_updating
+
+# Create a new updating.html from the template
+\cp $SCRIPT_PATH/update-page/updating.html.template $UPDATE_HTML
+
+# configure nginx for the update-page
+echo 'Configuring nginx to serve the update-page
' >> $UPDATE_HTML
+rm /etc/nginx/sites-enabled/gradido.conf
+ln -s /etc/nginx/sites-available/update-page.conf /etc/nginx/sites-enabled/
+sudo /etc/init.d/nginx restart
+
+
+# stop all services
+echo 'Stopping all Gradido services
' >> $UPDATE_HTML
+pm2 stop all
+
+# git
+BRANCH=${1:-master}
+echo "Starting with git pull - branch:$BRANCH
" >> $UPDATE_HTML
+cd $PROJECT_ROOT
+git fetch origin/$BRANCH $BRANCH
+git checkout $BRANCH
+export BUILD_COMMIT="$(git rev-parse HEAD)"
# Install & build database
-# TODO change directory correcty
+echo 'Updating database
' >> $UPDATE_HTML
+cd $PROJECT_ROOT/database
yarn install
yarn build
yarn up
# TODO only in staging!
+yarn dev_reset
yarn seed
# Install & build backend
-# TODO change directory correcty
+echo 'Updating backend
' >> $UPDATE_HTML
+cd $PROJECT_ROOT/backend
yarn install
yarn build
-
-# Install & build frontend
-# TODO change directory correcty
-yarn install
-yarn build
-
-# Install & build admin
-# TODO change directory correcty
-yarn install
-yarn build
-
-# start backend
-# TODO pm2 stop gradido-backend
pm2 delete gradido-backend
-# TODO working directory
pm2 start --name gradido-backend "yarn start"
pm2 save
-# start frontend
-# TODO pm2 stop gradido-frontend
+# Install & build frontend
+echo 'Updating frontend
' >> $UPDATE_HTML
+cd $PROJECT_ROOT/frontend
+yarn install
+yarn build
pm2 delete gradido-frontend
-# TODO working directory
pm2 start --name gradido-frontend "yarn start"
pm2 save
-# start admin
-# TODO pm2 stop gradido-admin
+# Install & build admin
+echo 'Updating admin
' >> $UPDATE_HTML
+cd $PROJECT_ROOT/admin
+yarn install
+yarn build
pm2 delete gradido-admin
-# TODO working directory
pm2 start --name gradido-admin "yarn start"
pm2 save
-# restart nginx
-sudo /etc/init.d/nginx restart
\ No newline at end of file
+# let nginx showing gradido
+echo 'Configuring nginx to serve gradido again
' >> $UPDATE_HTML
+ln -s /etc/nginx/sites-available/gradido.conf /etc/nginx/sites-enabled/
+rm /etc/nginx/sites-enabled/update-page.conf
+sudo /etc/init.d/nginx restart
+
+#release lock
+rm $LOCK_FILE
\ No newline at end of file