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:
[previous exception] [object] (Symfony\\Component\\Routing\\Exception\\RouteNotFoundException(code: 0): Route [admin.extensions.subdomains.index] not defined. at /app/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:467)
[previous exception] [object] (Symfony\\Component\\Routing\\Exception\\RouteNotFoundException(code: 0): Route [admin.extensions.subdomains.index] not defined. at /app/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:467)
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
Loki
Loki•9mo ago
If your panel is running in Docker, see https://github.com/blueprintframework/docker
klompie00😳
klompie00😳OP•9mo ago
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?
Loki
Loki•9mo ago
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:
- "${BASE_DIR}/pterodactyl/loader-imgs:/app/.blueprint/extensions/loader/public/img/"
- "${BASE_DIR}/pterodactyl/loader-imgs:/app/.blueprint/extensions/loader/public/img/"
No description
klompie00😳
klompie00😳OP•9mo ago
Okay, I see now. I've managed to make it work, thanks for the help! 😄
Loki
Loki•9mo ago
No problem 🥂
fxb
fxb•2w ago
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?
Loki
Loki•2w ago
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.
fxb
fxb•2w ago
Thanks! Will do that and provide some more info

Did you find this page helpful?