diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index ae3e306b6ef1a88fcc13e1cfd2e6044e6eab9421..76de6d1df20a36f4380d0d5db3341d9217a0d756 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -1,7 +1,11 @@
-version: '3'
-
 services:
   playground-be:
     command: yarn dev -L
+    volumes:
+      - .:/usr/src/playground-be
+
   upload:
     command: npm start
+    volumes:
+      - ./upload:/usr/src/upload
+      - /usr/src/upload/node_modules/
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index 1f859306292ad8945f8425d46f8aa1df7e5191f1..11b000d5c6280fa1e9ba1c7d99388b73daa08ae1 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -1,7 +1,5 @@
-version: '3'
-
 services:
   playground-be:
-    command: yarn dev -L
+    command: yarn start
   upload:
     command: npm run prod
diff --git a/docker-compose.test.yml b/docker-compose.test.yml
index 3c5b5e0451d609d2f86498deb40b6a93641365a8..1d3b5f093e93b020130fac51edd10d220971be64 100644
--- a/docker-compose.test.yml
+++ b/docker-compose.test.yml
@@ -1,6 +1,5 @@
-version: '3'
-
 services:
   playground-be:
-    container_name: playground-be-test
     command: yarn test
+    volumes:
+      - .:/usr/src/playground-be
diff --git a/docker-compose.yml b/docker-compose.yml
index 4842f346ee4b3382e138b7c92d1e1dd1f6587a05..de3f859d4c9dc621e5926c907bd300a3de5606cd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,21 +1,19 @@
-# upload/Dockerfile
-version: '3'
-
 services:
   playground-be:
+    container_name: ${ENV:-dev}-playground-be
     build: .
-    image: playground-be
+    image: boschvn/playground-be:${IMAGE_TAG:-latest}
     ports:
       - '${PORT}:${PORT}'
     depends_on:
       - playground-db
       - upload
-    volumes:
-      - .:/usr/src/playground-be
     networks:
       - node-network
+    restart: always
 
   playground-db:
+    container_name: ${ENV:-dev}-playground-db
     image: mongo:4.4.6-bionic
     ports:
       - '${MONGO_EXPOSE_PORT}:27017'
@@ -23,24 +21,24 @@ services:
       - dbdata:/data/db
     networks:
       - node-network
+    restart: always
 
   upload:
+    container_name: ${ENV:-dev}-upload
     build: ./upload/
-    image: upload
+    image: boschvn/upload:${IMAGE_TAG:-latest}
     ports:
       - '${UPLOAD_PORT}:${UPLOAD_PORT}'
     volumes:
-      - ./upload:/usr/src/upload
-      - /usr/src/upload/node_modules/
       - '${UPLOAD_PATH}:/usr/src/upload/data'
+
     networks:
       - node-network
-
+    restart: always
 
 volumes:
   dbdata:
 
-
 networks:
   node-network:
     driver: bridge
diff --git a/start.sh b/start.sh
index c3259f0cfc5be8db5cce123d8446fd098f8357a5..fe1ddba1e916fb97edf2e43ce0f62870f15d1f0e 100755
--- a/start.sh
+++ b/start.sh
@@ -37,7 +37,10 @@ if [ ! -d "$UPLOAD_PATH" ]; then
 fi
 
 # Replace env file to upload directory
-cp .env ./upload/ -f
+if ! cp .env ./upload/ -f; then
+  echo "Failed to copy .env file to ./upload/"
+  exit 1
+fi
 
 # Set permissions for the directory
 echo "Setting permissions for $UPLOAD_PATH"
@@ -48,23 +51,41 @@ sudo chmod -R 775 "$UPLOAD_PATH"
 DOCKER_COMMAND=""
 NO_CACHE=""
 DETACH=""
+BUILD=""
 
-# Check for --no-cache argument
+# Check for arguments
 for arg in "$@"
 do
-  if [ "$arg" == "--no-cache" ]; then
-    NO_CACHE="--no-cache"
-  fi
-  if [ "$arg" == "-d" ]; then
-    DETACH="-d"
-  fi
+  case $arg in
+    --no-cache)
+      NO_CACHE="--no-cache"
+      shift
+      ;;
+    -d)
+      DETACH="-d"
+      shift
+      ;;
+    --build)
+      BUILD="--build"
+      shift
+      ;;
+    -prod)
+      ENV_SUFFIX="prod"
+      shift
+      ;;
+    *)
+      # Handle unexpected arguments
+      echo "Unknown argument: $arg"
+      exit 1
+      ;;
+  esac
 done
 
-# Determine the command to run based on the argument
-if [ "$1" == "-prod" ]; then
-  DOCKER_COMMAND="docker compose -f docker-compose.yml -f docker-compose.prod.yml up --build $NO_CACHE $DETACH"
+# Determine the Docker Compose command based on the -prod flag
+if [ "$ENV_SUFFIX" == "prod" ]; then
+  DOCKER_COMMAND="docker compose -p ${ENV}-playground-be -f docker-compose.yml -f docker-compose.prod.yml up $BUILD $NO_CACHE $DETACH"
 else
-  DOCKER_COMMAND="docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build $NO_CACHE $DETACH"
+  DOCKER_COMMAND="docker compose -p ${ENV}-playground-be -f docker-compose.yml -f docker-compose.dev.yml up $BUILD $NO_CACHE $DETACH"
 fi
 
 # Run Docker Compose
diff --git a/upload/Dockerfile b/upload/Dockerfile
index 9de0da92a7f911a98da04ce44f5c41336b99d7ba..b2db6bedd6f11cbc9e4ee5828637ba0682540ac3 100755
--- a/upload/Dockerfile
+++ b/upload/Dockerfile
@@ -12,4 +12,3 @@ USER node
 RUN npm install
 
 COPY --chown=node:node . .
-