Hébergement et Partage de photos


Quel besoin ?

La famille s’agrandit pas mal ces derniers temps, les parents sont devenus grands-parents et demandent régulièrement des photos des petits-enfants.

Ils ont tous accès à Internet et une boite mail. Les mail-groupés s’échangent mais nous sommes limités à 3 photos que nous devons réduire pour ne pas exploser certaines boites.

Quand quelqu’un veut tirer une photo, il demande alors de renvoyer l’image originale en bonne définition, ça devient contraignant !

L’objectif est donc de trouver une solution accessible à des personnes non techniques pour échanger des photos. Le parc informatique est varié, il comprend des PC/MAC sous différents OS. Il y a également des tablettes et smartphones sur iOS et Android.

Choix technique

Je n’ai pas eu l’occasion d’évaluer plusieurs solutions techniques. En effet, OwnCloud, que je souhaitais essayer depuis longtemps en remplacement de DropBox, répond exactement au besoin :

  1. Accès par navigateur web + possibilité d’installer un client sur ordinateur / smartphone.
  2. Gestion native des utilisateurs et des groupes.
  3. Fonctionnalité de partage d’un dossier avec un groupe.

Il était temps d’essayer pour de vrai. Après quelques essais sur ma RaspberryPi, il est rapidement apparu que la capacité de calcul et le débit montant étaient insuffisants pour une utilisation fluide.

Je profite donc de ce paragraphe pour remercier Idem d’avoir accepté d’héberger mon serveur chez lui !

Les prochaines parties traiteront de la configuration du serveur web. Elles ne sont pas spécifiques à OwnCloud et vous pouvez les sauter si vous prenez une solution d’hébergement web clef en main.

DNS

Le DNS est le service qui associe l’URL, une adresse de site Internet comprehensible par un humain (par exemple : www.google.fr) avec une IP, l’adresse qui sert à échanger les informations entre ordinateurs sur Internet (exemple : 173.194.45.55 pour google au moment où j’écrit ces lignes).

Il existe une multitudes d’entrées différentes dans ce tableau :

  • A : c’est l’association de base : mondomaine.com → IP du serveur
  • CNAME pour définir un alias : www.mondomaine.com → mondomaine.com
  • MX : qui sert à diriger les email de ce domaine
  • NS : qui indique quel est le server de service DNS qui possède le tableau d’entrées DNS.
  • Et encore pleins d’autre que je ne maitrise pas !

Comme je disposais d’un serveur dont je connaissais l’IP (cela marche aussi si vous hebergez chez vous derrière une box qui offre une IP fixe), j’ai directement acheté un nom de domaine chez OVH.

J’ai donc ajouté :

  • Une entrée A : pour associer mondomaine.com et l’IP fixe.
  • Une entrée CNAME : pour renvoyer owncloud.mondomaine.com sur mondomaine.com (et donc sur l’IP fixe). Nous le verrons dans la partie suivante que c’est le serveur qui s’occupera de faire le tri !
  • j’ai laissé la configuration MX définie par défaut par OVH afin de profiter de leur service mail entrant.

Configuration Apache

Apache est un serveur web. Il répond aux requetes de type HTTP ou HTTPS.

Nous allons voir comment le configurer pour qu’il réponde différement sur l’adrese principale et sur le sous-domaine.

On va créer un fichier domaine.com dans /etc/apache2/sites-avaiable/ :

 

 ServerAdmin webmaster@domaine.com
 DocumentRoot /var/www /com.domaine/www/
 servername www.domaine.com
 errorlog /var/log/apache2/domaine.com/www-error.log
 customlog /var/log/apache2/www-access.log combined

 ServerAdmin webmaster@domaine.com
 DocumentRoot /var/www /com.domaine/owncloud/
 servername owncloud.domaine.com
 errorlog /var/log/apache2/domaine.com/owncloud-error.log
 customlog /var/log/apache2/owncloud-access.log combined

La première règle dit qu’il faut aller chercher les documents pour www.domaine.com dansle dossier /var/www/com.domaine/www et comment sauvegarder les log (journaux d’exécution).
C’est pas dur !

Il faut ensuite créer les dossiers sinon lorsqu’on va dire à apache de prendre ce site en compte il va crier fort !

Pour la suite, toutes les commandes console sont à exécuter en temps que root ou en utilisant sudo :

mkdir -p /var/www/com.domaine/www/
mkdir -p /var/www/com.domaine/owncloud/
mkdir -p /var/log/apache2/domaine.com/

Les dossiers ont été créés avec root comme propriétaire, or c’est apache qui va devoir les utiliser il faut donc changer le propriétaire des dossiers.

