Where Does Directus Store Uploads and Data?
Directus persists the database, uploads, and extensions under /directus subfolders, configured through environment variables.
Last updated
Directus keeps three things on disk: the database file when running SQLite, uploaded files, and extensions. Docker conventions place them at /directus/database, /directus/uploads, and /directus/extensions. Everything else, including which database to use, arrives as environment variables like SECRET and DB_CLIENT.
The common failure is persisting uploads but forgetting the database volume, or vice versa. Files without rows are invisible in the studio, and rows without files are broken thumbnails. Mount all three paths from the start, even on small installs.
Where Directus stores this, by platform
/directus/uploads
Uploads root for the default local driver. Override per store with STORAGE_*_ROOT variables. Mount a volume here or files die with the container.
/directus/database
SQLite home (data.db) plus the extensions autoload dir. Postgres installs still need the uploads and extensions mounts.
Frequently asked questions
Which Directus volumes must I persist in Docker?
Mount volumes for /directus/database (SQLite), /directus/uploads, and /directus/extensions. With Postgres, back up that cluster instead of a database folder.
How do I move Directus uploads to S3?
Set STORAGE_LOCATIONS plus per store ROOT values, such as STORAGE_LOCAL_ROOT for disk. The studio uploads to the first configured location by default.
Where do I drop custom Directus extensions?
Copy the built extension folders into the extensions mount (each with package.json and dist) and restart. The container loads them automatically on boot.
Notice an outdated path? Let us know.