Jump to content

PiGallery2 manual install

11 posts in this topic Last Reply

Recommended Posts

I've been looking for a suitable photo gallery docker, and came across PiGallery2 (https://hub.docker.com/r/bpatrik/pigallery2). It's on Dockerhub, and I'm able to get it via Community Apps. There is a docker run command provided on the container page in Dockerhub:

docker run \
   -p 80:80 \
   -e NODE_ENV=production \
   -v <path to your config file folder>/config.json:/pigallery2-release/config.json \
   -v <path to your db file folder>/sqlite.db:/pigallery2-release/sqlite.db \
   -v <path to your images folder>:/pigallery2-release/demo/images \
   -v <path to your temp folder>:/pigallery2-release/demo/TEMP \

I think I can fill out the generic unRAID template from this, but I'm running into a problem getting anything to download. My docker run command gives this result:

root@localhost:# /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker run -d --name='pigallery2' --net='bridge'
-e TZ="Asia/Singapore" -e HOST_OS="unRAID" -p '8092:80/tcp' 
-v '/mnt/user/appdata/pigallery2/config/config.json':'/pigallery2-release/config.json':'rw' 
-v '/mnt/user/Photos/Photos and Videos':'/pigallery2-release/demo/images':'rw' 
-v '/mnt/user/appdata/pigallery2/temp':'/pigallery2-release/demo/TEMP':'rw' 'bpatrik/pigallery2' 
Unable to find image 'bpatrik/pigallery2:latest' locally
/usr/bin/docker: Error response from daemon: manifest for bpatrik/pigallery2:latest not found.

It's entirely possible that some of the parameters are wrong, but I can work on those. My main concern is being unable to find the latest image. Is there something I can do to get the image to download?


