Photoview
A simple and user-friendly Photo Gallery for personal servers. It is made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high resolution photos.
Directory Structure
- .env
- docker-compose.yml
docker-compose.yml
version: '3.9'
services:
photoview:
image: viktorstrate/photoview:2
hostname: photoview
container_name: photoview
restart: unless-stopped
stop_grace_period: 10s
ports:
- "8000:80" ## HTTP port (host:container)
## This ensures that DB is initialized and ready for connections.
## Comment out the entire `depends_on` section if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
depends_on:
mariadb:
condition: service_healthy
## Security options for some restricted systems
security_opt:
- seccomp:unconfined
- apparmor:unconfined
environment:
PHOTOVIEW_DATABASE_DRIVER: ${PHOTOVIEW_DATABASE_DRIVER}
## Comment out the next variable in the case PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` or `postgres` in the .env
PHOTOVIEW_MYSQL_URL: "${MARIADB_USER}:${MARIADB_PASSWORD}@tcp(photoview-mariadb)/${MARIADB_DATABASE}"
## Uncomment the next line if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
# PHOTOVIEW_SQLITE_PATH: ${PHOTOVIEW_SQLITE_PATH}
PHOTOVIEW_LISTEN_IP: "photoview"
## Optional: If you are using Samba/CIFS-Share and experience problems with "directory not found"
## Enable the following Godebug
# - GODEBUG=asyncpreemptoff=1
## Optional: To enable map related features, you need to create a mapbox token.
## A token can be generated for free here https://account.mapbox.com/access-tokens/
## It's a good idea to limit the scope of the token to your own domain, to prevent others from using it.
MAPBOX_TOKEN: ${MAPBOX_TOKEN}
volumes:
## Example:
## - "/host/folder:/container/folder"
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
## Uncomment the next line if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
# - "${HOST_PHOTOVIEW_LOCATION}/database:/home/photoview/database"
- "${HOST_PHOTOVIEW_LOCATION}/storage:/home/photoview/media-cache"
## Change This in the .env file: to the directory where your photos are located on your server.
## You can mount multiple paths if your photos are spread across multiple directories.
## The same path as the container path set here, you'll need to provide on the Photoview's init page (the one between the ':' chars).
## If you mount several folders, provide the path to the parent one on the init page.
## If you mount several folders, make sure that there are no direct mappings to the media root folder.
## This means that you need to also modify the container path of the HOST_PHOTOVIEW_MEDIA_ROOT
## to something like '/photos/main'. Note that this new name ('main' in this example) will become an album in Photoview.
- "${HOST_PHOTOVIEW_MEDIA_ROOT}:/photos:ro"
## *Additional* media folders can be mounted like this (set the variable in .env file)
## Note that a mount cannot be located in a subfolder of another mount.
# - "${HOST_PHOTOVIEW_MEDIA_FAMILY}:/photos/Family:ro"
## Comment out the `mariadb` service if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` or `postgres` in the .env
mariadb:
image: mariadb:lts
hostname: photoview-mariadb
container_name: photoview-mariadb
restart: unless-stopped
stop_grace_period: 5s
## Optimized MariaDB startup command for better performance and compatibility
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: ${MARIADB_DATABASE}
MARIADB_USER: ${MARIADB_USER}
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
volumes:
## Example:
## - "/host/folder:/container/folder"
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
- "${HOST_PHOTOVIEW_LOCATION}/database/mariadb:/var/lib/mysql" ## DO NOT REMOVE
healthcheck:
test: healthcheck.sh --connect --innodb_initialized
interval: 1m
timeout: 5s
retries: 5
start_period: 3mResources
Website: https://photoview.github.io/
GitHub: https://github.com/photoview/photoview
Docker Hub: https://hub.docker.com/r/viktorstrate/photoview
Configuration: https://photoview.github.io/en/docs/getting-started/