chown -R www-data:www-data /var/www/com.domaine/

Nous allons maintenant activer (enable en anglais) la nouvelle configuration du site :

a2ensite domaine.com

a2ensite pour apache2 enable site.

Owncloud

Installation

Nous alons maintenant récupérer le logiciel depuis le site officiel du projet : owncloud.org

Au moment où j’écris ces lignes, la version en cours est la 6.0.1 :

cd /tmp
wget http://download.owncloud.org/community/owncloud-6.0.1.tar.bz2
tar -xjvf owncloud-6.0.1.tar.bz2

Nous avons donc un dossier owncloud dans lequel tous les fichiers de owncloud se trouvent. Nous allons les copier dans le répertoire d’apache.

cp -r owncloud/* /var/www/com.domaine/owncloud/

Et changer de propriétaire :

chown -R www-data:www-data /var/www/com.domaine/owncloud

Depuis un navigateur web, il suffit de visiter le site pour lancer l’installation complète.

Aperçu de l'écran d'accueil de OnwCloud à la première connexion.
Aperçu de l’écran d’accueil de OnwCloud à la première connexion.

Création des utilisateurs

Pour chaque utilisateur final, il faut créer un identifiant et un mot de passe.

Aperçu du menu disponible pour l'administrateur.
Aperçu du menu disponible pour l’administrateur.

Il faut bien penser à créer un groupe commun à tous les utilisateur.

Création rapide d'un utilisateur du service OwnCloud.
Création rapide d’un utilisateur du service OwnCloud.

Il est également pratique d’avoir un utilisateur administrateur de groupe qui pourras aider les utilisateurs en cas de perte de mot de passe par exemple.

Pour l’administrateur du service, j’ai supprimé l’ensemble des documents présents par défaut et limité l’espace à 10MB.

Interface de gestion des utilisateurs du service
Interface de gestion des utilisateurs du service

Paramètres supplémentaires

L’application owncloud pour mobile Android est open source mais payante sur le Google Play Store. F-droid distribue cette application gratuitement, mais mes utilisateurs ne sont pas habitués à utiliser ce store. Du coup, j’ai décidé d’héberger moi même l’application.

J’ai donc édité le fichier config/config.php du répertoire owncloud en ajoutant l’entrée :

'customclient_android' => 'http://www.domaine.com/owncloud_1.5.4.apk'

Et j’ai placé le paquet dans sur mon serveur dans /var/www/com.domaine/www/

Ainsi sur l’écran d’accueil, quand l’utilisateur clique sur l’icone Android Store, il téléchargera le paquet au lieu d’être redirigé sur le play-store.

Aperçu de l'écran de première connexion. Les liens pointent vers les AppStore "officiels" où vers le dépots renseigné dans le fichier config.php.
Aperçu de l’écran de première connexion. Les liens pointent vers les AppStore « officiels » où vers le dépots renseigné dans le fichier config.php.

Postfix

Et si on permettait l’envoi de mail ?

C’est à la fois simple et compliqué ! A vrai dire je n’ai pas réussi à aller aussi loin que je voulais, cependant j’ai pu faire qu’on puisse envoyer des mails depuis owncloud.

Une fois postfix installé sur la machine, éditer le fichier main.cf :

####################### 
# Paramètres généraux # 
####################### 

# Nom de domaine de messagerie principal. 
mydomain = domaine.com
# Nom d'hôte. 
myhostname = domain.com
# Nom de domaine utilisé pour les adresses incomplètes. 
myorigin = $mydomain 

# Activer l'écoute IPv6. 
inet_protocols = all 

# Les clients SMTP sûrs, qui auront plus de privilèges 
# (concrètement, le droit d'utiliser ce serveur comme relais). 
mynetworks = 127.0.0.0/8 [::1]/128 
################ 
# Serveur SMTP # 
################ 

# Les noms de domaine pour lesquels on accepte le courrier. 
mydestination = localhost, localhost.localdomain 
# Si votre FAI ne vous permet pas de poster le courrier directement, 
# utiliser son serveur SMTP comme relais en décommentant cette ligne. 
#relayhost = smtp.fai.com

Et c’est tout !

On a donc un service qui accepte tous les mail venant du serveur local et qui se charge de les transmettre en local si l’adresse de destination est @localhost ou @localhost.localdomain, ou alors de proche en proche à d’autres relais de mail jusqu’à leur destinataire.

HTTPS

Comme j’ai des utilisateurs qui veulent accéder au cloud via leur téléphone portable et que je n’ai aucune confiance en les opérateurs de téléphonie quant à ce qu’il stockent j’ai souhaité utiliser HTTPS pour encrypter les échanges de bout en bout.

StartSSL fournit des certificat de sécurité signés par l’autorité de certification (CA) StartCom gratuitement mais limité à un sous-domaine.

Aperçu du site StartSSL qui permet d'obtenir des certificats SSL gratuitement.
Aperçu du site StartSSL qui permet d’obtenir des certificats SSL gratuitement.

La procédure demande d’envoyer un email au hostmaster déclaré dans le WHOIS de votre domaine, (généralement hostmaster@domaine.com) c’est pour cela que j’ai laissé OVH gérer le MX de mon DNS j’ai ainsi pu faire une redirection de mon domaine vers l’adresse que j’utilise régulièrement.

En fin de procédure, StartSSL fournit 2 fichiers :

  • Le certificat à sauvegarder dans /etc/ssl/certs/owncloud.domaine.com.crt
  • La clé privée à sauvegarder dans /etc/ssl/private/owncloud.domaine.com.key

Il faut ensuite éditer le fichier des virtual hosts d’apache :

 

serveradmin admin@domain.com 
servername owncloud.domaine.com
redirect / 

DocumentRoot /var/www/com.domaine/owncloud 
serveradmin admin@domain.com 
servername owncloud.domaine.com
errorlog /var/log/apache2/domaine.com/owncloud-error.log.http 
customlog /var/log/apache2/domaine.com/owncloud-access.log.http combined 

SSLEngine on 
SSLProtocol all -SSLv2 
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM 
SSLCertificateFile /etc/ssl/certs/owncloud.domaine.com.crt 
SSLCertificateKeyFile /etc/ssl/private/owncloud.domaine.com.key 
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem 
SSLCACertificateFile /etc/ssl/certs/ca.pem

Le premier virtualhost écoute sur le port 80 (HTTP), j’accepte les connexion et je les renvoie sur la partie sécurisée en HTTPS (port 443).

Le second virtualhost écoute sur le port HTTPS, en plus des infos classique (5 premières lignes), j’ai activé le cryptage SSL (lignes 7 à 9).

La 10ème indique le chemin vers mon certificat

La 11ième indique où je trouve la clef privée pour décrypter les données que le client me transmet.

Les lignes 12 et 13 donnent la chaîne de confiance, c’est ce qui garantit que l’utilisateur peut faire confiance au site qu’il visite.

Installation du module MailNotify

Il existe un module bien pratique qui envoie automatiquement un mail au groupe de partage lorsqu’un nouveau document est mis à disposition.

Il s’appelle MailNotify.

Mais son installation n’est pas instinctive. Et nécessite quelques accès supplémentaires. En l’état, il ne sera pas possible de l’utiliser si vous n’avez qu’un hébergement web.

Encore une fois nous allons télécharger le plug in puis l’envoyer dans sa destination :

cd /tmp
wget https://github.com/EELV-fr/mailnotify/archive/master.zip
unzip master.zip

On obtient un répertoire mailnotify-master contenant tout le code de ce plug-in. Il faut savoir que OwnCloud n’accepte d’activer que les plugging qui sont dans un répertoire qui a pour même nom que les informations qu’il présente. C’est surement pas clair mais en gros le dossier du pluggin doit s’appeler strictement mailnotify.

mkdir /var/www/com.domain/owncloud/apps/mailnotify
cp -r mailnotify/* /var/www/com.domain/owncloud/apps/mailnotify
chown -R www-data:www-data /var/www/com.domain/owncloud/apps/mailnotify

Puis aller avec le compte administrateur dans la partie applications et activer MailNotify.

Malheureusement ce n’est pas fini, ce plug-in nécessite d’avoir une tâche qui s’exécute périodiquement. Il faut donc ajouter au gestionnaire de tache péiodique de linux une entrée spécifique. On crée donc un fichier owncloud dans /etc/cron.d/

# /etc/cron.d/owncloud 
# 
# Run the owncloud mailnotify task every 15 minutes
# 
SHELL=/bin/sh 
PATH=/usr/local/bin:/usr/bin:/bin 

######################################################################## 
# 
*/15 * * * * root php -f /var/www/com.domain/owncloud/apps/mailnotify/lib/cronjob.php >> /var/log/owncloud.log 2>&1

