disclaimer:To παρόν είναι ότι δούλεψε σε μένα.Δε ξέρω αν είναι η ‘σωστή’ διαδικασία ή αν υπάρχουν άλλες πιο αποτελεσματικές.Στο πι είμαι νέος χρήστης και στο λίνουξ ‘απλός’.Η εγκατάσταση έγινε σε ένα rpi400 με dietpi 64αρι beta και τα docker conatainer επίσης 64αρια.
Απο τα πιο διαδεδομένα self hosted photo galleries το lychee απορρίφθηκε ως πολύ στοιχειώδες με έλλειψη ai feature , το piwigo ως κακάσχημο και παλαιολιθικό , το ownphoto/librephoto γιατί δεν υποστηρίζει arm αρχιτεκτονική.
Ξεχώρησαν τα photoprism και photoview.
Eδω θα δούμε το photoview
Τόσο το photoprism όσο και το photoview είναι πολύ δραστήρια project στο github με πολύ μονερνο σχεδιασμό και χρήσιμες λειτουργίες όπως face detection , opbject categorisation , map , exif metadata καθώς επίσης και τα δυο έχουν βελτιστοποιημένη προβολή ως web app και ‘εγκαθιστώνται’ ως τέτοια στην οθόνη του τηλεφώνου και μπορούν να αντικαταστήσουν εύκολα proprietary paid closed source εφαρμογές.
Προϋποθέσεις
python,docker,docker-compose,(optional αν θέλουμε να βγαίνουμε εκτός τοπικού δίκτυου port forwording,ddns provider,reverse proxy server ,encryption)
python
υπάρχει script και για το docker-compose υπάρχει python package
να πω εδώ οτι το dietpi έχει έτοιμα δικά script εγκατάστασης οπότε με dietpi-software και additional-software μπορούμε να εγκαταστήσουμε python και dependencies
αν χρησιμοποιούμε κάποιο άλλο distro
sudo apt install python3 idle3
dependencies
sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python3 python3-pip
sudo apt-get remove python-configparser
docker/docker-compose
στο πι εγκατάσταση δεν μπορούμε να κάνουμε από τα συνήθη repo.
docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
docker-compose
sudo pip3 -v install docker-compose
photoview
mkdir photoview
cd photoview
nano docker-compose.yml
paste
version: "3"
services:
db:
image: mariadb:10.5
restart: always
environment:
- MYSQL_DATABASE=photoview
- MYSQL_USER=photoview
- MYSQL_PASSWORD=photosecret
- MYSQL_RANDOM_ROOT_PASSWORD=1
volumes:
- db_data:/var/lib/mysql
photoview:
image: viktorstrate/photoview:edge
restart: always
ports:
- "8000:80"
depends_on:
- 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
# Change This: The publicly exposed url
# For example if the server is available from the domain example.com,
# change this value to http://example.com/
- PHOTOVIEW_PUBLIC_ENDPOINT=http://localhost:8000/
# 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:
- api_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
volumes:
db_data:
api_cache:
photoview:
image: viktorstrate/photoview:edge
εδω edge ειναι η unreleased beta εκδοση . Επιση υπάρχουν και nighty ενω το σταθερο κανάλι είναι το 2 . Αν θέλουμε αναγνώριση προσώπου το 2 δεν εχει
ports:
- "8000:80"
Αντι για 8000 μπορουμε να βάζουμε οποια πορτα στο host θέλουμε
- PHOTOVIEW_PUBLIC_ENDPOINT=http://localhost:8000/
Αντικαθιστούμε με τον domain μας
να σημειώσω οτι thumbnail preview θα έχουμε μόνο απο τη διυθηνση που θα βάλουμε εδω
# - MAPBOX_TOKEN=<YOUR TOKEN HERE>
uncomment #
Βάζουμε το token from https://account.mapbox.com/access-tokens/create αφού προφανώς έχουμε κάνει δωρεάν εγγραφή σε αυτη την Open source υπηρεσία map api καλό είναι στο mapbox να βάλουμε το domain μας ώστε να έχει πρόσβαση στο token μόνο το domain μας
- ./photos_path:/photos:ro
αντικαθιστούμε ./photos_path με το full path του photos folder μας στο host . το path μπορεί να είναι και σε εξωτερικό σκληρό δίσκο
docker-compose up -d
Το app θα δημιουργήσει ένα σχετικά μεγάλο μέγεθος από thumbnail στο docker volume του api_cache οπότε καλό είναι να μεταφέρουμε την cache σε εξωτερικό σκληρό
αυτό γίνετε είτε με mount --bind ένα φάκελο του σκληρού στο container είτε απευθείας στο docker-compose που είναι και πιο κομψό
αντικαθιστούμε το
volumes:
- api_cache:/app/cache
με
volumes:
- /path/to/external/drive/folder:/app/cache
διαγράφουμε το
api_cache:
απο το
volumes:
db_data:
api_cache:
και αφήνουμε το
PHOTOVIEW_MEDIA_CACHE=/app/cache
ως εχει
reverse proxy + encryption
εδώ την δουλειά την κάνει ο server που επιλέγει ο κάθε ένας
προσωπικά επειδη ο παροχος μου μου επιτρέπει μόνο ένα domain name χρησιμοποιώ reverse proxy και το caddy συγκεκριμένα επειδη προσθέτει αυτόματα encryption και μου φάνηκε εύκολο
ίσως βάλω σε μεταγενέστερο ποστ ένα σύντομο οδηγό εγκατάστασης
αν έχεις λοιπόν caddy
nano /etc/caddy/Caddyfile
add
domain_name:port {
reverse_proxy http://localhost:port
}
ctrl + x
y
enter
service caddy restart
domain_name:port
αντικαθιστουμε το :port με μια ανοιχτη θύρα στο ρουτερ αφιερομένη στο photoview . και το domain_name με το ddns domain μας τα ιδια βαζουμε και στο PHOTOVIEW_PUBLIC_ENDPOINT του docker-compose
localhost:port
αντικαθιστούμε το :port με την ιδια πορτα που επιλέξαμε και στο
- “8000:80” του docker-compose
Επισκευτόμαστε την διεύθηνση που βαλαμε στο PHOTOVIEW_PUBLIC_ENDPOINT Επιλέγουμε user name και password στο sign in page
Στα setings στο photo path βάζουμε /photos
Πατάμε scan all να αρχίσει το indexing
αν επικευτουμε το photoview instance απο οουδηποτε αλλου περαν του PHOTOVIEW_PUBLIC_ENDPOINT , απο το localhost πχ δεν φορτώνουν τα thumbnail
live logs
θα χρειαστεί καποιες ωρες να αναλύσει ολες τις φωτογραφειες μας
κατα τη διαρκεια πεταει enhmerotika popup
μπορουμε να παρακολουθησουμε τη διαδικασια με
docker ps
copy container id of viktorstrate/photoview:edge
docker logs --follow container_id