Sigal Self-hosting photo gallery

, par MiKaël Navarro   submit to reddit

À la fin de mes vacances je cherchais à partager mes photes auprès de mes proches…

Bien sûr la plupart des gens vous dirons qu’il existe des solutions de partage dans le cloud tels que Dropbox / Google Drive / WeTransfert / … mais ces solutions me dérangent.

Je souhaite :
- garder le contrôle de mes fichiers (chez moi),
- une application simple (KISS),
- sans BDD,
- …
Pour cela j’ai retenu Sigal !

Sigal est un générateur de galerie photo. Il va générer un site « static » avec vos photos / vidéos dedans :)

Installation

Sigal est écrit en Python et nécessite maintenant une version 3.5+

# apt install libjpeg-dev libopenjp2-7-dev python3-dev python3-pip
# pip3 install pillow
# pip3 install sigal

Préparation / génération

Il faut ensuite préparer / organiser nos dossiers pour notre galerie :

$ mkdir -p /home/mickey/images/photos/{2015,2016,2017,2018}  # création des dossiers photos
$ mkdir -p /home/mickey/images/galerie  # c'est ici que sera généré le site
$ cd /home/mickey/images/
/home/mickey/images/
|- photos/
|  |- 2015/
|  |- 2016/
|  |- 2017/
|  `- 2018/
`- galerie/
$ sigal init

Ceci produira un fichier sigal.conf.py dans le répertoire courant (ici /home/mickey/images/), voici les seuls changements que j’y effectue :

title = "Photos famille"  # le titre de la galerie
source = 'photos'  # le répertoire des photos / vidéos
destination = 'galerie'  # le répertoire ou va être généré le site
#theme = 'galleria'  # le thème utilisé : colorbox (defaut), galleria, photoswipe
use_orig = True  # on indique ici que l'on souhaite garder les originaux (càd pas de traitements "resize", "crop", …)
orig_link = True  # on demande faire des liens symboliques plutôt que de copier les originaux

Attn. le répertoire destination ne doit pas se trouver dans le répertoire source !

Ensuite plus qu’à générer la galerie :

$ sigal build  # pour générer la galerie
$ sigal serve  # serveur web basique http://127.0.0.1:8000/ pour tester UNIQUEMENT !

Publication

Ne reste plus qu’à copier les dossiers /home/mickey/images/galerie et /home/mickey/images/photos (si orig_link = True) sur le serveur web : /var/www par exemple.

Le site généré étant « static », c’est vers ce site que devra pointer votre configuration Apache ou Nginx.

Sécurisation

Par défaut Sigal ne fournit pas de solution de sécurisation / contrôle d’accès, cela est laissé au serveur web. Par exemple pour Nginx on se basera sur une authentification HTTP.

On commence par générer un mot de passe (outil apache2-utils) :

# htpasswd -c /var/www/galerie/.htpasswd <login>

À rajouter dans /etc/nginx/sites-enabled/default :

 location /galerie {
   auth_basic "Restricted Access";
   auth_basic_user_file /var/www/galerie/.htpasswd;
 }

Puis redémarrer le serveur : service nginx reload

P.-S.

À noter qu’une anomalie est en cours https://github.com/saimn/sigal/issues/333, qui lors de l’utilisation de l’option orig_link = True ne génère pas de liens symboliques relatifs. Interdisant ainsi de déplacer les dossiers photos et galerie comme on le souhaite.

En attendant il est préférable de :
- Soit copier les photos originales dans le site avec l’option use_orig = False (ainsi le dossier galerie est vraiment portable et autonome) ;
- Soit copier les photos et générer le site directement sur le serveur web (ds /var/www/…).