diff --git a/server/models/documents.js b/server/models/documents.js
index 148ae8c4ecf9f908791b5c96ccb25699ad094f83..9e98ab60b984b96cc627b8e63979c5c40954a14e 100644
--- a/server/models/documents.js
+++ b/server/models/documents.js
@@ -19,7 +19,9 @@ const Document = {
     const { open } = require("sqlite");
 
     const db = await open({
-      filename: "anythingllm.db",
+      filename: `${
+        !!process.env.STORAGE_DIR ? `${process.env.STORAGE_DIR}/` : ""
+      }anythingllm.db`,
       driver: sqlite3.Database,
     });
 
diff --git a/server/models/vectors.js b/server/models/vectors.js
index d3ad9cc878d6e12aeceb7e86beb5f0f05b209666..6531ac4f71a18e787064033c6da30f0861d0e6e1 100644
--- a/server/models/vectors.js
+++ b/server/models/vectors.js
@@ -17,7 +17,9 @@ const DocumentVectors = {
     const { open } = require("sqlite");
 
     const db = await open({
-      filename: "anythingllm.db",
+      filename: `${
+        !!process.env.STORAGE_DIR ? `${process.env.STORAGE_DIR}/` : ""
+      }anythingllm.db`,
       driver: sqlite3.Database,
     });
 
diff --git a/server/models/workspace.js b/server/models/workspace.js
index ddb8faa93d3e468e727ba11b3ac1972bc4d385ee..8c6c212551485262647af085ffee1c9c965cbeaf 100644
--- a/server/models/workspace.js
+++ b/server/models/workspace.js
@@ -16,7 +16,9 @@ const Workspace = {
     const { open } = require("sqlite");
 
     const db = await open({
-      filename: "anythingllm.db",
+      filename: `${
+        !!process.env.STORAGE_DIR ? `${process.env.STORAGE_DIR}/` : ""
+      }anythingllm.db`,
       driver: sqlite3.Database,
     });
 
diff --git a/server/models/workspaceChats.js b/server/models/workspaceChats.js
index 8a545b15c1914796635b63a391cb013059dab3ce..22763527c31f6eb14c6c0d6492662f2fad2689d5 100644
--- a/server/models/workspaceChats.js
+++ b/server/models/workspaceChats.js
@@ -14,7 +14,9 @@ const WorkspaceChats = {
     const { open } = require("sqlite");
 
     const db = await open({
-      filename: "anythingllm.db",
+      filename: `${
+        !!process.env.STORAGE_DIR ? `${process.env.STORAGE_DIR}/` : ""
+      }anythingllm.db`,
       driver: sqlite3.Database,
     });
 
diff --git a/server/utils/files/index.js b/server/utils/files/index.js
index 21021f004a3885f0bc2a7168d2e9e5b148361249..978f785fdd50b1fc0d1ba95e5af0b3639eed421f 100644
--- a/server/utils/files/index.js
+++ b/server/utils/files/index.js
@@ -4,7 +4,11 @@ const { v5: uuidv5 } = require("uuid");
 
 async function collectDocumentData(folderName = null) {
   if (!folderName) throw new Error("No docPath provided in request");
-  const folder = path.resolve(__dirname, `../../documents/${folderName}`);
+  const folder =
+    process.env.NODE_ENV === "development"
+      ? path.resolve(__dirname, `../../documents/${folderName}`)
+      : path.resolve(process.env.STORAGE_DIR, `documents/${folderName}`);
+
   const dirExists = fs.existsSync(folder);
   if (!dirExists)
     throw new Error(
@@ -28,7 +32,11 @@ async function collectDocumentData(folderName = null) {
 // eg: youtube-subject/video-123.json
 async function fileData(filePath = null) {
   if (!filePath) throw new Error("No docPath provided in request");
-  const fullPath = path.resolve(__dirname, `../../documents/${filePath}`);
+
+  const fullPath =
+    process.env.NODE_ENV === "development"
+      ? path.resolve(__dirname, `../../documents/${filePath}`)
+      : path.resolve(process.env.STORAGE_DIR, `documents/${filePath}`);
   const fileExists = fs.existsSync(fullPath);
   if (!fileExists) return null;
 
@@ -37,9 +45,12 @@ async function fileData(filePath = null) {
 }
 
 async function viewLocalFiles() {
-  const folder = path.resolve(__dirname, `../../documents`);
+  const folder =
+    process.env.NODE_ENV === "development"
+      ? path.resolve(__dirname, `../../documents`)
+      : path.resolve(process.env.STORAGE_DIR, `documents`);
   const dirExists = fs.existsSync(folder);
-  if (!dirExists) return {};
+  if (!dirExists) fs.mkdirSync(folder);
 
   const directory = {
     name: "documents",
@@ -49,7 +60,12 @@ async function viewLocalFiles() {
 
   for (const file of fs.readdirSync(folder)) {
     if (path.extname(file) === ".md") continue;
-    const folderPath = path.resolve(__dirname, `../../documents/${file}`);
+
+    const folderPath =
+      process.env.NODE_ENV === "development"
+        ? path.resolve(__dirname, `../../documents/${file}`)
+        : path.resolve(process.env.STORAGE_DIR, `documents/${file}`);
+
     const isFolder = fs.lstatSync(folderPath).isDirectory();
     if (isFolder) {
       const subdocs = {
@@ -88,7 +104,10 @@ async function cachedVectorInformation(filename = null, checkOnly = false) {
   if (!filename) return checkOnly ? false : { exists: false, chunks: [] };
 
   const digest = uuidv5(filename, uuidv5.URL);
-  const file = path.resolve(__dirname, `../../vector-cache/${digest}.json`);
+  const file =
+    process.env.NODE_ENV === "development"
+      ? path.resolve(__dirname, `../../vector-cache/${digest}.json`)
+      : path.resolve(process.env.STORAGE_DIR, `vector-cache/${digest}.json`);
   const exists = fs.existsSync(file);
 
   if (checkOnly) return exists;
@@ -109,7 +128,10 @@ async function storeVectorResult(vectorData = [], filename = null) {
   console.log(
     `Caching vectorized results of ${filename} to prevent duplicated embedding.`
   );
-  const folder = path.resolve(__dirname, `../../vector-cache`);
+  const folder =
+    process.env.NODE_ENV === "development"
+      ? path.resolve(__dirname, `../../vector-cache`)
+      : path.resolve(process.env.STORAGE_DIR, `vector-cache`);
 
   if (!fs.existsSync(folder)) fs.mkdirSync(folder);