Last active
September 21, 2024 13:18
-
-
Save dinukasal/6a8612b56693494d2e2d2d4a0454b789 to your computer and use it in GitHub Desktop.
Photoprism with GPU support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example Docker Compose config file for PhotoPrism (Linux / AMD64) | |
# | |
# Note: | |
# - Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected | |
# restarts ("crashes"), for example, when the indexer temporarily needs more memory to process large files. | |
# - If you install PhotoPrism on a public server outside your home network, please always run it behind a secure | |
# HTTPS reverse proxy such as Traefik or Caddy. Your files and passwords will otherwise be transmitted | |
# in clear text and can be intercepted by anyone, including your provider, hackers, and governments: | |
# https://docs.photoprism.app/getting-started/proxies/traefik/ | |
# | |
# Setup Guides: | |
# - https://docs.photoprism.app/getting-started/docker-compose/ | |
# - https://docs.photoprism.app/getting-started/raspberry-pi/ | |
# - https://www.photoprism.app/kb/activation | |
# | |
# Troubleshooting Checklists: | |
# - https://docs.photoprism.app/getting-started/troubleshooting/ | |
# - https://docs.photoprism.app/getting-started/troubleshooting/docker/ | |
# - https://docs.photoprism.app/getting-started/troubleshooting/mariadb/ | |
# | |
# CLI Commands: | |
# - https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface | |
# | |
# All commands may have to be prefixed with "sudo" when not running as root. | |
# This will point the home directory shortcut ~ to /root in volume mounts. | |
services: | |
photoprism: | |
## Use photoprism/photoprism:preview for testing preview builds: | |
image: photoprism/photoprism:latest | |
## Don't enable automatic restarts until PhotoPrism has been properly configured and tested! | |
## If the service gets stuck in a restart loop, this points to a memory, filesystem, network, or database issue: | |
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors | |
restart: unless-stopped | |
stop_grace_period: 10s | |
depends_on: | |
- mariadb | |
security_opt: | |
- seccomp:unconfined | |
- apparmor:unconfined | |
## Server port mapping in the format "Host:Container". To use a different port, change the host port on | |
## the left-hand side and keep the container port, e.g. "80:2342" (for HTTP) or "443:2342 (for HTTPS): | |
ports: | |
- "2342:2342" | |
## Before you start the service, please check the following config options (and change them as needed): | |
## https://docs.photoprism.app/getting-started/config-options/ | |
environment: | |
PHOTOPRISM_ADMIN_USER: "admin" # admin login username | |
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # initial admin password (8-72 characters) | |
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password) | |
PHOTOPRISM_SITE_URL: "http://192.168.1.27:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)" | |
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available | |
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available | |
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video) | |
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip) | |
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic | |
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality) | |
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features | |
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup | |
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server | |
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API | |
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow | |
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow) | |
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow) | |
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support | |
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images | |
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance) | |
PHOTOPRISM_SIDECAR_YAML: "true" # creates YAML sidecar files to back up picture metadata | |
PHOTOPRISM_BACKUP_ALBUMS: "true" # creates YAML files to back up album metadata | |
PHOTOPRISM_BACKUP_DATABASE: "true" # creates regular backups based on the configured schedule | |
PHOTOPRISM_BACKUP_SCHEDULE: "daily" # backup SCHEDULE in cron format (e.g. "0 12 * * *" for daily at noon) or at a random time (daily, weekly) | |
PHOTOPRISM_INDEX_SCHEDULE: "" # indexing SCHEDULE in cron format (e.g. "@every 3h" for every 3 hours; "" to disable) | |
PHOTOPRISM_AUTO_INDEX: 300 # delay before automatically indexing files in SECONDS when uploading via WebDAV (-1 to disable) | |
PHOTOPRISM_AUTO_IMPORT: -1 # delay before automatically importing files in SECONDS when uploading via WebDAV (-1 to disable) | |
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow) | |
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow) | |
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that does not require a separate database server | |
PHOTOPRISM_DATABASE_DRIVER: "mysql" # MariaDB 10.5.12+ (MySQL successor) offers significantly better performance compared to SQLite | |
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB database server (hostname:port) | |
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB database schema name | |
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB database user name | |
PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB database user password | |
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" | |
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description | |
PHOTOPRISM_SITE_AUTHOR: "" # meta site author | |
## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/): | |
PHOTOPRISM_FFMPEG_ENCODER: "nvidia" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi) | |
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840) | |
# PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50) | |
## Run/install on first startup (options: update https gpu ffmpeg tensorflow davfs clitools clean): | |
PHOTOPRISM_INIT: "gpu tensorflow" | |
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200): | |
# PHOTOPRISM_UID: 1000 | |
# PHOTOPRISM_GID: 1000 | |
# PHOTOPRISM_UMASK: 0000 | |
NVIDIA_DRIVER_CAPABILITIES: "all" | |
NVIDIA_VISIBLE_DEVICES: "all" | |
## Start as non-root user before initialization (supported: 0, 33, 50-99, 500-600, and 900-1200): | |
# user: "1000:1000" | |
## Share hardware devices with FFmpeg and TensorFlow (optional): | |
# devices: | |
# - "/dev/dri:/dev/dri" # Intel QSV | |
# - "/dev/nvidia0:/dev/nvidia0" # Nvidia CUDA | |
# - "/dev/nvidiactl:/dev/nvidiactl" | |
# - "/dev/nvidia-modeset:/dev/nvidia-modeset" | |
# - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl" | |
# - "/dev/nvidia-uvm:/dev/nvidia-uvm" | |
# - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools" | |
# - "/dev/video11:/dev/video11" # Video4Linux Video Encode Device (h264_v4l2m2m) | |
working_dir: "/photoprism" # do not change or remove | |
## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory | |
volumes: | |
# "/host/folder:/photoprism/folder" # Example | |
- "D:/Photos:/photoprism/originals" # Original media files (DO NOT REMOVE) | |
# - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this | |
# - "~/Import:/photoprism/import" # *Optional* base folder from which files can be imported to originals | |
- "./storage:/photoprism/storage" # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE) | |
deploy: | |
resources: | |
reservations: | |
devices: | |
- driver: nvidia | |
count: 1 | |
capabilities: [gpu] | |
## MariaDB Database Server (recommended) | |
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql | |
mariadb: | |
image: mariadb:11 | |
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue: | |
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors | |
restart: unless-stopped | |
stop_grace_period: 5s | |
security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 | |
- seccomp:unconfined | |
- apparmor:unconfined | |
command: --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 | |
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder: | |
volumes: | |
- "./database:/var/lib/mysql" # DO NOT REMOVE | |
environment: | |
MARIADB_AUTO_UPGRADE: "1" | |
MARIADB_INITDB_SKIP_TZINFO: "1" | |
MARIADB_DATABASE: "photoprism" | |
MARIADB_USER: "photoprism" | |
MARIADB_PASSWORD: "insecure" | |
MARIADB_ROOT_PASSWORD: "insecure" | |
## Watchtower upgrades services automatically (optional) | |
## see https://docs.photoprism.app/getting-started/updates/#watchtower | |
## activate via "COMPOSE_PROFILES=update docker compose up -d" | |
watchtower: | |
restart: unless-stopped | |
image: containrrr/watchtower | |
profiles: ["update"] | |
environment: | |
WATCHTOWER_CLEANUP: "true" | |
WATCHTOWER_POLL_INTERVAL: 7200 # checks for updates every two hours | |
volumes: | |
- "/var/run/docker.sock:/var/run/docker.sock" | |
- "~/.docker/config.json:/config.json" # optional, for authentication if you have a Docker Hub account |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment