From 60975f8f470a7325e4711c100cc3fac95f6d8001 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Tue, 19 Oct 2021 20:45:21 +0200 Subject: [PATCH] Docker: Add docker-compose.yml example for ARMv7 and improve inline docs --- docker/examples/arm64/docker-compose.yml | 18 +-- docker/examples/armv7/docker-compose.yml | 128 +++++++++++++++++++ docker/examples/cloud/docker-compose.yml | 8 +- docker/examples/docker-compose.yml | 18 +-- docker/examples/macos/docker-compose.yml | 18 +-- docker/examples/scheduler/docker-compose.yml | 18 +-- docker/examples/sqlite/docker-compose.yml | 10 +- docker/examples/windows/docker-compose.yml | 13 +- 8 files changed, 181 insertions(+), 50 deletions(-) create mode 100644 docker/examples/armv7/docker-compose.yml diff --git a/docker/examples/arm64/docker-compose.yml b/docker/examples/arm64/docker-compose.yml index 3ba3d02ce..3a156cecf 100644 --- a/docker/examples/arm64/docker-compose.yml +++ b/docker/examples/arm64/docker-compose.yml @@ -95,14 +95,14 @@ services: # - "/dev/video11:/dev/video11" # Video4Linux (h264_v4l2m2m) working_dir: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "~/Pictures:/photoprism/originals" - # Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals: - # - "/mnt/Family:/photoprism/originals/Family" # [folder_1]:/photoprism/originals/[folder_1] - # - "/mnt/Friends:/photoprism/originals/Friends" # [folder_2]:/photoprism/originals/[folder_2] - # Mounting an import folder is optional (see docs): + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] + # You may mount an *import* folder from which files can be transferred to *originals* (optional): # - "~/Import:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" # ATTENTION: Owners of ARMv7-based devices have to revert to an alternative image if they want to use MariaDB. @@ -115,10 +115,10 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "./database:/var/lib/mysql" + volumes: + - "./database:/var/lib/mysql" # Never remove environment: - MYSQL_ROOT_PASSWORD: please_change + MYSQL_ROOT_PASSWORD: insecure MYSQL_DATABASE: photoprism MYSQL_USER: photoprism MYSQL_PASSWORD: insecure diff --git a/docker/examples/armv7/docker-compose.yml b/docker/examples/armv7/docker-compose.yml new file mode 100644 index 000000000..d1efa1578 --- /dev/null +++ b/docker/examples/armv7/docker-compose.yml @@ -0,0 +1,128 @@ +version: '3.5' + +# Example Docker Compose config file for PhotoPrism (ARMv7-based devices) +# +# Documentation : https://docs.photoprism.org/getting-started/raspberry-pi/ +# Docker Hub URL: https://hub.docker.com/r/photoprism/photoprism/ +# +# Please run behind a reverse proxy like Caddy, Traefik or Nginx if you need HTTPS / SSL support +# e.g. when running PhotoPrism on a public server outside your home network. +# +# ------------------------------------------------------------------- +# DOCKER COMPOSE COMMAND REFERENCE +# ------------------------------------------------------------------- +# Start | docker-compose up -d +# Stop | docker-compose stop +# Update | docker-compose pull +# Logs | docker-compose logs --tail=25 -f +# Terminal | docker-compose exec photoprism bash +# Help | docker-compose exec photoprism photoprism help +# Config | docker-compose exec photoprism photoprism config +# Reset | docker-compose exec photoprism photoprism reset +# Backup | docker-compose exec photoprism photoprism backup -a -i +# Restore | docker-compose exec photoprism photoprism restore -a -i +# Index | docker-compose exec photoprism photoprism index +# Reindex | docker-compose exec photoprism photoprism index -f +# Import | docker-compose exec photoprism photoprism import +# +# To search originals for faces without a complete rescan: +# docker-compose exec photoprism photoprism faces index +# ------------------------------------------------------------------- +# Note: All commands may have to be prefixed with "sudo" when not running as root. +# This will change the home directory "~" to "/root" in your configuration. + +services: + photoprism: + # Our stable version and development preview now come as a single multi-arch image for AMD64, ARM64, and ARMv7. + # Use photoprism/photoprism:preview instead for testing preview builds: + image: photoprism/photoprism:latest + platform: "linux/arm" + depends_on: + - mariadb + # Only enable automatic restarts once your installation is properly + # configured as it otherwise may get stuck in a restart loop: + # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop + # restart: unless-stopped + security_opt: + - seccomp:unconfined + - apparmor:unconfined + # Run as a specific, non-root user (see https://docs.docker.com/engine/reference/run/#user): + # user: "1000:1000" + ports: + - "2342:2342" # [server]:[container] + environment: + PHOTOPRISM_ADMIN_PASSWORD: "insecure" # PLEASE CHANGE: Your initial admin password (min 4 characters) + PHOTOPRISM_ORIGINALS_LIMIT: 5000 # File size limit for originals in MB (increase for high-res video) + PHOTOPRISM_HTTP_COMPRESSION: "none" # Improves transfer speed and bandwidth utilization (none or gzip) + PHOTOPRISM_WORKERS: 1 # Limits the number of indexing workers to reduce system load + PHOTOPRISM_DEBUG: "false" # Run in debug mode (shows additional log messages) + PHOTOPRISM_PUBLIC: "false" # No authentication required (disables password protection) + PHOTOPRISM_READONLY: "false" # Don't modify originals directory (reduced functionality) + PHOTOPRISM_EXPERIMENTAL: "false" # Enables experimental features + PHOTOPRISM_DISABLE_CHOWN: "false" # Disables storage permission updates on startup + PHOTOPRISM_DISABLE_WEBDAV: "false" # Disables built-in WebDAV server + PHOTOPRISM_DISABLE_SETTINGS: "false" # Disables Settings in Web UI + PHOTOPRISM_DISABLE_TENSORFLOW: "false" # Disables all features depending on TensorFlow + PHOTOPRISM_DISABLE_FACES: "false" # Disables facial recognition + PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # Disables image classification + # PHOTOPRISM_FFMPEG_ENCODER: "h264_v4l2m2m" # FFmpeg AVC encoder for video transcoding (default: libx264) + # PHOTOPRISM_FFMPEG_BUFFERS: "64" # FFmpeg capture buffers (default: 32) + PHOTOPRISM_DETECT_NSFW: "false" # Flag photos as private that MAY be offensive + PHOTOPRISM_UPLOAD_NSFW: "true" # Allow uploads that MAY be offensive + # PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server + PHOTOPRISM_DATABASE_DRIVER: "mysql" # Use MariaDB (or MySQL) instead of SQLite for improved performance + 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_URL: "http://localhost:2342/" # Public PhotoPrism URL + PHOTOPRISM_SITE_TITLE: "PhotoPrism" + PHOTOPRISM_SITE_CAPTION: "Browse Your Life" + PHOTOPRISM_SITE_DESCRIPTION: "" + PHOTOPRISM_SITE_AUTHOR: "" + # Set a non-root user, group, or custom umask if your Docker environment doesn't support this natively: + # PHOTOPRISM_UID: 1000 + # PHOTOPRISM_GID: 1000 + # PHOTOPRISM_UMASK: 0000 + HOME: "/photoprism" + # Optional hardware devices for video transcoding and machine learning: + # devices: + # - "/dev/video11:/dev/video11" # Video4Linux (h264_v4l2m2m) + working_dir: "/photoprism" + volumes: + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): + - "~/Pictures:/photoprism/originals" + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] + # You may mount an *import* folder from which files can be transferred to *originals* (optional): + # - "~/Import:/photoprism/import" + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): + - "./storage:/photoprism/storage" + + mariadb: + restart: unless-stopped + image: lscr.io/linuxserver/mariadb + security_opt: + - seccomp:unconfined + - apparmor:unconfined + command: mysqld --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 + volumes: + - "./mariadb:/config" # Never remove + environment: + MYSQL_ROOT_PASSWORD: insecure + MYSQL_DATABASE: photoprism + MYSQL_USER: photoprism + MYSQL_PASSWORD: insecure + +# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: +# +# watchtower: +# restart: unless-stopped +# image: containrrr/watchtower +# 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 diff --git a/docker/examples/cloud/docker-compose.yml b/docker/examples/cloud/docker-compose.yml index cdf1ce356..d6c58e149 100644 --- a/docker/examples/cloud/docker-compose.yml +++ b/docker/examples/cloud/docker-compose.yml @@ -154,9 +154,11 @@ services: HOME: "/photoprism" working_dir: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "./originals:/photoprism/originals" + # You may mount an *import* folder from which files can be transferred to *originals* (optional): - "./import:/photoprism/import" + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" - "./backup:/var/lib/photoprism" @@ -184,8 +186,8 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "./database:/var/lib/mysql" + volumes: + - "./database:/var/lib/mysql" # Never remove environment: MYSQL_ROOT_PASSWORD: "_admin_password_" MYSQL_DATABASE: "photoprism" diff --git a/docker/examples/docker-compose.yml b/docker/examples/docker-compose.yml index f2a5e110e..f6d0c21c2 100644 --- a/docker/examples/docker-compose.yml +++ b/docker/examples/docker-compose.yml @@ -96,14 +96,14 @@ services: # - "/dev/dri/card0:/dev/dri/card0" working_dir: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "~/Pictures:/photoprism/originals" - # Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals: - # - "/mnt/Family:/photoprism/originals/Family" # [folder_1]:/photoprism/originals/[folder_1] - # - "/mnt/Friends:/photoprism/originals/Friends" # [folder_2]:/photoprism/originals/[folder_2] - # Mounting an import folder is optional (see docs): + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] + # You may mount an *import* folder from which files can be transferred to *originals* (optional): # - "~/Import:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" mariadb: @@ -113,10 +113,10 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "./database:/var/lib/mysql" + volumes: + - "./database:/var/lib/mysql" # Never remove environment: - MYSQL_ROOT_PASSWORD: please_change + MYSQL_ROOT_PASSWORD: insecure MYSQL_DATABASE: photoprism MYSQL_USER: photoprism MYSQL_PASSWORD: insecure diff --git a/docker/examples/macos/docker-compose.yml b/docker/examples/macos/docker-compose.yml index b4dccda53..4f3ed8881 100644 --- a/docker/examples/macos/docker-compose.yml +++ b/docker/examples/macos/docker-compose.yml @@ -75,14 +75,14 @@ services: # PHOTOPRISM_INIT: "tensorflow-amd64-avx2" HOME: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "~/Pictures:/photoprism/originals" - # Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals: - # - "/mnt/Family:/photoprism/originals/Family" # [folder_1]:/photoprism/originals/[folder_1] - # - "/mnt/Friends:/photoprism/originals/Friends" # [folder_2]:/photoprism/originals/[folder_2] - # Mounting an import folder is optional (see docs): + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] + # You may mount an *import* folder from which files can be transferred to *originals* (optional): # - "~/Import:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" mariadb: @@ -92,10 +92,10 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "mariadb_data:/var/lib/mysql" + volumes: + - "mariadb_data:/var/lib/mysql" # Never remove environment: - MYSQL_ROOT_PASSWORD: please_change + MYSQL_ROOT_PASSWORD: insecure MYSQL_DATABASE: photoprism MYSQL_USER: photoprism MYSQL_PASSWORD: insecure diff --git a/docker/examples/scheduler/docker-compose.yml b/docker/examples/scheduler/docker-compose.yml index 047cf874e..98878331a 100644 --- a/docker/examples/scheduler/docker-compose.yml +++ b/docker/examples/scheduler/docker-compose.yml @@ -88,14 +88,14 @@ services: HOME: "/photoprism" working_dir: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "~/Pictures:/photoprism/originals" - # Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals: - # - "/mnt/Family:/photoprism/originals/Family" # [folder_1]:/photoprism/originals/[folder_1] - # - "/mnt/Friends:/photoprism/originals/Friends" # [folder_2]:/photoprism/originals/[folder_2] - # Mounting an import folder is optional (see docs): + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] + # You may mount an *import* folder from which files can be transferred to *originals* (optional): # - "~/Import:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" mariadb: @@ -106,10 +106,10 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "./database:/var/lib/mysql" + volumes: + - "./database:/var/lib/mysql" # Never remove environment: - MYSQL_ROOT_PASSWORD: please_change + MYSQL_ROOT_PASSWORD: insecure MYSQL_DATABASE: photoprism MYSQL_USER: photoprism MYSQL_PASSWORD: insecure diff --git a/docker/examples/sqlite/docker-compose.yml b/docker/examples/sqlite/docker-compose.yml index f46649892..cd94e3664 100644 --- a/docker/examples/sqlite/docker-compose.yml +++ b/docker/examples/sqlite/docker-compose.yml @@ -78,14 +78,14 @@ services: HOME: "/photoprism" working_dir: "/photoprism" volumes: - # Your photo and video files ([local path]:[container path]): + # The *originals* folder contains your original photo and video files (- "[host folder]:/photoprism/originals"): - "~/Pictures:/photoprism/originals" - # Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals: - # - "/mnt/Family:/photoprism/originals/Family" # [folder_1]:/photoprism/originals/[folder_1] - # - "/mnt/Friends:/photoprism/originals/Friends" # [folder_2]:/photoprism/originals/[folder_2] + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: + # - "/mnt/Family:/photoprism/originals/Family" # [folder 1]:/photoprism/originals/[folder 1] + # - "/mnt/Friends:/photoprism/originals/Friends" # [folder 2]:/photoprism/originals/[folder 2] # Mounting the import folder is optional (see docs): # - "~/Import:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: diff --git a/docker/examples/windows/docker-compose.yml b/docker/examples/windows/docker-compose.yml index d1ed370cc..74e9767fd 100644 --- a/docker/examples/windows/docker-compose.yml +++ b/docker/examples/windows/docker-compose.yml @@ -77,13 +77,14 @@ services: HOME: "/photoprism" working_dir: "/photoprism" volumes: - # Your photo and video files (multiple directories or drives can be indexed by mounting them as sub-folders): + # The *originals* folder contains your original photo and video files (- "C:/Directory:/photoprism/originals"): - "~/Pictures:/photoprism/originals/Pictures" + # Multiple folders can be made accessible by mounting them as subfolders of /photoprism/originals: # - "D:/Pictures:/photoprism/originals/Pictures" # - "E:/Friends:/photoprism/originals/Friends" - # Mounting an import folder is optional (see docs): + # You may mount an *import* folder from which files can be transferred to *originals* (optional): # - "E:/:/photoprism/import" - # Permanent storage for settings, index & sidecar files (DON'T REMOVE): + # Cache, session, thumbnail, and sidecar files will be created in the *storage* folder (never remove): - "./storage:/photoprism/storage" mariadb: @@ -93,10 +94,10 @@ services: - seccomp:unconfined - apparmor:unconfined command: mysqld --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 - volumes: # Don't remove permanent storage for index database files! - - "mariadb_data:/var/lib/mysql" + volumes: + - "mariadb_data:/var/lib/mysql" # Never remove environment: - MYSQL_ROOT_PASSWORD: please_change + MYSQL_ROOT_PASSWORD: insecure MYSQL_DATABASE: photoprism MYSQL_USER: photoprism MYSQL_PASSWORD: insecure