From 6fb0eb2abe0d933ba134f122e062c8bd0e8f5b00 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Wed, 2 Mar 2022 12:21:46 +0100 Subject: [PATCH] Docker: Auto-install "nvidia-opencl-icd" and update docs #1337 #2076 --- Dockerfile | 2 +- docker-compose.yml | 4 +- docker/examples/arm64/README | 116 +++++++++++-------- docker/examples/arm64/docker-compose.yml | 5 +- docker/examples/armv7/README | 81 +++++++------ docker/examples/armv7/docker-compose.yml | 2 +- docker/examples/docker-compose.yml | 4 +- docker/examples/macos/docker-compose.yml | 4 +- docker/examples/scheduler/docker-compose.yml | 4 +- docker/examples/sqlite/docker-compose.yml | 4 +- scripts/build.sh | 2 +- scripts/dist/Makefile | 8 +- scripts/dist/install-gpu.sh | 2 +- 13 files changed, 133 insertions(+), 105 deletions(-) diff --git a/Dockerfile b/Dockerfile index a81cb4709..930d18374 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM photoprism/develop:220301-bullseye +FROM photoprism/develop:220302-bullseye ## alternative base images # FROM photoprism/develop:buster # Debian 10, Codename "Buster" diff --git a/docker-compose.yml b/docker-compose.yml index 96d2cff22..3a46631bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -107,8 +107,8 @@ services: PHOTOPRISM_OIDC_ISSUER_URL: "https://keycloak.localssl.dev/auth/realms/master" PHOTOPRISM_OIDC_CLIENT_ID: "photoprism-develop" PHOTOPRISM_OIDC_CLIENT_SECRET: "9d8351a0-ca01-4556-9c37-85eb634869b9" - ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): - # PHOTOPRISM_INIT: "update gpu tensorflow clean" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, nano, clean): + # PHOTOPRISM_INIT: "gpu tensorflow" ## Hardware video transcoding config (optional): # PHOTOPRISM_FFMPEG_BUFFERS: "64" # FFmpeg capture buffers (default: 32) # PHOTOPRISM_FFMPEG_BITRATE: "32" # FFmpeg encoding bitrate limit in Mbit/s (default: 50) diff --git a/docker/examples/arm64/README b/docker/examples/arm64/README index 8270086e8..c29b7fdfa 100644 --- a/docker/examples/arm64/README +++ b/docker/examples/arm64/README @@ -1,33 +1,40 @@ -# Running PhotoPrism on ARM64-based devices (64-bit) +>> Running PhotoPrism on ARM64-based devices (64-bit) << -Our stable version and development preview have been built into a single multi-arch Docker image for 64-bit AMD, Intel, -and ARM processors: +Our stable version and development preview have been built into a single multi-arch Docker +image for 64-bit AMD, Intel, and ARM processors (Apple Silicon, Raspberry Pi 4): -Stable Release : photoprism/photoprism:latest -Development Preview: photoprism/photoprism:preview -MariaDB : arm64v8/mariadb:10.6 + Stable Release : photoprism/photoprism:latest + Development Preview: photoprism/photoprism:preview -If your device meets the system requirements, mostly the same installation instructions as for regular Linux -servers apply: +In case the default multi-arch images cause problems, you can also use the following +single-arch ARM64 images (updated and tested less frequently): + + Stable Release : photoprism/photoprism:arm64 + Development Preview: photoprism/photoprism:preview-arm64 + MariaDB : arm64v8/mariadb:10.6 + +If your device meets the system requirements, mostly the same installation instructions +as for regular Linux servers apply: https://docs.photoprism.app/getting-started/docker-compose/ -Existing users are advised to check their "docker-compose.yml" against our examples at dl.photoprism.app/docker from -time to time in case there are new configuration options or other improvements. Update instructions can be found at -the bottom of this README file. +Existing users are advised to check their "docker-compose.yml" against our examples at + from time to time in case there are new configuration options +or other improvements. Update instructions can be found at the bottom of this README file. -Note that Raspberry Pi OS (Raspbian) is a 32-bit user-space Linux with a 64-bit kernel to remain compatible with older -Raspberry software. This requires special configuration to run modern 64-bit applications and Docker images (see below). +Note that Raspberry Pi OS (Raspbian) is a 32-bit user-space Linux with a 64-bit kernel to +remain compatible with older Raspberry software. This requires special configuration to run +modern 64-bit applications and Docker images (see below). -If you do not have legacy software, we recommend choosing a standard 64-bit Linux distribution as it requires less -experience: +If you do not have legacy software, we recommend choosing a standard 64-bit Linux distribution +as it requires less experience: - Raspberry Pi Debian: https://raspi.debian.net/ - Ubuntu for Raspberry Pi: https://ubuntu.com/raspberry-pi -- UbuntuDockerPi: https://github.com/guysoft/UbuntuDockerPi (64-bit Ubuntu Server with Docker pre-configured) +- UbuntuDockerPi: https://github.com/guysoft/UbuntuDockerPi (Ubuntu incl. Docker pre-configured) -Other distributions that target the same use case as Raspbian, such as CoreELEC, may have the same problems and -should also not be used to run modern server applications. +Other distributions that target the same use case as Raspbian, such as CoreELEC, may have +the same problems and should also not be used to run modern server applications. ### Raspberry Pi OS ### @@ -48,68 +55,79 @@ It may also help to set the DOCKER_DEFAULT_PLATFORM environment variable to "lin ### System Requirements ### - Your device should have at least 3 GB of physical memory and a 64-bit operating system -- While PhotoPrism has been reported to work on devices with less memory, we take no responsibility for instability or - performance problems +- While PhotoPrism has been reported to work on devices with less memory, we take no + responsibility for instability or performance problems - RAW image conversion and TensorFlow are disabled on systems with 1 GB or less memory -- Indexing large photo and video collections significantly benefits from local SSD storage and plenty of memory for - caching, especially the conversion of RAW images and the transcoding of videos are very demanding -- If less than 4 GB of swap space is configured or a manual memory/swap limit is set, this can cause unexpected - restarts, for example, when the indexer temporarily needs more memory to process large files -- High-resolution panoramic images may require additional swap space and/or physical memory above the recommended - minimum -- We recommend disabling kernel security in your docker-compose.yml, especially if you do not have experience with the - configuration: +- Indexing large photo and video collections significantly benefits from local SSD storage + and plenty of memory for caching, especially the conversion of RAW images and the transcoding + of videos are very demanding +- If less than 4 GB of swap space is configured or a manual memory/swap limit is set, this can + cause unexpected restarts, for example, when the indexer temporarily needs more memory to + process large files +- High-resolution panoramic images may require additional swap space and/or physical memory + above the recommended minimum +- We recommend disabling kernel security in your docker-compose.yml, especially if you do not + have experience with the configuration: ``` photoprism: security_opt: - seccomp:unconfined - apparmor:unconfined ``` -- If you install PhotoPrism on a public server outside your home network, always run it behind a secure HTTPS reverse - proxy such as Traefik or Caddy https://docs.photoprism.app/getting-started/proxies/traefik/ +- If you install PhotoPrism on a public server outside your home network, + always run it behind a secure HTTPS reverse proxy such as Traefik or Caddy: + https://docs.photoprism.app/getting-started/proxies/traefik/ ### Troubleshooting ### -If your server runs out of memory, the index is frequently locked, or other system resources are running low: +If your server runs out of memory, the index is frequently locked, or other +system resources are running low: -- Try reducing the number of workers by setting PHOTOPRISM_WORKERS to a reasonably small value in docker-compose.yml, - depending on the performance of your device or cloud server: +- Try reducing the number of workers by setting PHOTOPRISM_WORKERS to a + reasonably small value in docker-compose.yml, depending on the performance + of your device or cloud server: https://docs.photoprism.app/getting-started/config-options/ -- If you are using SQLite, switch to MariaDB, which is better optimized for high concurrency +- If you are using SQLite, switch to MariaDB, which is better optimized + for high concurrency -- As a last measure, you can disable the use of TensorFlow for image classification and facial recognition +- As a last measure, you can disable the use of TensorFlow for image + classification and facial recognition -Other issues? Our troubleshooting checklists help you quickly diagnose and solve them: +Other issues? Our troubleshooting checklists help you quickly diagnose +and solve them: https://docs.photoprism.app/getting-started/troubleshooting/ ### Is a Raspberry Pi fast enough? ### -This largely depends on your expectations and the number of files you have. Most users report that -PhotoPrism runs smoothly on their Raspberry Pi 4. However, initial indexing typically takes much longer -than on standard desktop computers. +This largely depends on your expectations and the number of files you have. +Most users report that PhotoPrism runs smoothly on their Raspberry Pi 4. +However, initial indexing typically takes much longer than on standard +desktop computers. -Also keep in mind that the hardware has limited video transcoding capabilities, so the conversion of video -file formats is not well-supported and software transcoding is generally slow. +Also keep in mind that the hardware has limited video transcoding capabilities, +so the conversion of video file formats is not well-supported and software +transcoding is generally slow. ### Getting Updates ### -Open a terminal and change to the folder where the "docker-compose.yml" file was saved. Now run the -following commands to download the most recent image from Docker Hub and restart your instance -in the background: +Open a terminal and change to the folder where the "docker-compose.yml" file +was saved. Now run the following commands to download the most recent image +from Docker Hub and restart your instance in the background: docker-compose pull --platform=arm64 photoprism docker-compose stop photoprism docker-compose up -d photoprism -Pulling a new version can take several minutes, depending on your internet connection speed. +Pulling a new version can take several minutes, depending on your internet +connection speed. -Note that running an image with ":latest" tag does not cause Docker to automatically download -new images. +Note that running an image with ":latest" tag does not cause Docker to +automatically download new images. ### Credits ### -A big thank you to [Guy Sheffer](https://github.com/guysoft) for helping us [build](https://github.com/photoprism/photoprism/issues/109) -a Raspberry Pi version! +A big thank you to Guy Sheffer (https://github.com/guysoft) for helping us +build a Raspberry Pi version! diff --git a/docker/examples/arm64/docker-compose.yml b/docker/examples/arm64/docker-compose.yml index 35e9a5723..2395c1054 100644 --- a/docker/examples/arm64/docker-compose.yml +++ b/docker/examples/arm64/docker-compose.yml @@ -46,9 +46,8 @@ version: '3.5' services: photoprism: - ## photoprism/photoprism-arm64 has been replaced by a single multi-arch image for AMD64 and ARM64 (64-bit). - ## Use photoprism/photoprism:preview for testing preview builds or :latest for the stable release: - image: photoprism/photoprism:latest + ## Use photoprism/photoprism:preview-arm64 for testing preview builds: + image: photoprism/photoprism:arm64 depends_on: - mariadb ## Don't enable automatic restarts until PhotoPrism has been properly configured and tested! diff --git a/docker/examples/armv7/README b/docker/examples/armv7/README index 0ba33f7f1..5f471b827 100644 --- a/docker/examples/armv7/README +++ b/docker/examples/armv7/README @@ -1,6 +1,7 @@ -# Running PhotoPrism on ARMv7-based devices (32-bit) +>> Running PhotoPrism on ARMv7-based devices (32-bit) << -You may use the following 32-bit Docker images to run PhotoPrism and MariaDB on ARMv7-based devices: +You may use the following 32-bit Docker images to run PhotoPrism and MariaDB +on ARMv7-based devices: Stable Release : photoprism/photoprism:armv7 Development Preview: photoprism/photoprism:preview-armv7 @@ -10,56 +11,65 @@ Docker Hub URL: https://hub.docker.com/r/photoprism/photoprism/tags?page=1&name=armv7 -Note that Darktable is not included in the ARMv7 image because it is not 32-bit compatible. -Always choose the regular 64-bit version if your device supports it. +Note that Darktable is not included in the ARMv7 image because it is not +32-bit compatible. Always choose the regular 64-bit version if your device +supports it. -If your device meets the system requirements, mostly the same installation instructions as for regular Linux -servers apply: +If your device meets the system requirements, mostly the same installation +instructions as for regular Linux servers apply: https://docs.photoprism.app/getting-started/docker-compose/ Please pay close attention to changed directory and environment variable names! -Existing users are advised to check their "docker-compose.yml" against our examples at dl.photoprism.app/docker from -time to time in case there are new configuration options or other improvements. Update instructions can be found at +Existing users are advised to check their "docker-compose.yml" against our +examples at from time to time in case there are new +configuration options or other improvements. Update instructions can be found at the bottom of this README file. ### System Requirements ### -- Your device should have at least 3 GB of physical memory and a 64-bit operating system (always use our ARM64 image - if possible) -- While PhotoPrism has been reported to work on devices with less memory, we take no responsibility for instability or - performance problems +- Your device should have at least 3 GB of physical memory and a 64-bit operating + system (always use our ARM64 image if possible) +- While PhotoPrism has been reported to work on devices with less memory, we take + no responsibility for instability or performance problems - RAW image conversion and TensorFlow are disabled on systems with 1 GB or less memory -- Indexing large photo and video collections significantly benefits from local SSD storage and plenty of memory for - caching, especially the conversion of RAW images and the transcoding of videos are very demanding -- If less than 4 GB of swap space is configured or a manual memory/swap limit is set, this can cause unexpected - restarts, for example, when the indexer temporarily needs more memory to process large files -- High-resolution panoramic images may require additional swap space and/or physical memory above the recommended - minimum -- We recommend disabling kernel security in your docker-compose.yml, especially if you do not have experience with the - configuration: +- Indexing large photo and video collections significantly benefits from local SSD + storage and plenty of memory for caching, especially the conversion of RAW images + and the transcoding of videos are very demanding +- If less than 4 GB of swap space is configured or a manual memory/swap limit is set, + this can cause unexpected restarts, for example, when the indexer temporarily needs + more memory to process large files +- High-resolution panoramic images may require additional swap space and/or physical + memory above the recommended minimum +- We recommend disabling kernel security in your docker-compose.yml, especially if you + do not have experience with the configuration: ``` photoprism: security_opt: - seccomp:unconfined - apparmor:unconfined ``` -- If you install PhotoPrism on a public server outside your home network, always run it behind a secure HTTPS reverse - proxy such as Traefik or Caddy https://docs.photoprism.app/getting-started/proxies/traefik/ +- If you install PhotoPrism on a public server outside your home network, always run + it behind a secure HTTPS reverse proxy such as Traefik or Caddy: + https://docs.photoprism.app/getting-started/proxies/traefik/ ### Troubleshooting ### -If your server runs out of memory, the index is frequently locked, or other system resources are running low: +If your server runs out of memory, the index is frequently locked, or other +system resources are running low: -- Try reducing the number of workers by setting PHOTOPRISM_WORKERS to a reasonably small value in docker-compose.yml, - depending on the performance of your device or cloud server: +- Try reducing the number of workers by setting PHOTOPRISM_WORKERS to a reasonably + small value in docker-compose.yml, depending on the performance of your device + or cloud server: https://docs.photoprism.app/getting-started/config-options/ -- If you are using SQLite, switch to MariaDB, which is better optimized for high concurrency +- If you are using SQLite, switch to MariaDB, which is better optimized for + high concurrency -- As a last measure, you can disable the use of TensorFlow for image classification and facial recognition +- As a last measure, you can disable the use of TensorFlow for image classification + and facial recognition Other issues? Our troubleshooting checklists help you quickly diagnose and solve them: @@ -67,20 +77,21 @@ Other issues? Our troubleshooting checklists help you quickly diagnose and solve ### Getting Updates ### -Open a terminal and change to the folder where the "docker-compose.yml" file was saved. Now run the -following commands to download the most recent image from Docker Hub and restart your instance -in the background: +Open a terminal and change to the folder where the "docker-compose.yml" file +was saved. Now run the following commands to download the most recent image +from Docker Hub and restart your instance in the background: docker-compose pull --platform=arm photoprism docker-compose stop photoprism docker-compose up -d photoprism -Pulling a new version can take several minutes, depending on your internet connection speed. +Pulling a new version can take several minutes, depending on your internet +connection speed. -Note that running an image with ":latest" tag does not cause Docker to automatically download -new images. +Note that running an image with ":latest" tag does not cause Docker to automatically +download new images. ### Credits ### -A big thank you to [Guy Sheffer](https://github.com/guysoft) for helping us [build](https://github.com/photoprism/photoprism/issues/109) -a Raspberry Pi version! +A big thank you to Guy Sheffer (https://github.com/guysoft) for helping us +build a Raspberry Pi version! \ No newline at end of file diff --git a/docker/examples/armv7/docker-compose.yml b/docker/examples/armv7/docker-compose.yml index 44835696a..72122a95d 100644 --- a/docker/examples/armv7/docker-compose.yml +++ b/docker/examples/armv7/docker-compose.yml @@ -41,7 +41,7 @@ version: '3.5' services: photoprism: - ## Special Docker image for running PhotoPrism on ARMv7-based devices and those with a 32-bit operating system: + ## Use photoprism/photoprism:preview-armv7 for testing preview builds: image: photoprism/photoprism:armv7 depends_on: - mariadb diff --git a/docker/examples/docker-compose.yml b/docker/examples/docker-compose.yml index 1d230dc88..3aaa9dedc 100644 --- a/docker/examples/docker-compose.yml +++ b/docker/examples/docker-compose.yml @@ -79,8 +79,8 @@ services: PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_DESCRIPTION: "" PHOTOPRISM_SITE_AUTHOR: "" - ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): - # PHOTOPRISM_INIT: "update gpu tensorflow clean" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, nano, clean): + # PHOTOPRISM_INIT: "gpu tensorflow" ## Hardware video transcoding config (optional) # PHOTOPRISM_FFMPEG_BUFFERS: "64" # FFmpeg capture buffers (default: 32) # PHOTOPRISM_FFMPEG_BITRATE: "32" # FFmpeg encoding bitrate limit in Mbit/s (default: 50) diff --git a/docker/examples/macos/docker-compose.yml b/docker/examples/macos/docker-compose.yml index 7c77a7769..b3970da0d 100644 --- a/docker/examples/macos/docker-compose.yml +++ b/docker/examples/macos/docker-compose.yml @@ -75,8 +75,8 @@ services: PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_DESCRIPTION: "" PHOTOPRISM_SITE_AUTHOR: "" - ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): - # PHOTOPRISM_INIT: "update gpu tensorflow clean" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, nano, clean): + # PHOTOPRISM_INIT: "gpu tensorflow" ## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory volumes: # "/host/folder:/photoprism/folder" # example diff --git a/docker/examples/scheduler/docker-compose.yml b/docker/examples/scheduler/docker-compose.yml index a9e83b190..27f28013c 100644 --- a/docker/examples/scheduler/docker-compose.yml +++ b/docker/examples/scheduler/docker-compose.yml @@ -81,8 +81,8 @@ services: PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_DESCRIPTION: "" PHOTOPRISM_SITE_AUTHOR: "" - ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): - # PHOTOPRISM_INIT: "update gpu tensorflow clean" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, nano, clean): + # PHOTOPRISM_INIT: "gpu tensorflow" ## Run as a specific user, group, or with a custom umask (does not work together with "user:") # PHOTOPRISM_UID: 1000 # PHOTOPRISM_GID: 1000 diff --git a/docker/examples/sqlite/docker-compose.yml b/docker/examples/sqlite/docker-compose.yml index 1c1f9bf18..73b2c80ba 100644 --- a/docker/examples/sqlite/docker-compose.yml +++ b/docker/examples/sqlite/docker-compose.yml @@ -74,8 +74,8 @@ services: PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_DESCRIPTION: "" PHOTOPRISM_SITE_AUTHOR: "" - ## Run/install on first startup (options: update, gpu, tensorflow, davfs, clean): - # PHOTOPRISM_INIT: "update gpu tensorflow clean" + ## Run/install on first startup (options: update, gpu, tensorflow, davfs, nano, clean): + # PHOTOPRISM_INIT: "gpu tensorflow" ## Run as a specific user, group, or with a custom umask (does not work together with "user:") # PHOTOPRISM_UID: 1000 # PHOTOPRISM_GID: 1000 diff --git a/scripts/build.sh b/scripts/build.sh index 9e89a16b8..be3fa052e 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -31,7 +31,7 @@ fi # build binary echo "=> compiling \"$BUILD_NAME\" with \"${GO_VER^}\"" -echo "=> command: ${BUILD_CMD[*]}" +echo "=> ${BUILD_CMD[*]}" "${BUILD_CMD[@]}" # show size diff --git a/scripts/dist/Makefile b/scripts/dist/Makefile index 9c4161e64..38561b71c 100644 --- a/scripts/dist/Makefile +++ b/scripts/dist/Makefile @@ -16,16 +16,16 @@ clean: apt-get -y autoremove apt-get -y autoclean rm -rf /var/lib/apt/lists/* -nano: - apt-get update - apt-get -qq install nano gpu: ./install-gpu.sh tensorflow: ./install-tensorflow.sh auto davfs: ./install-davfs.sh +nano: + apt-get update + apt-get -qq install nano -.PHONY: update apt-upgrade clean apt-cleanup nano gpu tensorflow davfs \ +.PHONY: update apt-upgrade clean apt-cleanup gpu tensorflow davfs nano \ tensorflow-amd64-cpu tensorflow-amd64-avx tensorflow-amd64-avx2 \ intel-graphics install-intel-graphics install-davfs; diff --git a/scripts/dist/install-gpu.sh b/scripts/dist/install-gpu.sh index 1f8d2a44c..e37a99f11 100755 --- a/scripts/dist/install-gpu.sh +++ b/scripts/dist/install-gpu.sh @@ -33,7 +33,7 @@ for t in ${GPU_DETECTED[@]}; do ;; nvidia) - apt-get -qq install nvidia-vdpau-driver nvidia-driver-libs nvidia-kernel-dkms libva2 vainfo libva-wayland2 + apt-get -qq install nvidia-opencl-icd nvidia-vdpau-driver nvidia-driver-libs nvidia-kernel-dkms libva2 vainfo libva-wayland2 ;; *)