Portainer Stack:
```yaml
---
version: "3.9"
services:

  photoview:
    image: viktorstrate/photoview:2
    restart: ${RST-unless-stopped}
    ports:
      - "8000:80"
    depends_on:
      - photoview_db
    environment:
      - PHOTOVIEW_DATABASE_DRIVER=mysql
      - PHOTOVIEW_MYSQL_URL=photoview:photosecret@tcp(db)/photoview
      - PHOTOVIEW_LISTEN_IP=photoview
      - PHOTOVIEW_LISTEN_PORT=80
      - PHOTOVIEW_MEDIA_CACHE=/app/cache

      # 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=<YOUR TOKEN HERE>

    volumes:
      - photoview_cache:/app/cache

      # Change This: to the directory where your photos are located on your server.
      # If the photos are located at `/home/user/photos`, then change this value
      # to the following: `/home/user/photos:/photos:ro`.
      # You can mount multiple paths, if your photos are spread across multiple directories.
      - ./photos_path:/photos:ro
    labels:
      - com.centurylinklabs.watchtower.enable=${AutoUpdate-true}

  photoview_db:
    image: lscr.io/linuxserver/mariadb:${TAG-latest}
    restart: ${RST-unless-stopped}
    environment:
      - TZ=${TZ-Europe/Amsterdam}
      - PGID=${PGID-1000}
      - PUID=${PUID-1000}
      - MYSQL_DATABASE=photoview
      - MYSQL_USER=photoview
      - MYSQL_PASSWORD=photosecret
      - MYSQL_ROOT_PASSWORD=photoviewadmin
    volumes:
      - photoview_db_data:/config
    labels:
      - com.centurylinklabs.watchtower.enable=${AutoUpdate-true}

volumes:
  photoview_db_data:
  photoview_cache:
```

Environments:
```
TAG=latest
RST=unless-stopped
NET=bridge
PUID=${PUID-1000}
PGID=${PGID-1000}
TZ=${TZ-Europe/Amsterdam}
AutoUpdate=true
```