(I did try Piwigo, which I've seen recommended, but ran into some mySQL error when doing the indexing, and resolving that seemed beyond me and Google.)

Share this post

Link to post
9 hours ago, sonofdbn said:

bpatrik/pigallery2:latest not found.

There is no "latest" tag for the container.  The instructions you posted say to use a tag of 1.7.0-stretch  (ie: repository entry is bpatrik/pigallery2:1.7.0-stretch)

Share this post

Link to post

Unfortunately I couldn't get it running. The repository downloading is fine, but I had problems getting the container to start. I think part of the problem was needing to specify config.json as a file and not as a directory. So I'm giving up on this for now.

Share this post

Link to post
1 minute ago, sonofdbn said:

I think part of the problem was needing to specify config.json as a file and not as a directory

Then just specify the folder where config.json is stored in the template

Share this post

Link to post
Just now, Squid said:

Then just specify the folder where config.json is stored in the template

I did try that, but ran into this error:

npm ERR! enoent ENOENT: no such file or directory, open '/pigallery2-release/package.json'

But I'll give it another try... (Also thinking about just trying to run it in a VM, but as with most of my Linux efforts I ended up in a death spiral of problems....)

Share this post

Link to post

So... that was... interesting. The death spiral included setting up a Debian VM, upgrading the unRAID OS to 6.7.2, downgrading back to 6.5.3, trying to install xrdp... And pigallery2 is still not working, but at least it claims it's up and running.


I found great difficulty doing the container path mapping with the usual unRAID template. For example, I set the container's /demo/images path to /mnt/user/appdata/pigallery2-release/demo/images, but the log showed an error:

Images folder error Images folder not exists: 'demo/images'

As must be obvious, I'm no Linux/docker expert, but I tried checking by going into the container console and listing the directory at /. There is a demo/images folder at root level, but it seems that pigallery2 wants it in the pigallery2-release directory, which is also shown under /. So I used mkdir to create the required directories and the error message no longer came up in the log.


The next problem was the config.json file. It looked like pigallery2 needed this file, so I couldn't just map to an empty directory. In the end, I tried a manual install in a VM (hence death spiral above) and although I couldn't get the manual install to run, at least there was a config.json file, which I copied directly into the pigallery2-release directory. (And that involved having to install gvfs-backends....)


So now there are no error messages, which is progress of a sort, but the next step is to get it to do something 😉. Browsing to the location just gets me a "refused to connect" error.

Share this post

Link to post

Hmm, after looking around on the installation on the VM, where I can now get to the admin page, the container seems to be missing just about all the required files. I'm going to try reinstalling the container.

Share this post

Link to post

Amazingly I have the container running. Thanks to @Squid for responding, which encouraged me to continue. I managed to run pigallery2 in a Debian VM, which was good, but it also led to a lot of confusion for me about what I should expect to find in the container. I thought, incorrectly it seems, that the container would have a folder structure and files similar to the VM installation.


In the end it turns out I didn't need to specify any path for the config.json file. In case it's of use to anyone, here's my docker run command:

root@localhost:# /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker run -d --name='pigallery2a'
--net='bridge' -e TZ="Asia/Singapore" -e HOST_OS="unRAID" -e 'PUID'='99' -e 'PGID'='100' 
-e 'NODE_ENV'='production' -p '8099:80/tcp' -v '/mnt/user/appdata/pigallery2a/demo/images/':'/pigallery2-release/demo/images':'rw' 
-v '/mnt/user/appdata/pigallery2a/demo/TEMP/':'/pigallery2-release/demo/TEMP':'rw' 'bpatrik/pigallery2:1.7.0-stretch'

I made the mistake of thinking that the log should show the container listening on port 8099 when of course from the container side it's actually listening on port 80, and that's what the log should be showing. But now it's looking good.

Share this post

Link to post

So why PiGallery2? For me the most attractive feature was being able to create galleries using existing folder structures and media on my unRAID share; as a bonus it handles (my) videos as well and can be run without any database (but I'll look into that later). Although not shown in my docker run command above, I gave the container access to /mnt/user/Photos/ by mapping it to /media/photos.


Then all I had to do was go to the settings page and point the Images folder to /media/photos and it created one gallery per folder, complete with thumbnails for both photos and images. It seems quite fast, but I haven't tried it on a large number of files. Previously I tried using Plex for family photos, but Plex totally ignores folders when displaying photos, so it's pretty much impossible to organise photos coherently.


Still need to play around with it, but I'm very happy with the results so far.

Share this post

Link to post

So a brief update for all the avid followers of this thread:


(A disclaimer: I've tried reading through the PiGallery2 documentation, and some of the things I mention below might be covered, but I wasn't able to find them.)


I'd like to share some galleries with friends and family, but need to work out how to provide some security. Currently PiGallery2 password protects with admin/admin, which I should probably change. Then I'll need to set up some reverse proxy, which I've managed to do for some other dockers with a lot of online help and videos. I think this part is quite doable.


In terms of usability, unfortunately it seems that currently the galleries are based on all folders in the starting photos folder. I have folders that shouldn't be in a gallery (like 53 photos taken while trying to get that perfect family Christmas photo), but there's no direct way of excluding a particular folder. Again, I think I can sort this out with some workaround. (Have two photo folders - one for galleries, one for everything else. But a bit clunky and sometimes I might want to exclude particular photos in a folder.)


The database linking needs a bit of thought. I can run a MariaDB container, but I can't see how to "point" PiGallery2 at it. This will take some work.


In the meantime, I saw that Piwigo has been updated, so I took another run at that. This time I was much more successful. One of the problems I ran into previously was that by default Piwigo does not allow apostrophes (or spaces) in folder or file names. I managed to fix that previously, but then ran into an SQL problem. It seems that while Piwigo will then accept the apostrophes, the SQL query can't handle them. So I had to rename some folders, but OK, not too much of a problem. Piwigo then caught me with its case-specific filters, so .jpg was OK, but not .JPG. So that took another trip to the config file to fix.


I came unstuck with displaying videos and the posters/thumbnails. I used the piwigo-videojs plug-in, but there were a couple of unfortunate errors in the plug-in (at least according to some Googling), but I was able to fix that. What I couldn't fix was the poster overlay, which is meant to distinguish videos from photos in the gallery. It didn't appear in the gallery and only appeared when you clicked on the (non-distinguishable) poster. There as also some inconsistent setting of the aspect ratio in the posters.


So bottom line, I wish I could combine PiGallery2 with Piwigo, but I have to go with one, and for the moment I think I'll stick with PiGallery2 because I think I can make some progress there.

Share this post

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.