This document describes breaking changes and migration steps between major versions.
What changed:
- eXeLearning 3.x used
erseco/alpine-php-webserverwhich runs as usernobody - eXeLearning 4.x uses the official Bun image (
oven/bun) which runs as userbun
Impact:
If you have an existing installation with data in /mnt/data (or your configured FILES_DIR), the new container won't be able to write to those directories because they're owned by nobody.
How to fix:
Choose one of these options depending on your situation:
Before starting the new container, change ownership of your data directory:
# Stop the current container
docker compose down
# Fix permissions (adjust path if needed)
sudo chown -R 1000:1000 /path/to/your/mnt/data
# Start the new container
docker compose up -dNote: User
bunhas UID 1000 in the official Bun image.
If you're okay losing existing data (test installations, demos):
# Stop and remove everything including volumes
docker compose down -v
# Start fresh
docker compose up -dIf you use bind mounts instead of Docker volumes, ensure the host directory is writable by UID 1000:
mkdir -p /opt/exelearning-data
chown 1000:1000 /opt/exelearning-dataThen in your docker-compose.yml:
volumes:
- /opt/exelearning-data:/mnt/data- Backend rewritten from PHP/Symfony to Bun/Elysia
- Real-time collaboration via Yjs WebSockets
- Improved export performance
- See CHANGELOG.md for full details