diff --git a/Caddyfile b/Caddyfile
index cd87cc3d2ba8392236d92e5c64a2a28af6884fba..00570a4ee3932d72741ec63efc714bbbd086260b 100644
--- a/Caddyfile
+++ b/Caddyfile
@@ -8,7 +8,7 @@
 # this machine's public IP, then replace ":80" below with your
 # domain name.
 
-portal.thriwe.shepherd.watch {
+PORTAL_DOMAIN_NAME {
 	# Set this path to your site's directory.
 	# root * /var/www
 
@@ -25,14 +25,14 @@ portal.thriwe.shepherd.watch {
 	# php_fastcgi localhost:9000
 }
 
-one.thriwe.shepherd.watch {
+ONEAPI_DOMAIN_NAME {
 	reverse_proxy localhost:8081
 	log {
 		output file /var/logs/caddy/oneapi-access.log
 	}
 }
 
-metrics.thriwe.shepherd.watch {
+METRICS_DOMAIN_NAME {
 	reverse_proxy /* localhost:3000
 
 	reverse_proxy /api/live/* localhost:3000
@@ -45,7 +45,7 @@ metrics.thriwe.shepherd.watch {
 	}
 }
 
-adm.thriwe.shepherd.watch {
+ADM_DOMAIN_NAME {
 	reverse_proxy localhost:8000
 	log {
 		output file /var/logs/caddy/adm-access.log
diff --git a/docker-compose.yml b/docker-compose.yml
index 0511e8d10dcb5fe18e79b46e7191a5de952ce624..af46e37b245bcb1787ed4b1986b723439f9c8aad 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -251,7 +251,7 @@ services:
         max-size: "200m"
         max-file: "2"
         keep-file: "false"
-        loki-external-labels: "job={{.Name}},version=${v1.90.0},public_teamspace_id=${PUBLIC_TEAMSPACE_ID}"
+        loki-external-labels: "job={{.Name}},version=v1.90.0,public_teamspace_id=${PUBLIC_TEAMSPACE_ID}"
   
   # Alertmanager
   # Running on port 9093
@@ -276,7 +276,7 @@ services:
         max-size: "200m"
         max-file: "2"
         keep-file: "false"
-        loki-external-labels: "job={{.Name}},version=${v0.27.0},public_teamspace_id=${PUBLIC_TEAMSPACE_ID}"
+        loki-external-labels: "job={{.Name}},version=v0.27.0,public_teamspace_id=${PUBLIC_TEAMSPACE_ID}"
   
   # ADM Required
   scep:
diff --git a/setup-debian.sh b/setup-debian.sh
index d18570bfa5f6f9fde096892bf089fd202a1b74e3..c1e2dd0d55a4906388647bade8fe8a4e6eccc086 100755
--- a/setup-debian.sh
+++ b/setup-debian.sh
@@ -15,7 +15,7 @@ is_active() {
         echo "$service service is running."
     else
         echo "$service service is not running. Trying to restart..."
-        sudo systemctl start $service
+        sudo systemctl start "$service"
         if sudo systemctl is-active "$service" >/dev/null; then
             echo "Successfully started service $service."
         else
@@ -35,24 +35,28 @@ update_env_variable() {
     sed -i "s/^$variable_name=.*/$variable_name=$variable_value/" "$file_path"
 }
 
-extract_env_variable() {
+# Replace variable
+replace_variable() {
     local variable_name="$1"
-    local source_file_path="$2"
-    local destination_file_path="$3"
-
-    # Use grep to find the line containing the variable
-    local variable_line=$(grep "^$variable_name=" "$source_file_path")
-
-    if [ -n "$variable_line" ]; then
-        # Use cut to extract the value of the variable
-        local variable_value=$(echo "$variable_line" | cut -d '=' -f 2-)
-        
-        # Write the value to the destination file
-        echo "$variable_value" > "$destination_file_path"
-        
-        echo "Extracted value of $variable_name from $source_file_path: $variable_value"
+    local variable_value="$2"
+    local file_path="$3"
+
+    # Replace variable in the file
+    sed -i "s/\${$variable_name}/$variable_value/g" "$file_path"
+}
+
+extract_env_value_or_exit() {
+    local variable_name="$1"
+    local file_name="$2"
+
+    # Use grep to find the line containing the variable and cut to extract its value
+    local variable_value=$(grep "^$variable_name=" "$file_name" | cut -d '=' -f 2- | head -n 1)
+
+    if [ -n "$variable_value" ]; then
+        echo "$variable_value"
     else
-        echo "Variable $variable_name not found in $source_file_path."
+        echo "Variable $variable_name not found in $file_name." >&2
+        exit 1
     fi
 }
 
@@ -119,6 +123,10 @@ ENV_THRIWE_PATH="$PROJECT_PATH/.env.thriwe"
 ENV_PATH="$PROJECT_PATH/.env"
 ENV_ALERTMANAGER_URL_PATH="$PROJECT_PATH/.alertmanager-url"
 ENV_ALERTMANAGER_SECRET_PATH="$PROJECT_PATH/.alertmanager-secret"
+ENV_VIMACOG_GEN="$PROJECT_PATH/vimacog/.env-gen"
+ENV_VIMACOG_HARD_GEN="$PROJECT_PATH/vimacog/.env-hard-gen"
+
+CADDYFILE_PATH="$PROJECT_PATH/Caddyfile"
 
 SCRIPT_PATH="$PROJECT_PATH/setup-debian.sh"
 SCRIPT_LOG_PATH="$PROJECT_PATH/cron-logs/setup-debian-cron.log"
@@ -131,12 +139,16 @@ VIMACOG_GEN_PATH="$PROJECT_PATH/vimacog/vimacog-gen.sh"
 VIMACOG_GEN_LOG_PATH="$PROJECT_PATH/cron-logs/vimacog-gen-cron.log"
 VIMACOG_GEN_JOB="*/1 * * * * $VIMACOG_GEN_PATH >> $VIMACOG_GEN_LOG_PATH 2>&1"
 VIMACOG_GEN_EXISTS=$(crontab -l | grep -F "$VIMACOG_GEN_PATH" | grep -v grep | wc -l)
+VIMACOG_GEN_LOG_DIR="$PROJECT_PATH/vimacog/gen-logs/"
+VIMACOG_GEN_BACKUP_DIR="$PROJECT_PATH/vimacog/gen-backup/"
 
 # NOTE: If this path is changed, change in `./vimacog/vimacog-hard-gen.sh`
 VIMACOG_HARD_GEN_PATH="$PROJECT_PATH/vimacog/vimacog-hard-gen.sh"
 VIMACOG_HARD_GEN_LOG_PATH="$PROJECT_PATH/cron-logs/vimacog-hard-gen-cron.log"
 VIMACOG_HARD_GEN_JOB="0 0 * * * $VIMACOG_HARD_GEN_PATH >> $VIMACOG_HARD_GEN_LOG_PATH 2>&1"
 VIMACOG_HARD_GEN_EXISTS=$(crontab -l | grep -F "$VIMACOG_HARD_GEN_PATH" | grep -v grep | wc -l)
+VIMACOG_HARD_GEN_LOG_DIR="$PROJECT_PATH/vimacog/hard-gen-logs/"
+VIMACOG_HARD_GEN_BACKUP_DIR="$PROJECT_PATH/vimacog/hard-gen-backup/"
 
 # Check for Git updates & pull if updates are available
 # Returns whether to hard run or soft run
@@ -144,10 +156,10 @@ VIMACOG_HARD_GEN_EXISTS=$(crontab -l | grep -F "$VIMACOG_HARD_GEN_PATH" | grep -
 setup_git() {
     echo "Checking for git updates..."
     cd "$PROJECT_PATH" || exit
-    git fetch origin setup-docker-deployment >/dev/null 2>&1
+    git fetch origin main >/dev/null 2>&1
     if [ "$(git rev-parse HEAD)" != "$(git rev-parse FETCH_HEAD)" ]; then
         # TODO: Change this to main branch
-        git pull origin setup-docker-deployment
+        git pull origin main
         echo "Repository updated. Applying updates..."
         # Ensure the scripts are executable after a potential update
         chmod +x "$SCRIPT_PATH"
@@ -174,11 +186,44 @@ setup_env() {
         echo "Env file $ENV_THRIWE_PATH not found. Contact support@shepherd.watch in case of queries."
         exit 1
     fi
+    echo "Checking for vimacog env files..."
+    if [ ! -f "$ENV_VIMACOG_GEN" ]; then
+        echo "Vimacog env file not found, generating $ENV_VIMACOG_GEN..."
+        echo "export LOG_FILE_DIR=${VIMACOG_GEN_LOG_DIR}" > "$ENV_VIMACOG_GEN"
+        echo "export BACKUP_FILE_DIR=${VIMACOG_GEN_BACKUP_DIR}" >> "$ENV_VIMACOG_GEN"
+        echo "export SENTRY_LINK=" >> "$ENV_VIMACOG_GEN"
+
+        JWT_SIGNING_KEY=$(extract_env_value_or_exit "JWT_SIGNING_KEY" "$ENV_SUBCOM_PATH")
+        PUBLIC_TEAMSPACE_ID=$(extract_env_value_or_exit "PUBLIC_TEAMSPACE_ID" "$ENV_SUBCOM_PATH")
+        SHEPHERD_API_JRPC_URL=$(extract_env_value_or_exit "SHEPHERD_API_JRPC_URL" "$ENV_SUBCOM_PATH")
+
+        echo "export JWT_SIGNING_KEY=$JWT_SIGNING_KEY" >> "$ENV_VIMACOG_GEN"
+        echo "export PUBLIC_TEAMSPACE_ID=$PUBLIC_TEAMSPACE_ID" >> "$ENV_VIMACOG_GEN"
+        echo "export SHEPHERD_API_JRPC_URL=$SHEPHERD_API_JRPC_URL" >> "$ENV_VIMACOG_GEN"
+    fi
+    if [ ! -f "$ENV_VIMACOG_HARD_GEN" ]; then
+        echo "Vimacog env file not found, generating $ENV_VIMACOG_HARD_GEN..."
+        echo "export LOG_FILE_DIR=${VIMACOG_HARD_GEN_LOG_DIR}" > "$ENV_VIMACOG_HARD_GEN"
+        echo "export BACKUP_FILE_DIR=${VIMACOG_HARD_GEN_BACKUP_DIR}" >> "$ENV_VIMACOG_HARD_GEN"
+        echo "export SENTRY_LINK=" >> "$ENV_VIMACOG_HARD_GEN"
+
+        JWT_SIGNING_KEY=$(extract_env_value_or_exit "JWT_SIGNING_KEY" "$ENV_SUBCOM_PATH")
+        PUBLIC_TEAMSPACE_ID=$(extract_env_value_or_exit "PUBLIC_TEAMSPACE_ID" "$ENV_SUBCOM_PATH")
+        SHEPHERD_API_JRPC_URL=$(extract_env_value_or_exit "SHEPHERD_API_JRPC_URL" "$ENV_SUBCOM_PATH")
+
+        echo "export JWT_SIGNING_KEY=$JWT_SIGNING_KEY" >> "$ENV_VIMACOG_HARD_GEN"
+        echo "export PUBLIC_TEAMSPACE_ID=$PUBLIC_TEAMSPACE_ID" >> "$ENV_VIMACOG_HARD_GEN"
+        echo "export SHEPHERD_API_JRPC_URL=$SHEPHERD_API_JRPC_URL" >> "$ENV_VIMACOG_HARD_GEN"
+    fi
 
     # Variables are updated here
-    extract_env_variable "ONEAPI_ALERTS_PUSH" "$ENV_THRIWE_PATH" "$ENV_ALERTMANAGER_URL_PATH"
-    extract_env_variable "BASIC_BEARER_TOKEN" "$ENV_THRIWE_PATH" "$ENV_ALERTMANAGER_SECRET_PATH"
+    ## Use this function only to update `alertmanager` env, not suitable for other extractions
+    ONEAPI_ALERTS_PUSH=$(extract_env_value_or_exit "ONEAPI_ALERTS_PUSH" "$ENV_THRIWE_PATH")
+    BASIC_BEARER_TOKEN=$(extract_env_value_or_exit "BASIC_BEARER_TOKEN" "$ENV_THRIWE_PATH")
+    echo "$ONEAPI_ALERTS_PUSH" > "$ENV_ALERTMANAGER_URL_PATH"
+    echo "$BASIC_BEARER_TOKEN" > "$ENV_ALERTMANAGER_SECRET_PATH"
 
+    # Update this to rollout new update
     update_env_variable "WEBZERO_VERSION" "0.4.0" "$ENV_SUBCOM_PATH"
     update_env_variable "REPORTS_ACCUMULATOR_VERSION" "0.1.0" "$ENV_SUBCOM_PATH"
     update_env_variable "REPORTS_CRUNCHER_VERSION" "0.1.0" "$ENV_SUBCOM_PATH"
@@ -186,6 +231,16 @@ setup_env() {
     update_env_variable "TAG" "0.1.0" "$ENV_SUBCOM_PATH"
     update_env_variable "ONEAPI_VERSION" "2.1.0" "$ENV_SUBCOM_PATH"
 
+    # Caddy file replace
+    PORTAL_DOMAIN_NAME=$(extract_env_value_or_exit "PORTAL_DOMAIN_NAME" "$ENV_THRIWE_PATH")
+    ONEAPI_DOMAIN_NAME=$(extract_env_value_or_exit "ONEAPI_DOMAIN_NAME" "$ENV_THRIWE_PATH")
+    METRICS_DOMAIN_NAME=$(extract_env_value_or_exit "METRICS_DOMAIN_NAME" "$ENV_THRIWE_PATH")
+    ADM_DOMAIN_NAME=$(extract_env_value_or_exit "ADM_DOMAIN_NAME" "$ENV_THRIWE_PATH")
+    replace_variable "PORTAL_DOMAIN_NAME" "$PORTAL_DOMAIN_NAME" "$CADDYFILE_PATH"
+    replace_variable "ONEAPI_DOMAIN_NAME" "$ONEAPI_DOMAIN_NAME" "$CADDYFILE_PATH"
+    replace_variable "METRICS_DOMAIN_NAME" "$METRICS_DOMAIN_NAME" "$CADDYFILE_PATH"
+    replace_variable "ADM_DOMAIN_NAME" "$ADM_DOMAIN_NAME" "$CADDYFILE_PATH"
+
     if [ ! -f "$ENV_PATH" ]; then
         echo "$ENV_PATH not found. Generating..."
         cat ./.env.subcom ./.env.thriwe > .env