Plan (hide)
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/Litchis.jpg)
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 :
- Uploader des photos de manière classique ;
- Importer des photos depuis un lien, depuis un répertoire du serveur ou depuis Dropbox ;
- Déplacer des photos d'un album vers un autre album ;
- Ouvrir la photo en plein écran ;
- Rendre publique une photo ;
- Étiqueter les photos ;
- Obtenir des informations sur une photo (EXIF en particulier) ;
- ...
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).
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/Lychee1.png)
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.
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/Lychee2.png)
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.
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/BailPermanent.png)
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).
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/NAT.png)
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
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/DtDNS1.png)
et vous l'ajoutez. Ensuite il faut ajouter un client qui va maintenir cette adresse. La livebox le permet.
![](https://litis.univ-lehavre.fr/~dolivier/PagePerso/uploads/Divers/Photos/DtDNS2.png)
Il vous reste plus qu'à tester dans votre navigateur avec votre nom de domaine http://tapenade.gotgeeks.com.