Where Does Pixelfed Store Uploads and Data?
Pixelfed keeps uploads in storage/, settings in .env, and posts in MariaDB plus Redis queues.
Last updated
Pixelfed is Laravel, so state follows the framework layout. Uploaded media lands in storage (mounted to /var/www/storage or /var/www/html/storage in containers). Config lives in .env at the project root. Posts live in MariaDB, queues in Redis.
The v2 Docker layout moved from anonymous volumes to host bind paths controlled by DOCKER_*_HOST env keys. Migrations need the old volumes copied into the new bind roots before first boot, or the instance wakes up with a database and no pictures.
Where Pixelfed stores this, by platform
./storage
Uploads, emojis, and remote media cache. Mount it persistently and keep www-data ownership. DB and Redis volumes sit beside it.
./.env
App key, domains, DB and mail credentials. DOCKER_*_HOST keys in v2 point the bind mounts at host paths.
Frequently asked questions
How do I back up a Pixelfed instance?
Back up the database, the storage tree, and .env together. Uploads without rows are invisible, rows without files are broken images, and .env holds the app key.
Uploads fail with permission denied. What fixes it?
Fix ownership to the web user on storage and bootstrap/cache. Permission denied on nested public paths is the classic Docker bind mount symptom.
Where did my data go after the v2 Docker upgrade?
They changed from anonymous volumes to host binds in v2. Old volume data must be migrated out first or the new layout starts empty beside it.
Notice an outdated path? Let us know.