Bisher habe ich alle Fotos, die ich anderen Leuten zeigen bzw. zur Verfügung stellen wollte, mit jAlbum zum Web-Album gemacht. Das war (ist) zwar nicht wirklich schwierig, ich finde es aber doch immer recht mühsam. Ich mache das nicht so oft, d.h. ich muss mich auch jedes Mal wieder neu reindenken. Ich habe zwar irgendwann aufgehört, immer die neue Version zu benutzen – trotzdem ist mir das irgendwie (zu) nervig – zumal ich immer noch irgendwie einen Passwort-Schutz drauflegen wollte und das mit htpasswd
erst vergeben etc. etc.
Jetzt bin ich auf die Piwigo gestoßen: Eine Web-Server-Software, die ich mir auf meinen Server installieren kann und recht leicht (auf verschiedene Weisen) neue Fotos hochladen. Dabei gibt es eine Benutzerverwaltung, sodass auch das mit dem Passwort-Schutz kein Problem ist.
Also perfekt ist das auch nicht, aber schon ein Fortschritt:
Mit docker und einem docker-compose.yml
(siehe Anhang) lief das zwar recht schnell, aber das Hochladen ging schecht. Danach habe ich nach etlichem Probieren und Fehlersuchen vom Image linuxserver/piwigo
auf mathieuruellan/piwigo
umgestellt. Nun ist’s besser. (Problem war u.a., dass er beim Hochladen via Web immer auf einen unerklärlichen Timeout gestoßen ist.)
Hinter einem Apache Reverse-Proxy läuft Piwigo straight forward (config: s.u.). Ich habe mir noch mit letsencrypt ein Zertifikat gemacht. Alles gut.
Problem sind die Dateinamen-Beschränkungen. So kommt er nicht mit den von ‚Apple Fotos‘ beim Exportieren erstellten Dateinamen zurecht. Und zwar zum einen mit den Leerzeichen, und zum anderen mit der Reihenfolge aufgrund der Tatsache, dass Apple keine führenden Nullen bei kleinen laufenden Nummern verwendet. Mit folgendem Bash-Einzeiler benenne ich sie nun erstmal um und lade sie dann auf einer der folgenden Weisen hoch:
rm -f ._*
ls *.jpg | while read name ; do neu=`echo "$name" | sed 's/ - /-/' | sed 's/-\([0-9]\).jpg/-0\1.jpg/'`; mv "$name" "$neu" ; done
Hochladen via rsync und „Synchronisieren“:
- so geht’s:
rsync -av --delete Album root@docker-prod:/opt/dockervolumes/piwigo2/data/galleries/
Dann in der Web-Oberfläche via „Administration“ -> „Werkzeuge“ -> „Synchronisieren“.
-
Vorteil: Aktualisierung rel. reinfach via neuem rsync + neu Synchronisieren in der Oberfläche.
- Nachteil: Er kommt z.B. nicht mit Umlauten klar 🙁
Ich habe beschlossen, das nicht zu verwenden.
Hochladen von der Web-Oberfläche oder von der App aus
- so geht’s: In der Web-Oberfläche via „Administration“ -> „Fotos“ -> „hinzufügen“.
- Vorteil: Schnell mal was hochladen.
- Nachteil: Unhandlich für viele Fotos.
Hochladen via Sync-Script
- so geht’s: piwigo_import_tree herunterladen, installieren und dann:
perl /data/Fotos/piwigo_import_tree.pl --base_url=https://piwigo.steinkopf.net --user=stk --password=ppp --directory=MeinAlbum
Erstellt bzw. aktualisiert ein Album mit dem Namen „MeinAlbum“ aus dem lokalen gleichnamigen Verzeichnis.
-
Vorteile: Leicht zu verwenden, Aktualisierung einfach, Umlaute kein Problem.
- Nachteil: rel. langsam. (ca. 2 Sekunden pro Bild). Wie es scheint, wird dabei schon beim Hochladen mehr „vorausberechnet“, was sonst erst beim ersten Anschauen passiert.
Anhang: Meine docker-compose.yml:
version: '2'
services:
mysql:
# see https://hub.docker.com/_/mysql/
# piwigo läuft offenbar aktuell (05-2016) nicht auf mysql 5.7
image: 'mysql:5.6'
mem_limit: 300m
environment:
- MYSQL_ROOT_PASSWORD=xxx
- MYSQL_USER=admin
- MYSQL_PASSWORD=yyy
# name of a database to be created on image startup
- MYSQL_DATABASE=piwigo
#ports:
# - 3306:3306
restart: always
volumes:
- /opt/dockervolumes/piwigo2/var_lib_mysql:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
backup-mysql:
image: 'dsteinkopf/backup-all-mysql:latest'
environment:
- BACKUP_INTERVAL=86400
- 'MYSQL_CONNECTION_PARAMS=--user=admin --host=mysql --password=yyy'
links:
- mysql:mysql
restart: always
volumes:
- /opt/dockervolumes/piwigo2/mysql-backup:/var/dbdumps
piwigo:
image: 'mathieuruellan/piwigo'
links:
- mysql:mysql
ports:
- 8087:80
restart: always
volumes:
- /opt/dockervolumes/piwigo2/data/galleries:/var/www/galleries
- /opt/dockervolumes/piwigo2/data/local:/var/www/local
- /opt/dockervolumes/piwigo2/data/plugins:/var/www/plugins
- /opt/dockervolumes/piwigo2/data/themes:/var/www/themes
- /opt/dockervolumes/piwigo2/cache:/var/www/_data/i
- /opt/dockervolumes/piwigo2/upload:/var/www/upload
- /var/log
- /var/log/piwigo:/var/log/apache2
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
phpmyadmin:
image: 'corbinu/docker-phpmyadmin:latest'
environment:
- MYSQL_PORT_3306_TCP_ADDR=mysql
ports:
- 8088:80
restart: always
links:
- mysql
Anhang: Reverse-Proxy-Config:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName piwigo.steinkopf.net
DocumentRoot /export/www/piwigo.steinkopf.net/
ServerAdmin webmaster@steinkopf.net
#LogLevel warn
ServerSignature Off
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/piwigo.steinkopf.net_access_log combined
<Directory "/export/www/piwigo.steinkopf.net/">
Options None
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.php index.html index.htm
php_flag output_buffering on
php_flag safe_mode on
</Directory>
RewriteEngine On
ProxyRequests Off
ProxyPass / http://docker-prod.steinkopf.net:8087/
ProxyPassReverse / http://docker-prod.steinkopf.net:8087/
SSLCertificateFile /etc/letsencrypt/live/piwigo.steinkopf.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/piwigo.steinkopf.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/piwigo.steinkopf.net/chain.pem
</VirtualHost>
</IfModule>
Umbenennung bei 3-stelligen Nummern:
Außerdem das Gleiche für m4v-Files:
…und hier das ganze als „hübsches“ Skript: https://nerdblog.steinkopf.net/2018/05/apple-fotos-exportieren-dateinamen-ordentlich/