diff --git a/.gitignore b/.gitignore
index 4aa32f6652c321c31058dca06f0f9e1e334bab39..92222168397e2ebdfeea8e9e74ae0b36abd03c52 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,4 @@
 *.war
 *.class
 *.sublime-workspace
-.vagrant/
-vm/webapps/
-vm/data/
-vm/test/
+.vagrant/
\ No newline at end of file
diff --git a/build-config.sh b/build-config.sh
deleted file mode 100755
index 447cfd857988edc8bc2aeb2bb452e1f11be40a81..0000000000000000000000000000000000000000
--- a/build-config.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-INCLUDE_FRONTEND_IN_WAR=1
-
-# enable/disable (1/0) project building
-BUILD_DTM=1
-BUILD_VIPRA_UTIL=1
-BUILD_VIPRA_CMD=1
-BUILD_VIPRA_UI=1
-BUILD_VIPRA_BACKEND=1
\ No newline at end of file
diff --git a/build.sh b/build.sh
index 7bf4ddf41198fc838d8a9f297352a52ff223d91c..8d4faa4fc530f2098b5667674828664efd8faebe 100755
--- a/build.sh
+++ b/build.sh
@@ -1,41 +1,64 @@
 #!/bin/bash
 
-source ./build-config.sh
-
-# =========================================================
-# DO NOT EDIT AFTER THIS POINT
-# =========================================================
-
-LOG="build.log"
+#######################################################################################
+# CONFIGURATION
+
+# enable/disable (1/0) project building
+BUILD_DTM=1
+BUILD_VIPRA_UTIL=1
+BUILD_VIPRA_CMD=1
+BUILD_VIPRA_UI=1
+BUILD_VIPRA_BACKEND=1
+
+# set to 1 to deploy backend after build completed
+DEPLOY_AFTER_BUILD=1
+# copy backend to docker
+DEPLOY_TO_DOCKER=1
+# copy backend to vagrant
+DEPLOY_TO_VAGRANT=0
+# copy exploded WAR instead of *.war file
+DEPLOY_EXPLODED_WAR=1
+# copy to ROOT, overwrite context path
+DEPLOY_TO_ROOT=1
+
+#######################################################################################
+
+PROJECT="vipra"
+WAR_FILE="$PROJECT.war"
+DIR="$(dirname "$(readlink -f "$0")")"
+DOCKER_PATH="$DIR/docker/webapps"
+VAGRANT_PATH="$DIR/vm/webapps"
+WAR_PATH="$DIR/vipra-backend/target/$WAR_FILE"
+EXPLODED_WAR_PATH="$DIR/vipra-backend/target/vipra"
+LOG="$DIR/build.log"
 rm -f $LOG
 
+# check commands
+
 if [ $BUILD_DTM -eq 1 ]; then
         MAKE=$(command -v make 2>/dev/null) || { echo >&2 "make not found"; exit 1; }
-        echo using $MAKE | tee $LOG
 fi
 
 if [ $BUILD_VIPRA_UTIL -eq 1 ] || [ $BUILD_VIPRA_CMD -eq 1 ] || [ $BUILD_VIPRA_BACKEND -eq 1 ]; then
         JAVA=$(command -v java 2>/dev/null) || { echo >&2 "java not found"; exit 1; }
-        echo using $JAVA | tee $LOG
-
         MVN=$(command -v mvn 2>/dev/null) || { echo >&2 "mvn not found"; exit 1; }
-        echo using $MVN | tee $LOG
 fi
 
 if [ $BUILD_VIPRA_UI -eq 1 ]; then
         NODE=$(command -v node 2>/dev/null) || { echo >&2 "node not found"; exit 1; }
-        echo using $NODE | tee $LOG
-
         NPM=$(command -v npm 2>/dev/null) || { echo >&2 "npm not found"; exit 1; }
-        echo using $NPM | tee $LOG
-
         BOWER=$(command -v bower 2>/dev/null) || { echo >&2 "bower not found"; exit 1; }
-        echo using $BOWER | tee $LOG
-
         GULP=$(command -v gulp 2>/dev/null) || { echo >&2 "gulp not found"; exit 1; }
-        echo using $GULP | tee $LOG
 fi
 
+# functions
+
+function deploy {
+        cd $1
+        rm -rf ROOT ROOT.war $PROJECT $WAR_FILE
+        cp -r $2 $3
+}
+
 # build dtm
 
 echo "" >> $LOG
@@ -102,12 +125,6 @@ else
                 exit 1
         fi
         cd ..
-        rm -rf ./vipra-backend/src/main/public
-        if [ $INCLUDE_FRONTEND_IN_WAR -eq 1 ]; then
-                cp -r ./vipra-ui/public ./vipra-backend/src/main/public
-        else
-                mkdir ./vipra-backend/src/main/public
-        fi
 fi
 
 # build vipra-backend
@@ -125,7 +142,28 @@ else
                 echo "error"
                 exit 1
         fi
+
+        SRC=$WAR_PATH
+        TARGET=$WAR_FILE
+        if [ $DEPLOY_TO_ROOT -eq 1 ]; then
+                TARGET="ROOT.war"
+        fi
+        if [ $DEPLOY_EXPLODED_WAR -eq 1 ]; then
+                SRC=$EXPLODED_WAR_PATH
+                TARGET=$PROJECT
+                if [ $DEPLOY_TO_ROOT -eq 1 ]; then
+                        TARGET="ROOT"
+                fi
+        fi
+
+        if [ $DEPLOY_TO_DOCKER -eq 1 ]; then
+                deploy $DOCKER_PATH $SRC $TARGET
+        fi
+
+        if [ $DEPLOY_TO_VAGRANT -eq 1 ]; then
+                deploy $VAGRANT_PATH $SRC $TARGET
+        fi
 fi
 
 echo "complete"
-exit $?
+exit $?
\ No newline at end of file
diff --git a/docker/.dockerignore b/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..46d0c1189235f96c2eedfcc2aab1d282c78097b6
--- /dev/null
+++ b/docker/.dockerignore
@@ -0,0 +1,2 @@
+webapps
+webroot
diff --git a/docker/docker-clean.sh b/docker/docker-clean.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8564f056e6b3d0a75afab657aa27aa3ca1445096
--- /dev/null
+++ b/docker/docker-clean.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+docker kill $(docker ps -q)
+docker rm $(docker ps -a -q)
+docker rmi $(docker images -q -f dangling=true)
+docker volume rm $(docker volume ls -qf dangling=true)
\ No newline at end of file
diff --git a/docker/nginx.conf b/docker/nginx.conf
index feee6304ee134d2d2ea9014347cbe8a14b3783f7..9cae4d2869893a1b36e390256cc1196036b6d329 100644
--- a/docker/nginx.conf
+++ b/docker/nginx.conf
@@ -33,8 +33,16 @@ http {
     server_name _;
     root /webroot;
     index index.html;
+    
     location / {
       try_files $uri $uri/ /index.html;
     }
+
+    location /rest/ {
+      proxy_buffering off;
+      proxy_set_header Host $host;
+      proxy_set_header X-Real-IP $remote_addr;
+      proxy_pass http://localhost:8080/rest/;
+    }
   }
 }
\ No newline at end of file
diff --git a/vm/.gitignore b/vm/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..adbb97d2d3137fe76f2d8e88a55e1c2b285a6cd6
--- /dev/null
+++ b/vm/.gitignore
@@ -0,0 +1 @@
+data/
\ No newline at end of file