Where Does Strapi Store Uploads and Data?
Strapi stores uploads in public/uploads while content lives in the database, so both need backup together.
Last updated
Strapi keeps two halves that must travel together. Uploaded media lands on disk in public/uploads (or /opt/app/public/uploads in Docker examples). Everything else, entries, relations, and the media library index, lives in the configured database via config/database.
Ephemeral hosts expose the split fast: deploys wipe local uploads while the database survives, leaving posts with dead images. The fix is a volume on the uploads path, or an external provider, plus database backups on their own schedule.
Where Strapi stores this, by platform
/opt/app/public/uploads
Default local provider target. Docker compose examples mount a host folder here. Database connection comes from config/database plus env, backed up separately.
./public/uploads
Bare project layout. Same uploads role as the container path. Config in config/, content models in src/api, database file or server per env.
Frequently asked questions
How do I back up a self hosted Strapi project?
Mount the uploads folder to persistent storage and back up the database separately. Files on disk without their database rows are orphans, and rows without files are broken images.
How do I move Strapi content to another server?
Run strapi export on the instance. It writes an archive with entities, relations, assets, schemas, and config in one file for moves between environments.
Should uploads stay on local disk in production?
Switch the upload provider to S3 or similar in plugins config. Local disk works for single servers, while any multi instance setup needs shared storage.
Notice an outdated path? Let us know.