Migration Guide
Overview
Starting with version 1.3, BrickTracker consolidates all user data into a single data/ folder for easier backup, persistence, and volume mapping.
Notice
This guide assumes you are running BrickTracker using Docker Compose with bind mounts.
If you're using Docker named volumes instead of bind mounts, you'll need to manually copy data between volumes. The commands below are specific to bind mount setups.
What Changed?
New Default Structure (v1.3+)
All relative paths are resolved relative to /app inside the container. Previously all paths were relative to /app/static.
For example: data/app.db → /app/data/app.db
Container (/app/):
├── data/ # NEW: Single volume mount for all user data
│ ├── .env # Configuration (recommended location)
│ ├── app.db # Database
│ ├── retired_sets.csv # Downloaded CSV files
│ ├── themes.csv
│ ├── sets/ # Set images
│ ├── parts/ # Part images
│ ├── minifigures/ # Minifigure images
│ └── instructions/ # PDF instructions
└── static/ # App assets
├── brick.png
├── styles.css
└── scripts/Docker Compose volume: Single mount ./data:/app/data/
Previous Structure (v1.2 and earlier)
Container (/app/):
├── app.db # Mounted from ./data/ on host
├── retired_sets.csv # Mounted from ./data/ on host
├── themes.csv
└── static/
├── instructions/ # Separate bind mount
├── minifigs/ # Separate bind mount
├── parts/ # Separate bind mount
├── sets/ # Separate bind mountDocker Compose bind mounts: 5 separate mounts
volumes:
- ./data:/app/
- ./instructions:/app/static/instructions/
- ./minifigs:/app/static/minifigs/
- ./parts:/app/static/parts/
- ./sets:/app/static/sets/Migration Options
Warning
Backup your data before making any changes!
Option 1: Migrate to New Data Folder Structure (Recommended)
This is the recommended approach for cleaner backups and simpler bind mount management.
Stop the container:
bashdocker compose downCreate new consolidated data directory on host:
bashmkdir -p ./bricktracker-data/{sets,parts,minifigures,instructions}Move data from old bind mount locations to new structure:
Assuming your old
compose.yamlhad:./data:/app/(contains app.db, retired_sets.csv, themes.csv)./instructions:/app/static/instructions/./minifigs:/app/static/minifigs/./parts:/app/static/parts/./sets:/app/static/sets/
WARNING
Default location for minifigures changed from
minifigstominifiguresMove the files:
bash# Move configuration file (optional but recommended) mv .env ./bricktracker-data/.env # Move database and CSV files mv ./data/app.db ./bricktracker-data/ mv ./data/retired_sets.csv ./bricktracker-data/ mv ./data/themes.csv ./bricktracker-data/ # Move image and instruction folders mv ./static/instructions/* ./bricktracker-data/instructions/ mv ./static/minifigs/* ./bricktracker-data/minifigures/ mv ./static/parts/* ./bricktracker-data/parts/ mv ./static/sets/* ./bricktracker-data/sets/Update
compose.yamlto use single bind mount:yamlservices: bricktracker: volumes: - ./bricktracker-data:/app/data/Remove
env_file(if.envwas moved todata/, as recommended).Remove old path overrides from
.env(if present): Delete any lines starting with:BK_DATABASE_PATH=BK_INSTRUCTIONS_FOLDER=BK_MINIFIGURES_FOLDER=BK_PARTS_FOLDER=BK_SETS_FOLDER=BK_RETIRED_SETS_PATH=BK_THEMES_PATH=
Update to v1.3 and restart:
bashdocker compose pull docker compose up -dVerify everything works:
bashdocker compose logs -f bricktrackerCheck the web interface to ensure images/data are loading
Add a set to test that the database is working
Clean up old directories (after verification):
bashrm -r ./data ./static
Option 2: Keep Current Setup (No Data Migration)
If you want to keep your current volume structure without moving any files:
Add these environment variables to your
.envfile:bashBK_DATABASE_PATH=app.db BK_RETIRED_SETS_PATH=retired_sets.csv BK_THEMES_PATH=themes.csv BK_INSTRUCTIONS_FOLDER=static/instructions BK_MINIFIGURES_FOLDER=static/minifigs BK_PARTS_FOLDER=static/parts BK_SETS_FOLDER=static/setsKeep your existing volume mounts in
compose.yaml:yamlvolumes: - ./data:/app/ - ./instructions:/app/static/instructions/ - ./minifigs:/app/static/minifigs/ - ./parts:/app/static/parts/ - ./sets:/app/static/sets/Update to v1.3 and restart:
bashdocker compose pull docker compose up -d
That's it! Your existing setup will continue to work.
Configuration File (.env) Location
New Behavior (v1.3+)
BrickTracker now supports .env in two locations with automatic detection:
data/.env (recommended - new location)
- Included in data volume backup
- Settings persist when changed via admin panel
- Priority location (checked first)
- No
env_fileneeded - app reads it directly from/app/data/.env
.env (backward compatibility - root)
- Continues to work for existing installations
- Requires
env_file: .envin compose.yaml for Docker to load it at startup - Not included in data volume (unless you add
.envtodata/)
Migration Steps for .env
Option A: Move to data folder (recommended)
Move .env to data folder:
mv .env data/.envUpdate compose.yaml - remove or comment out env_file. The app will automatically find and use /app/data/.env.
Option B: Keep in root (backward compatible)
No changes needed. Keep env_file: .env in compose.yaml. BrickTracker will use .env from root as fallback.
Notice
The application automatically detects which location has the .env file at runtime. No Docker Compose env_file directive is needed for data/.env because the app reads it directly from the mounted volume.
Configuration Reference
New Default Paths (v1.3+)
All paths are now relative to /app inside the container.
| Config Variable | Default Value | Resolves To (Container) | Description |
|---|---|---|---|
BK_DATABASE_PATH | data/app.db | /app/data/app.db | Database file |
BK_RETIRED_SETS_PATH | data/retired_sets.csv | /app/data/retired_sets.csv | Retired sets CSV |
BK_THEMES_PATH | data/themes.csv | /app/data/themes.csv | Themes CSV |
BK_INSTRUCTIONS_FOLDER | data/instructions | /app/data/instructions | PDF instructions |
BK_MINIFIGURES_FOLDER | data/minifigures | /app/data/minifigures | Minifigure images |
BK_PARTS_FOLDER | data/parts | /app/data/parts | Part images |
BK_SETS_FOLDER | data/sets | /app/data/sets | Set images |
Docker Compose bind mount: ./bricktracker-data:/app/data/ (single mount)
Old Paths (v1.2 and earlier)
To preserve old volume structure without migration, add to .env:
| Config Variable | Value to Preserve Old Behavior | Resolves To (Container) |
|---|---|---|
BK_DATABASE_PATH | app.db | /app/app.db |
BK_RETIRED_SETS_PATH | retired_sets.csv | /app/retired_sets.csv |
BK_THEMES_PATH | themes.csv | /app/themes.csv |
BK_INSTRUCTIONS_FOLDER | static/instructions | /app/static/instructions |
BK_MINIFIGURES_FOLDER | static/minifigs | /app/static/minifigs |
BK_PARTS_FOLDER | static/parts | /app/static/parts |
BK_SETS_FOLDER | static/sets | /app/static/sets |
Benefits of New Structure
- Single Bind Mount: One
./bricktracker-data:/app/data/mount instead of five separate mounts - Easier Backups: All user data in one location - just backup the
bricktracker-datadirectory - Cleaner Separation: User data separated from application assets
- Better Portability: Migrate between systems by copying/moving single directory
Troubleshooting
Images/Instructions Not Loading After Migration
Check if data was copied correctly:
bashdocker exec BrickTracker ls -la /app/data/ docker exec BrickTracker ls -la /app/data/sets/ docker exec BrickTracker ls -la /app/data/instructions/Verify bind mount:
bashdocker compose configShould show the volume mount with a source local to your system and a target as
/app/datainside the container.yamlvolumes: - type: bind source: /home/<user>/Docker/BrickTracker/bricktracker-data target: /app/data bind: {}Check logs for path errors:
bashdocker compose logs -fVerify no old environment overrides:
bashcat .env | grep BK_
Database Not Found
Check database file location in container:
bashdocker exec BrickTracker ls -la /app/data/app.dbIf using old setup, verify environment variables:
bashdocker exec BrickTracker env | grep BK_DATABASE_PATHCheck host directory contains database:
bashls -la ./bricktracker-data/Should show: app.db, retired_sets.csv, themes.csv, and subdirectories
Settings Don't Persist After Restart
Error: Admin panel changes revert after docker compose restart
Solution:
This happens when .env is not in a volume. Choose one:
Option A: Move .env to data folder
mv .env data/.envUpdate compose.yaml - remove or comment out env_file. The app will automatically find and use /app/data/.env.
Option B: Mount .env as volume
volumes:
- ./.env:/app/.envPermission Errors
If you see permission errors after migration:
Fix permissions on bind-mounted directory.
sudo chown -R $(id -u):$(id -g) ./bricktracker-dataPermission denied writing .env:
If the admin panel shows an error when saving settings:
- Ensure
.envfile is writable by container user - If using volume mount, check host file permissions
- In container:
docker exec BrickTracker ls -la /app/data/.envor/app/.env
Reverting Migration
If you need to revert to the old structure:
- Stop the container:
docker compose down - Restore old
compose.yamlwith its volume mounts - Add old path environment variables to
.env - Start:
docker compose up -d
