Diese Anleitung beschreibt Schritt für Schritt die Bereitstellung deines PiGallery2-Stacks inklusive einer MariaDB-Datenbank und einem vorkonfigurierten Nginx-Webserver für den HTTPS-Betrieb mit Let's Encrypt.
📋 Voraussetzungen
Bevor du startest, stelle sicher, dass folgende Komponenten auf deinem System bereitstehen:
- 🐳 Docker & Docker Compose installiert (Offizielle Anleitung)
- 🔑 Let's Encrypt Zertifikate: Der Nginx-Container erwartet Zertifikate unter
/etc/letsencrypt/.
- 🛡️ Sicherheitshinweis: Ändere vor dem Start unbedingt das Standard-Root-Passwort (
MYSQL_ROOT_PASSWORD) in der docker-compose.yml ab!
🛠️ Schritt-für-Schritt Installation
📁 Schritt 1: Ordnerstruktur & Nginx-Konfiguration vorbereiten
Erstelle ein Verzeichnis für dein PiGallery2-Projekt (z. B. in deinem Home-Verzeichnis) sowie die benötigten Unterordner für Konfigurationen, temporäre Dateien und deine Fotos:
mkdir -p ~/pigallery-stack/nginx \
~/pigallery-stack/nginx/cache \
~/pigallery-stack/pigallery2/config \
~/pigallery-stack/pigallery2/images \
~/pigallery-stack/pigallery2/tmp
Erstelle nun die Konfigurationsdatei für den Nginx-Reverse-Proxy:
nano ~/pigallery-stack/nginx.conf
Füge dort eine grundlegende Nginx-Konfiguration ein (Beispiel für HTTP/HTTPS-Weiterleitung an PiGallery2):
events {}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Cache-Pfad definieren (wichtig für die Galerie-Performance)
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=pigallery_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name deine-domain.de; # ⚠️ Ersetze dies durch deine Domain
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name deine-domain.de; # ⚠️ Ersetze dies durch deine Domain
ssl_certificate /etc/letsencrypt/live/deine-domain.de/fullchain.pem; # ⚠️ Pfad anpassen
ssl_certificate_key /etc/letsencrypt/live/deine-domain.de/privkey.pem; # ⚠️ Pfad anpassen
location / {
proxy_pass http://pigallery2:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Caching für Bilder aktivieren
proxy_cache pigallery_cache;
proxy_valid 200 302 60m;
proxy_valid 404 1m;
}
}
}
(Nutze Strg+O -> Enter zum Speichern und Strg+X zum Schließen)
🖼️ Schritt 2: Fotos bereitstellen
PiGallery2 liest deine Fotos standardmäßig im Lese-Modus (:ro) ein. Verschiebe deine Bilder in den vorbereiteten Ordner oder erstelle einen symbolischen Link (Symlink) auf dein bestehendes Fotoarchiv:
# Beispiel für das Kopieren von Fotos:
cp -r /pfad/zu/deinen/fotos/* ~/pigallery-stack/pigallery2/images/
📝 Schritt 3: Docker Compose Datei anlegen
Wechsle in den Projektordner und erstelle die Datei docker-compose.yml:
cd ~/pigallery-stack && nano docker-compose.yml
Füge den folgenden Inhalt ein:
version: '3'
services:
pigallery-db:
container_name: pigallery-db
image: mariadb
restart: unless-stopped
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=AENDERE_MICH_PRODUKTIV_PASSWORT # ⚠️ UNBEDINGT ÄNDERN!
- MYSQL_USER=pigallery2
- MYSQL_PASSWORD=pigallery2_pass
- MYSQL_DATABASE=pigallery2
nginx:
image: nginx:latest
container_name: nginx
restart: always
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx/error.log:/etc/nginx/error_log.log
- ./nginx/cache/:/etc/nginx/cache
- /etc/letsencrypt/:/etc/letsencrypt/
ports:
- 80:80
- 443:443
pigallery2:
image: bpatrik/pigallery2:latest
restart: always
command: sh -c 'bin/wait-for pigallery-db:3306 -- --Server-Database-mysql-host=pigallery-db --Server-Database-mysql-username=pigallery2 --Server-Database-mysql-password=pigallery2_pass --Server-Database-mysql-database=pigallery2'
container_name: pigallery2
deploy:
resources:
limits:
memory: 3G # <1GB RAM könnte reichen, triggert aber häufig die langsame Garbage Collection (GC)
environment:
- NODE_ENV=production
volumes:
- "./pigallery2/config:/app/data/config"
- "db-data:/app/data/db"
- "./pigallery2/images:/app/data/images:ro" # ':ro' bedeutet Read-Only (Schreibgeschützt)
- "./pigallery2/tmp:/app/data/tmp"
expose:
- "80"
volumes:
db-data:
🚀 Schritt 4: Stack starten
Starte die Container im Hintergrund:
docker compose up -d
Hinweis: Beim ersten Start wartet der PiGallery2-Container automatisch, bis die MariaDB-Datenbank vollständig bereit und erreichbar ist.
🌐 Weboberfläche & Zugriff
Sobald alle Container laufen, ist deine Galerie über deine Domain verschlüsselt erreichbar:
- 🔐 URL:
https://deine-domain.de (bzw. lokal testweise über HTTP via Port 80)
- 👤 Standard-Admin:
admin
- 🔑 Standard-Passwort:
admin
- ⚠️ Ändere das Administrator-Passwort direkt nach dem ersten Login in den Einstellungen!
🛑 Nützliche Befehle
- Status aller Container abrufen:
docker compose ps
- Echtzeit-Logs der Galerie einsehen:
docker compose logs -f pigallery2
- Nginx-Konfiguration ohne Neustart neu laden:
docker compose exec nginx nginx -s reload
- Stack stoppen:
docker compose down