La tâche périodique de MailNotify est donc appelée toute les 15 minutes, elle regarde si des nouveaux documents ont été ajoutés et si c’est le cas un email est envoyé à tous les utilisateurs du groupe de partage ayant donné leur email.

A propos de Mehdi HAMIDA

Avec plus de 20 ans d’expérience dans la tech, je me suis spécialisé dans la gestion des données, le cloud (AWS, Snowflake) et l'architecture IT. Avant ça, j’étais expert technique et chef de projet sur des missions stratégiques. Je m'appelle Mehdi HAMIDA, et aujourd’hui, je partage simplement mes découvertes et connaissances à travers ce blog.

Lire aussi

Harry Potter : Wizards Unite

Le studio Niantic, qui a conçu Ingress et Pokémon Go (mais surtout Ingress), a annoncé …

8 commentaires

  1. Bonjour
    merci du partage
    Néanmoins, pour des personnes non averties, installer un Piwigo sur un hébergement mutualisé est quand même vachement plus simple.
    J’adore Owncloud mais son coté galerie je le trouve trop basique. Et il ne me semble pas qu’ils veulent vraiment l’améliorer. Et les maj de modules Owncloud Oh mon Dieu quelle horreur!! Des erreurs de jeunesse qui traînent,qui traînent… comme la maj auto d’Owncloud qui a mis bcp de temps à venir!

    Ps: votre formulaire de commentaire est très buggué (ss FF 27) du fait de
    #respond form#commentform p.comment-form-comment label, #respond form#commentform p.comment-form-url label, #respond form#commentform p.comment-form-email label, #respond form#commentform p.comment-form-author label
    width: 50px;
    notamment

    • Bonjour et merci pour la remarque.
      J’ai choisi OwnCloud sans vraiment connaitre les autres solutions existantes. D’une mannière générale les galeries ne convennaient pas à mon usage :
      *soit trop ouverte
      *soit trop complexe.
      Par exemple, j’ai installé ce WE le client OwnCloud pour windows (note au passage 1.5.3_rc1 car la 1.5.2 est buggée sur Win7 x64) chez des arrières-grand parent. La présentation que je leur en ai faite est un dossier dans lequel les photos sont automatiquement mise à jour, ils n’ont jamais de connexion spécifique à faire.

      Pour le blog, je suis encore novice en la matière et je pense que le theme est mal choisi, merci du retour, ca fait parti des choses que je testerai mieux avant de choisir un theme définitif.

  2. Merci pour ce tuto très instructif.

    Quelques petits points :

    – L’installation d’apache (apt-get install apache2) est nécessaire avant de commencer.

    – Dans le fichier domaine.com, il y a un espace en trop sur la ligne 3 et 10

    DocumentRoot /var/www /com.domaine/www/
    au lieu de
    DocumentRoot /var/www/com.domaine/www/

    Voila. Sinon pour ma part j’ai un problème après l’installation de OwnCloud. Quand j’essaye d’accéder au site ) le navigateur me propose uniquement de télécharger le fichier index.php…
    J’ai pas eu trop le temps de regarder, mais il semblerait qu’il manque une petite étape (sur le tuto ou sur ce que j’ai fait)

    Dans tous les cas, merci.

  3. Bon…pour mon problème de fichier index.php, il me manquait les dépendances 😀 (boulet inside)

    apt-get install apache2 php5 php5-gd php5-mysql php5-json mp3info curl libcurl3 libcurl3-dev php5-curl zip git mysql-server

    • Merci pour les remarques, j’éditerai dans ce sens pour une installation from scratch.
      Personnellement, je me suis passé de MySQL en utilisant sqlite3 pour un résultat similaire.

  4. Bonjour, simple curiosité, n’est-ce pas plus simple de passer par des systèmes en ligne type Joomeo pour éviter tout ça ? C’est tout en ligne et ça semble bien sécurisé.

    • Joomeo (que je ne connaissais pas jusqu’à votre commentaire) est un service fermé.
      Ma démarche d’auto-hébergement est de rester maitre de mes données. Je ne veux pas être dépendant d’un service fermé qui pourrait décider demain de revendre mes photos de familles ou de rendre l’accès payant.
      En regardant sur le site, je vois les restrictions suivantes :
      *10 Mo/photo : Une photo prise avec mon réflexe fait 22Mo!
      *150 Mo/mois : Nous avons utilisé beaucoup plus que ça. Même en redimensionnant les photos c’est très limitant !
      * Pas de « Lecture en ligne des vidéos » : ok c’est anecdotique

      • Je comprends la démarche d’auto-hébergement.
        En fait ma réflexion est venue de l’approche technique qui m’a un peu effrayée ! Du coup, il me semblait que le process était lourd pour héberger et partager des images.
        Pour les restrictions de Joomeo, c’est vrai que je n’en ai pas subi les conséquences vu que je ne suis pas une grosse photographeuse donc les 150Mo/mois me suffisent ! J’ai opté 2 fois pour leur abonnement mensuel le moins cher pour mettre les photos d’un voyage et celle d’une soirée, c’est tout.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *