Lychee permet de partager des photos en utilisant un petit raspberry, configuré en serveur web. Nous allons détailler les différentes étapes pour réaliser cela.

1.  Lychee

Lychee est sous licence MIT, développé en PHP/MySQL. Vous pouvez aller voir une demo, ici.

Quelques fonctionnalités :

  1. Uploader des photos de manière classique ;
  2. Importer des photos depuis un lien, depuis un répertoire du serveur ou depuis Dropbox ;
  3. Déplacer des photos d'un album vers un autre album ;
  4. Ouvrir la photo en plein écran ;
  5. Rendre publique une photo ;
  6. Étiqueter les photos ;
  7. Obtenir des informations sur une photo (EXIF en particulier) ;
  8. ...

2.  Le serveur web

Il existe plusieurs serveurs web fonctionnant sans problème sur Raspberry. Apache, Nginx et Lighttpd par exemple. Le premier est le plus utilisé mais un peu lourd pour un Raspberry. Il faut donc préférer l'un des deux derniers. Mon choix s'est arrêté sur Nginx qui offre plus de possibilité et des performances meilleures.

3.  Installations

Je suppose que vous avez déjà installé un système correct sur votre Rapsberry. Si ce n'est pas le cas suivez donc les informations détaillées ici, par exemple. La procédure présentée s'appuie sur les consignes d'installation fournies par Lychee. Après vous être connecté sur votre Raspberry par ssh par exemple avec votre compte utilisateur.

Commencez par mettre à jour le système.

 % sudo apt-get update && apt-get upgrade -y

Si vous n'y arrivez pas parce que vous n'avez pas les droits d'écriture sur /

 % mount -o remount,rw /

Il faut PHP 5.3 ou plus, MySQL et le lien PHP MySQL

 % sudo apt-get install php5-fpm php5-gd libgd2-xpm libpcrecpp0 libxpm4
 % sudo apt-get install -y php5-mysql mysql-server

On installe ensuite Nginx

 % sudo apt-get install nginx

Par acquis de conscience vous pouvez tester si votre serveur marche.

 % sudo /etc/init.d/nginx restart

et ensuite dans votre navigateur lancer une requête sur le port 80 de votre serveur (http://192.168.0.26 par exemple. Remplacez bien sur avec l'adresse ip de votre Raspberry). Vous obtiendrez alors une page marquée « Welcome to nginx! ».

Installez git si ce n'est pas déjà fait pour récupérer Lychee.

 % sudo apt-get install -y git

4.  Complément d'installation et configuration

Avant de s'attaquer à cela, il me semble que c'est une bonne idée de stocker vos photos et autres éléments non pas sur la carte sd mais sur un disque externe USB.

4.1  Préparation du disque dur externe

Connectez votre disque dur et repérez le device correspondant.

 % dmesg
 [15180.387035] usb 1-1.4.3: new high-speed USB device number 6 using dwc_otg
 [15180.480784] usb 1-1.4.3: New USB device found, idVendor=1058, idProduct=0748
 [15180.488134] usb 1-1.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=5
 [15180.496945] usb 1-1.4.3: Product: My Passport 0748
 [15180.501972] usb 1-1.4.3: Manufacturer: Western Digital
 [15180.508348] usb 1-1.4.3: SerialNumber: 575831314137333936393735
 [15180.523641] usb-storage 1-1.4.3:1.0: USB Mass Storage device detected
 [15180.540390] scsi host1: usb-storage 1-1.4.3:1.0
 [15181.552264] scsi 1:0:0:0: Direct-Access     WD       My Passport 0748 1022 PQ: 0 ANSI: 6
 [15181.561661] scsi 1:0:0:1: Enclosure         WD       SES Device       1022 PQ: 0 ANSI: 6
 [15181.584793] sd 1:0:0:0: Attached scsi generic sg0 type 0
 [15181.595348] sd 1:0:0:0: [sda] Spinning up disk...
 [15181.612668] ses 1:0:0:1: Attached Enclosure device
 [15182.606840] .ready
 [15185.544409] sd 1:0:0:0: [sda] 3906963456 512-byte logical blocks: (2.00 TB/1.81 TiB)
 [15185.565860] ses 1:0:0:1: Attached scsi generic sg1 type 13
 [15185.579029] sd 1:0:0:0: [sda] Write Protect is off
 [15185.591137] sd 1:0:0:0: [sda] Mode Sense: 47 00 10 08
 [15185.592107] sd 1:0:0:0: [sda] No Caching mode page found
 [15185.602245] sd 1:0:0:0: [sda] Assuming drive cache: write through
 [15185.626083]  sda: sda1
 [15185.647148] sd 1:0:0:0: [sda] Attached SCSI disk

 % sudo fdisk /dev/sda

 Command (m for help): p

 Disk /dev/sda: 2000.4 GB, 2000365289472 bytes
 255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0005f107

    Device Boot      Start         End      Blocks   Id  System
 /dev/sda1            2048  3906963455  1953480704    7  HPFS/NTFS/exFAT

Le format est du NTFS comme souvent par défaut sur les disques USB externes. Cela consomme du CPU pour les lectures/écritures c'est pourquoi il faut lui préférer du ext3 ou ext4. On supprime la partition existante (d), on crée ensuite une nouvelle partition primaire (n puis p) et on écrit (w).

 Command (m for help): d
 Selected partition 1

 Command (m for help): n
 Partition type:
    p   primary (0 primary, 0 extended, 4 free)
    e   extended
 Select (default p): p
 Partition number (1-4, default 1): 1
 First sector (2048-3906963455, default 2048): 
 Using default value 2048
 Last sector, +sectors or +size{K,M,G} (2048-3906963455, default 3906963455): 
 Using default value 3906963455

 Command (m for help): w
 The partition table has been altered!

 Calling ioctl() to re-read partition table.
 Syncing disks.

 % sudo fdisk /dev/sda

 Command (m for help): p

 Disk /dev/sda: 2000.4 GB, 2000365289472 bytes
 58 heads, 60 sectors/track, 1122690 cylinders, total 3906963456 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0005f107

    Device Boot      Start         End      Blocks   Id  System
 /dev/sda1            2048  3906963455  1953480704   83  Linux

 Command (m for help): q

La partition créée est /dev/sda1.

On formate la partition en ext4 :

 % sudo mkfs.ext4 /dev/sda1 -L photos

On crée un répertoire point de montage de cette partition qui sert à stoker les fichiers associés au serveur.

 % sudo mkdir /var/www

Monter le disque pour tester et changer le propriétaire et le propriétaire en www-data:www-data.

 % sudo mount -t ext4 /dev/sda1 /var/www
 % sudo chown www-data:www-data /var/www

Ce disque est fait pour être fixe on va donc l'ajouter dans la table de montage de façon permanente et en le repérant par son UUID.

 % sudo blkid 
 /dev/mmcblk0p1: SEC_TYPE="msdos" UUID="1984-3AEC" TYPE="vfat" 
 /dev/mmcblk0p2: UUID="eddc0c0a-23dc-40ee-961c-3dcf4fbde004" TYPE="ext4" 
 /dev/sda1: LABEL="photos" UUID="111521ab-4a21-4f01-90c2-38e8b7714d0c" TYPE="ext4"

On ajoute alors la ligne suivante dans /etc/fstab à la fin, sous l'éditeur nano, par exemple

 % sudo nano /etc/fstab

 # Le disque servant au serveur web
 UUID=111521ab-4a21-4f01-90c2-38e8b7714d0c /var/www ext4 defaults 0 0

4.2  Configurer Nginx

Il nous faut rajouter les pages index.php comme pages par défaut. Pour cela éditez le fichier /etc/nginx/sites-available/default, avec nano et vous modifiez les lignes :

 root /usr/share/nginx/www;
 index index.html index.htm;

en

 root /var/www/Lychee;
 index index.html index.htm index.php;

Dans ce même fichier il reste à rendre à indiquer l'utilisation de php-fpm en ajoutant ou modifiant

 location ~ .php$ {
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
 #             include fastcgi_params;
               include fastcgi.conf;
               fastcgi_param PHP_VALUE "max_execution_time=1800
                                        post_max_size=1500M
                                        upload_max_filesize=32M
                                        max_input_time=1800
                                        max_file_uploads=300";
        }

Pour éviter des problèmes de limitation de taille ou de timeout trop faible je vous conseille de modifier le fichier /etc/nginx/nginx.conf en ajoutant ou modifiant :

 http {
         # Set size for max uploaded content
         client_max_body_size 0; #max size disabled
         client_header_timeout 30m;
         client_body_timeout 30m;
 }

Il ne reste plus qu'à tester mais avant créez un fichier index.html dans /var/www

 % echo 'Framboise et Lychee' | sudo tee /var/www/Lychee/index.html

Vous pouvez alors tester dans un navigateur.

4.3  Configuration de Lychee

On commence par cloner le dépôt git

 % cd /var/www
 % sudo git clone https://github.com/electerious/Lychee.git
 % sudo chown -R www-data:www-data /var/www

Utilisez votre navigateur pour configurer lychee(ex http://192.168.0.22).

Donner les informations que vous avez fournie lors de l'installation de mysql (souvent root et un mot de passe). Vous devez créer un compte et vous arriverez sur la page principale.

5.  Lychee hors du réseau local

Si votre fournisseur d'accès est free vous pouvez aller voir l’installation d'un NAS où j'explique cela. Le serveur lychee est installé chez orange derrière une fibre. C'est donc à partir de cette configuration que nous allons partir.

5.1  ip fixe dans le réseau local

La première chose à faire est de donner une ip fixe dans votre réseau local ou plus exactement demander au serveur dhcp de donner toujours la même adresse au raspberry. Dans un premier temps, il faut déterminer l'adresse mac de l'animal.

 % sudo ifconfig
 [sudo] password for pi: 
 eth1      Link encap:Ethernet  HWaddr b8:27:xx:xx:xx:xx  
          inet addr:192.168.1.13  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          inet6 addr: 2a01:xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42185 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2042416 (1.9 MiB)  TX bytes:51971648 (49.5 MiB)

L'adresse mac est donc ce qui suit HWaddr : b8:27:xx:xx:xx:x. À partir de ces informations, nous allons attribuer un bail dhp statique.

5.2  Visibilité extérieure

Seule la box a une adresse publique nous allons donc utiliser la possibilité de faire du NAT (Network Adress Translation).

Une fois ces informations fournies. Lorsque vous utiliserez votre adresse publique dans votre navigateur qui demande par défaut le service attaché au port 80 vous devriez avoir le serveur photo Lychee.

5.3  Nom de domaine

Les fournisseurs d'accès vous donne une adresse publique donc visible à l'extérieur du réseau. Le problème c'est que pour certains elle change .... ! Ce n'est plus le cas chez orange si vous êtes sur de la fibre. Je vous propose néanmoins de résoudre ce problème pour les autres cas.

Un DNS (Domain Name Server) est le processus qui permet de lier un nom de domaine à une adresse IP. Les DNS Dynamiques permettent de relier des noms de domaine à une adresse IP dynamique. Le fournisseur de service offre cela DtDNS. Il vous créer un compte et ensuite choisir hostname

et vous l'ajoutez. Ensuite il faut ajouter un client qui va maintenir cette adresse. La livebox le permet.

Il vous reste plus qu'à tester dans votre navigateur avec votre nom de domaine http://tapenade.gotgeeks.com.

6.  Sources

https://github.com/electerious/Lychee/issues/106