Persistent extensions volume in Docker
Currently my panel is a clone of the pterodactyl panel repo with an added extension for managing minecraft modpacks (this was before we decided to use blueprint).
So now I tried adding the blueprint and I did so by unpacking the blueprint and putting everything from it directly into the panel. I added the installation of dependencies required for blueprint and added execution of blueprint.sh.
It all works, and I can install an extension (extension works fine too), but if I redeploy the project the extension is "removed". I can't see the new extension in the extensions tab but if I reinstall it will have all the data (it's an expansion for managing subdomains and it has domains I've added before), I guess because it saves it to the db of the panel.
Do I have to reinstall the extension each time I redeploy the project or is it possible to keep the extensions?
I've tried making a volume for /app/.blueprint/extensions but even then I don't see it in the extensions tab and when I try to reinstall the subdomains extension I get error 500 (log from panel is:
Is it maybe because blueprint.sh runs everytime on redeployment because it's in a dockerfile?
I also tried executing blueprint.sh inside ENTRYPOINT and mounting /app/.blueprint volume but then I get the error to finish installing blueprint.
8 Replies
If your panel is running in Docker, see https://github.com/blueprintframework/docker
Oh thanks!
I've seen that, but, how does it work? Is it supposed to run along with a panel in a separate compose file? Or is it panel + blueprint all in one file?
It replaces the stock panel image. It is based on the panel image, and then:
- Adds build dependencies
- Installs Blueprint
- Adds a helper script listening in the background to sync between the bind-mount where you put your extensions and the normal mount containing /app from the container
See https://discord.com/channels/1063548024825057451/1094949482535321690/1244743256575578164 for adapting your current compose file (it just needs the image and a few mounts)
And then if you want to mount something else inside the /app directory, like here where I set my own icon and background for the loader extension, you'd add another mount like this and use chattr +i to make the contents of that bind-mount immutable so they don't go bye-bye when you remove the volume to update the panel version:

Okay, I see now.
I've managed to make it work, thanks for the help! 😄
No problem 🥂
Hey all,
I've got a similar issue. All is working well and I can install blueprint extensions. But as soon as I re-create the containers all blueprint extensions are gone.
As my docker compose I don't have a clone of pterodactyl (I believe) as OP but just used the plain classic-docker-compose.yml from the blueprint docker github repo.
Bindings are as follows (I use relative folder bindings with ./):
volumes:
- "./var/:/app/var/"
- "./nginx/:/etc/nginx/http.d/"
- "./logs/:/app/storage/logs"
- "./extensions/:/blueprint_extensions"
In my case which bindings are needed to make the extensions persistent?
Make your own post please. You need all the mounts in the classic compose file, including the one that isn't a bind mount and leads to /app in the container.
Thanks! Will do that and provide some more info