photoprism
-
To
photoprism είναι μια selfhosted photo managment εφαρμογή. -
Είναι docker ready με πολύ πλούσιο config
-
Raspberry pi ready
-
προσφέρει πλήθος κατηγοριοποιήσεων πχ infinite timeline αλά google photos , original folder structure , year-month-date , map , αλλά και tensorflow object categorisation
-
Progressive web app δομή
-
Comunity android app που λύνει κάποια caching & reloading θέματα του web app καθώς προσφέρει και πειραματικό auto upload
-
Είναι webdav ready και μπορείς τόσο να προσαρτήσεις την συλλογή σου σε οποιοδήποτε file manager το υποστηρίζει αλλά και στο nextcloud αλλα το πιο σημαντικό όμως είναι ότι με αυτό μπορείς να ανεβάσεις αυτόματα τις φωτογραφίες σου με χρήση κάποιου webdav client απο το τηλέφωνο σου και να συγχρονιστούν επίσης αυτόματα στην library σου
-
Επιλογές indexing τόσο manual με εντολή και από το web ui αλλά και με χρήση import folder
links
install
Ακολουθούμε τις οδηγίες εγκατάστασης για rpi απο εδω
Δημιουργούμε ένα φάκελο εργασίας
mkdir photoprism
και μπαίνουμε στο φάκελο
cd photoprism
κατεβάζουμε το αρχείο doker-compose.yml με βάση το οποίο θα δημιουργήσουμε το docker container
wget https://dl.photoprism.org/docker/arm64/docker-compose.yml
και το ανοίγουμε για επεξεργασία
nano docker-compose.yml
- αντιγράφω εδώ το περιεχόμενο του
version: '3.5'
# Example Docker Compose config file for PhotoPrism (Raspberry Pi / ARM64)
#
# Documentation : https://docs.photoprism.org/getting-started/raspberry-pi/
# Docker Hub URL: https://hub.docker.com/r/photoprism/photoprism-arm64/
#
# 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 -a
# Import | docker-compose exec photoprism photoprism import
# -------------------------------------------------------------------
# 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:
# Use photoprism/photoprism-arm64:preview instead for testing preview builds:
image: photoprism/photoprism-arm64:latest
container_name: photoprism
# 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
ports:
- 2342:2342 # [local port]:[container port]
environment:
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # PLEASE CHANGE: Your initial admin password (min 4 characters)
PHOTOPRISM_ORIGINALS_LIMIT: 1000 # 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: 2 # 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_WEBDAV: "false" # Disables built-in WebDAV server
PHOTOPRISM_DISABLE_SETTINGS: "false" # Disables Settings in Web UI
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # Disables using TensorFlow for image classification
PHOTOPRISM_DARKTABLE_PRESETS: "true" # Enables Darktable presets and disables concurrent RAW conversion
# 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: ""
# You may optionally set a user / group id using environment variables if your Docker version or NAS does not
# support this natively (see next example):
# UID: 1000
# GID: 1000
# UMASK: 0000
# Uncomment and edit the following line to set a specific user / group id (native):
# user: "1000:1000"
# For hardware AVC transcoding using the h264_v4l2m2m encoder:
# devices:
# - "/dev/video11:/dev/video11"
volumes:
# Your photo and video files ([local path]:[container path]):
- "~/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):
# - "~/Import:/photoprism/import"
# Permanent storage for settings, index & sidecar files (DON'T REMOVE):
- "./storage:/photoprism/storage"
mariadb:
image: arm64v8/mariadb:10.5
container_name: mariadb
restart: unless-stopped
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=50
volumes: # Don't remove permanent storage for index database files!
- "./database:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: please_change
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:
# image: containrrr/watchtower
# container_name: watchtower
# restart: unless-stopped
# 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
Βεβαιώνουμε ότι
-
το image είναι το photoprism-arm64:latest
-
ότι το restart είναι unless-stoped (μπορούμε να το γυρίσουμε σε always αφού βεβαιωθούμε ότι το config μας δουλεύει)
-
η στο port η default port που κάνει expose είναι η 2342 μπορούμε να την αλλάξουμε φροντίζουμε όμως να αλλάξουμε και το PHOTOPRISM_HTTP_PORT στο enviromet
-
επίσης στο enviroment από το πλήθος των config που περιέχει , αλλάζουμε τουλάχιστον τα:
PHOTOPRISM_ADMIN_PASSWORD:
PHOTOPRISM_DATABASE_PASSWOD:
-
οι workers όχι πάνω από 2
-
Πέραν των όσων περιέχει το .yml προσωπικά έχω προσθέσει to
PHOTOPRISM_AUTO_INDEX στα 60 sec που είναι ο χρόνος μετά τον οποίο ξεκινάει ο αυτόματος συγχρονισμός των originals (της βιβλιοθήκης μας) μετά το ανέβασμα από webdav -
πλήρης λιστα με τα διαθέσιμα enviromental variables και το τι κανει το κάθε ένα εδω
-
στο volumes κανουμε map το filepath του φακελου που περιεχει τις φωτογραφιες μας
photo/file/path:/photoprism/originals
- μπορουμε να προσθεσουμε πολους φακελους ως υποφακελους των originals
"/mnt/Family:/photoprism/originals/Family"
- και να κανουμε map εναν import folder
"file/path/to/Import:/photoprism/import"
- αλλα και τον storage folder με τα index & sidecar files αρχεια
"file/path/to/storage:/photoprism/storage"
-
το τελευταίο θα γίνει αρκετά μεγάλο σε μέγεθος και καλό είναι το επιλέξουμε έναν εξωτερικό σκληρό . Προσωπικά έχω όλα τα filepath σε εξωτερικό σκληρό
-
στο mariadb enviroment αλλάζουμε το MYSQL_ROOT_PASSWORD:
securing
Στο officilal documenttation υπάρχουν παραδείγματα με όλους τους δημοφιλείς reverse proxies ώστε να προστατέψεις την θύρα που κάνει expose το photoprism σου πίσω του καθώς και να προσθέσεις ενα ssl certificate και να κάνεις την σύνδεσή κρυπτογραφημένη
Προσωπικά χρησιμοποιώ caddy μιάς και ειναι πολύ απλο προσθέτωντας στο /etc/caddy/Caddyfile το
example.com:port {
reverse_proxy localhost:2342
}
οπου example.com:port το ddns domain μου και μια port forworded πορτα στο ρουτερ αφιερομενη στο photoprism πχ 8888
To caddy προσθέτει αυτόματα ssl cert δε χρρειαζετε να παρεις μονος σου απο certbot ουττε να κανεις αυτοματες ενημερωσεις τα ανααμβανει ολα αυτο
Το συγκεκριμένο config domain:port ισως μοιάζει περίεργο μιας και το πιο λογικο θα ηταν ενα ddns domain αφιερομενο στο photoprism και γενικα ενα domain name ανα υπηρεσια που τρεχεει στον server (raspberry) πχ https://ippokratis.photoprism.duck.net στην 443 και το caddy να ανακατευθηνει στην localhost
ο λογος ειναι οτι τοσο το ρουτερ του οτε οσο και της wind ειναι κλειδωμενα και μπορεις να χρησιμοποιησεις μονο ενα ddns adrress
το αναφερω γιατι μαλλον ενδιαφερει
To photoprism εχει το lerning curve του μεχρι να εξοικειωθεις με τις επιλογες του
το official documentation ειναι κατατοπιστηκο εδω)
τα βασικα σημεια που θελω να σταθω
(διαφορές import και originals εδω)
Στο originals εσωτερικα στο container εχουν γινει maped ολοι οι φακελοι με τις φωτογραφιες σου
Το import (optional) είναι ένας φάκελος που πάνε τα uploads και το webdav sync αν το επιλέξεις . Είναι ένας προσωρινός φάκελος από τον οποίο αντιγράφονται οι φωτογραφίες στο φάκελο του originals αφού γίνουν (αυτόματα) index . Επίσης, αντιγράφονται και στον φάκελό φωτογραφιών στο file system
partner apps
Καλοφτιαγμένη δωρεάν εφαρμογη που εμφανίζει της φωτογραφίες μας στο χάρτη Το photoprism υπαρχει στις διαθέσιμες πυγές Το επιλεγουμε απο το πανω αριστερο μενου , στις υηρεσιες (conect to photoprism) και ειναι της μορφης https:ddns.domain:port , username , password
- photosync paid app
απο το πάνω δεξια μενου
ρυθμήσεις
configure targets
webdav
add new
server: domain.name
port: port
username
password
δεν βαζω ssl αφου αναλαμβανει το caddy
- εναλακτο δωρεαν το foldersync περιεχει διαφημήσεις(πολλές) δεν εχω βρει καποιο foss app με webdav sync
Από την καρτέλα λογαριασμοί επιλέγουμε webdav
Στο πως θα συγχρονίζονται επιλέγω αποστολή
Βάζουμε το username και password μας
Διεύθυνση το ddns domain μας
Port η public port
Στη διαδρομή έχω βάλει import/ καθώς χρησιμοποιώ τον import φάκελο για αυτόματο indexing
Και ενεργοποίηω το toggle για τον αυτόματο συγχρονισμό
Καλό είναι να εξαιρεσουμε την εφαρμογή από την βελτιστοποίηση μπαταρίας από τις ρυθμίσεις του τηλεφώνου
barebones app
μονο το timeline δουλευει και ο αυτοματο upload το οποιο δε ξερω ποσο αξιοπιστο ειναι
τουλαχιστον ομως δεν χρηαζετε να φορτώνουν καθε φορα οι φωτογραφιες απο την αρχή
Το παρών είναι αναδημοσιεύση του blog post μου από εδω