====== PhotoView ======
[[https://photoview.github.io|PhotoView]] is a photos gallery written by a photographer for photographers.
===== Installation =====
Create user:
useradd -d /data/daemons/photoview -m -g photos photoview
Create the **docker-compose.yml**:
version: "3.7"
services:
photoview:
image: photoview/photoview:2
hostname: photoview
container_name: photoview
ports:
- "8009:1808"
depends_on:
mariadb:
environment:
PUID: 0
PGID: 0
PHOTOVIEW_DATABASE_DRIVER: mysql
## Comment out the next variable in the case PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` or `postgres` in the .env
PHOTOVIEW_MYSQL_URL: "photoview:<< your random db password here >>@tcp(photoview-mariadb)/photoview"
PHOTOVIEW_LISTEN_IP: "photoview"
MAPBOX_TOKEN: "<< generate MapBox Token and put it here >>"
PHOTOVIEW_LISTEN_PORT: 1808
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "/data/daemons/photoview/storage:/home/photoview/media-cache"
- "/data/Photos:/photos:ro" # here put your photos path!
networks:
- photoview-net
mariadb:
networks:
- photoview-net
image: mariadb:lts
hostname: photoview-mariadb
container_name: photoview-mariadb
restart: unless-stopped
stop_grace_period: 5s
command: mariadbd --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
security_opt: ## see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
- seccomp:unconfined
- apparmor:unconfined
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_DATABASE: photoview
MARIADB_USER: photoview
MARIADB_PASSWORD: << your random db password here >>
MARIADB_ROOT_PASSWORD: << another random password here >>
volumes:
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
- "/data/daemons/photoview/database/mariadb:/var/lib/mysql" ## DO NOT REMOVE
networks:
photoview-net: {}
You will need to setup some meaningful passwords for the database, and provide the proper paths.
Also generate your MapBox token ([[https://account.mapbox.com/access-tokens/|here]]).
I suggest as well that you move your **database** path to somewhere you backup.
Now pull the images:
su - photoview
podman compose pull
===== Reverse Proxy =====
I placed PhotoView on a subdomain, and here is the relevant NGINX config:
server {
server_name photos.mydomain.com;
listen 443 ssl;
listen 8443 ssl;
access_log /var/log/nginx/photos.mydomain.com_access_log main;
error_log /var/log/nginx/photos.mydomain.com_error_log info;
location / {
proxy_pass http://127.0.0.1:8009;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
client_max_body_size 100M;
}
See [[selfhost:nginx|The Reverse Proxy concept]] for more details
===== Autostart =====
To start it, and set it up on boot, as usual follow my indications [[gentoo:containers|Using Containers on Gentoo]], so link the **user-containers** init script:
ln -s /etc/init.d/user-containers /etc/init.d/user-containers.photoview
and create the following config file:
USER=photoview
DESCRIPTION="The web gallery"
Add the service to the default runlevel and start it now:
rc-update add user-containers.photoview default
rc-service user-containers.photoview start