Auto-héberger son service Web de partage de fichiers

Date: 21/05/2012 | Catégories: Open-source,Planet-libre,Web | Tags: ,,,,

L'échange direct de gros fichiers sur le Web, c'est à dire sans installer de client externe type FTP et en utilisant uniquement le protocole HTTP, oblige les utilisateurs à passer par des services en ligne comme Free Upload (gratuit mais avec une limite à 1 Go par fichier), YouSendIt (limite à 10 Go mais payant) ou encore les Dropbox et Google Drive (limite d'environ 300 Mo quand on passe par l'interface Web). C'est à dire des solutions propriétaires et qui peuvent regarder et exploiter les fichiers partagés.

Nous allons donc dans ce billet voir comment auto-héberger un service équivalent à partir de solutions libres. J'ai délibérément écarté les solutions de type "cloud" comme OwnCloud qui sont un peu trop lourdes, à mon goût, pour ce genre de besoin.

La liste des logiciels étudiés est la suivantes:

Au passage, merci à mes followers pour toutes ces bonnes pistes.

Jyraphe

Avec ce nom, on pouvait craindre un développement "usine à gaz" en Java (troll inside). C'est loin d'être le cas. Ce logiciel me semble effectivement le plus adapté à mon besoin. C'est pour cela que je l'ai positionné en début de billet, pour les plus pressés.

Développé en PHP, il se base sur la philosophie "Getting Real": faire peu de chose mais le faire bien.  Cela se retrouve également dans la simplicité de mise en place. Nul besoin de base de donnée MySQL ou de module spécifique. Seul un serveur Web (Apache ou autres) avec le support de PHP est nécessaire au fonctionnement de Jyraphe.

Installation de Jyraphe

L'installation est des plus simple. Par exemple, sur une distribution Debian:

On doit ensuite créer:

  • un fichier vide /var/www/jyraphe/lib/config.local.php avec les droits en écriture pour l'utilisateur www-data. C'est dans ce fichier que le script d'installation va régler les paramètres
  • un répertoire /var/www/jyraphe/var-AzErT2012/ qui contiendra vos fichiers (remplacer AzErT2012 par un nom de votre choix)

En saisissant les commandes suivantes:

Il ne reste plus qu'à lancer le script d'installation: http://votreserveur.com/jyraphe/install.php

On finalise l'installation en protégeant le fichier de configuration:

Note: Par défaut, votre configuration PHP limite la taille maximale des fichiers à uploader à 16 Mo. Pour augmenter cette valeur, il faut modifier les paramètres post_max_size et upload_max_filesize dans votre fichier de configuration php.ini. Attention, sur un système 32 bits, la limite doit être de 2147483647 octets (2 Go - 1). 

En ce qui concerne la sécurité de votre installation. Je vous conseille de protéger l'accès au script d'upload (index.php) par un mot de passe afin de limiter l'accès à votre service...

Utilisation de Jyraphe

L'accès à Jyraphe mène directement à la page d'upload:

A la fin du téléchargement, on obtient l'URL à envoyer à vos correspondants pour qu'ils puissent télécharger le fichier:

Mon avis sur Jyraphe

Les +:

  • Installation simple et rapide
  • Pré-requis système minimaliste (pas de base de donnée)
  • Stable et léger

Les -:

  • A vous de gérer la sécurité d'accès à votre service (pas de gestion d'utilisateurs)
  • Interface Web un peu "old school" (Pas de barre de progression "JS" lors de l'upload)
  • Cycle de développement un peu lent (la version 0.6 est en développement depuis juin 2009)

FileZ

FileZ est une très bonne alternative à Jiraphe. Je le place cependant en deuxième position car je trouve qu'installer une base de donnée MySQL pour ce genre de besoin est un peu lourdingue....

Développé initialement par l'université d'Avignon, il est maintenant maintenu sur GitHub par les 2 principaux contributeurs.

La procédure d'installation n'est pas des plus simple, il faut donc y aller étape par étape. Je vous propose donc de vous guider dans le tutoriel suivant:

Installation de FileZ

L'installation est des plus simple et nécessite:

  • un serveur Web Apache avec le support du module mod_rewrite ou Nginx (voir la configuration FileZ pour Nginx dans ce billet)
  • le module PHP doit être activé
  • une base de donnée MySQL pour stocker les informations sur les fichiers et pour gérer l'authentification (il est aussi possible d'utiliser un serveur LDAP pour cette tache)
  • pour une installation depuis GitHub, il faut que le package git-core soit installé sur votre serveur

On commence par créer la base de donnée FileZ:

Ensuite:

Cette commande va créer un répertoire /var/www/FileZ dans le répertoire racine de votre site Web et appliquer les droits pour l'utilisateur www-data (vous pouvez bien sûr adapter cette configuration à vos besoins).

Il faut ensuite se rendre à l'URL: http://votreserveur.com/FileZ

Le wizard d'installation va se lancer et vérifier que les pré-requis de votre serveur sont bons (ce qui serait étonnant). Si ce n'est pas le cas, il faut modifier la configuration de son serveur Web et/ou de PHP.

Note: Si vous utilisez Nginx, FileZ ne trouvera jamais le module mod_rewrite (et pour cause, il n'existe pas de le monde Nginx). Il suffit juste de cliquer sur continuer et d'ignorer le message.

On passe ensuite à la phase de configuration de FileZ en remplissant un formulaire. Vous pouvez vous inspirer de cette configuration en l'adaptant à votre système. La seule chose que j'ai changé est le fait de ne pas utiliser https (pas actif sur mon serveur):

En cas de problème, vous aurez le droit à un message du style:

Dans ce cas, il faut corriger les éventuels problèmes avant de continuer par exemple en créant le répertoire d'Upload:

Puis en donnant les bons droits sur le répertoire de log:

Utilisation de FileZ

Une fois l'installation finalisé on peut accéder à son FileZ:

Mon avis sur FileZ

Les +:

  • Gestion des utilisateurs (droits, mail automatique...)
  • Interface Web agréable

Les -:

  • Installation lourde
  • Pré-requis important (Apache + mod-rewrite, autre module si barre de progression...)
  • Utilisation obligatoire de MySQL

Les autres solutions

Voici un panel des autres solutions que j'ai écarté (peut être à tort mais je n'avais pas le temps de tout tester).

Open Upload

Tout comme FileZ, OpenUpload propose une gestion plus fine des utilisateurs et des accès que Jiraphe. Le plus gros défaut est le manque cruel de documentation claire pour l'installation (même si on cherche sur le Wiki).

ZendTo

Développé par l'université de Southampton, c'est une solution complète. On retrouve également la gestion des utilisateurs et des droits. L'installation est plus complexe que Jiraphe mais le site officiel propose des tutoriels plutôt complets.

Si vous souhaitez élargir l'utilisation de votre service à plusieurs personnes, c'est clairement une solution à regarder.

LinShare

Cette solution semble aussi complète mais je l'ai rapidement écarté en lisant le premier des pré-requis:

"To use Linshare you need to install a suitable JDK..."

Je cherchais une solution légère et pure Web, donc exit LinShare...

Xtrafile

Un dernière solution très bien faite (vous pouvez voir un site de démonstration ici). Elle se base sur un serveur Web / PHP + MySQL. Il existe une procédure d'installation très complète (sur CentOS) sur le forum.

Conclusion

Comme nous avons pu le voir ensemble à travers ce billet, il existe de nombreuses alternatives libres pour échanger simplement des gros fichiers via le navigateur Web.

Utilisez vous une de ces solutions ?

Préférez vous les services en ligne existants (mais non libres) ?

Partagez vos expériences dans les commentaires ci-dessous !

  • Merci pour vos infos ;

  • C’est vrai que j’utilisai jusqu’à maintenant dll.free.fr mais cela va vite changer 🙂

    Merci pour le billet !

  • Je t’avais twitté Filez car je l’utilise depuis un moment en entreprise et il fonctionne très bien

    Merci pour ce billet

  • Pingback: Auto-héberger son service Web de partage de fichiers | High-Tech | Scoop.it()

  • beudbeud

    Il existe DirtyShare ça tourne sous nodejs mais je l’ai pas encore testé.
    https://github.com/Miserlou/DirtyShare

  • SurcouF

    Pourquoi ne pas simplement utiliser WebDAV plutôt qu’une énième interface web ?

  • Un autre outil, qui n’est pas dédié à cela, mais qui propose cette fonctionnalité de manière bien efficace (lien aléatoire, mot de passe et durée de validité) est AjaXplorer: http://ajaxplorer.info/

    • Effectivement il a l’air vraiment bien. Je vais y jeter un coup d’oeil à l’occasion.

      Merci !

  • Djedail

    +1 pour Ajaxplorer

  • Xarkam

    J’utilise aussi Ajaxplorer
    Ca me permet d’accéder aux partages ftp/samba/home
    quant je ne suis pas chez moi/taff.

  • merci de me faire decouvrir zendTO qui a l’air pas mal surtout qu’en lisant la doc on peut utiliser un backend SQL sqlite donc du tout bon

    jusqu’ici dans un contexte d’entreprise j’utilise FileZ qui permet des joyeuseté sympa comme le fait de piocher les user dans un LDAP/AD mais c’est clairement un peu lourdingue pour une utilisation perso 🙂

    @SLiX J’utilise aussi AjaXplorer mais je n’ai jamais vu cete fonctionnalité de partage

    Sinon pourquoi ne pas utiliser aussi owncloud qui propose aussi des fonctionnalités de partage de fichier via URL ? Tu as déjà publié quelques billets a son sujet

    • Dans les versions 3.x, cela s’activait en éditant le fichier de conf, mais depuis les versions 4.x, cela se fait entièrement depuis l’interface Web.

  • Owncloud permet aussi de partager des fichiers avec des liens « publics » au travers d’url complexe mais sans durée de validité ni mot de passe éventuel

  • Perso quand je dois partager un fichier j’utilise HFS (http://check414.free.fr/?p=51) ça tourne aussi sous linux avec wine ou alors http://dl.free.fr

  • Thomas

    j’utilise un outil qui s’appelle hyla. Il est développé par Charles Rincheval, en GPL, respecte les standard et est en français. Sur le forum l’auteur du logiciel répond à vos questions. On aime l’ergonomie ou non, mais le principal, c’est qu’il fasse le boulot.

    http://www.hyla-project.org

  • jbd

    J’utilise F*EX. Ça ne paye pas de mine mais ça fonctionne très bien et le développeur est très sympa.

    Il y a des fonctionnalités très sympa, comme des outils en ligne de commandeou la limitation de bande passante.

    http://fex.rus.uni-stuttgart.de/

  • Salut,
    Ajaxplorer est très bien, c’est vrai. Par contre, ça rentre quand même dans les solutions plus complètes : Ajaxplorer n’est pas qu’une solution de partage de fichiers via des liens, c’est carrément une solution globale pour la gestion de fichiers qui offre la possibilité de partager via des liens.

    Par contre :
    « Je cherchais une solution légère et pure Web, donc exit LinShare… »
    Hum. Il s’agit bien d’une solution web, qui pourra tourner sur un tomcat (grâce à la JDK).

  • Letroll

    Et pourquoi pas Dropcenter : http://dropcenter.fr/
    Je ne l’ai pas essayé mais il a l’air simple et efficace.

    • Essayé, et je confirme, c’est vraiment pas mal – et diablement plus simple que ce qui est proposé dans cet article.

    • Je plussoie, en ayant essayé DropCenter, je trouve qu’il aurait eu sa place dans cet excellent article 🙂

  • Super article !!!!

    j’en réver tu l’a fait, génial !!

    bon par contre le plus gros defaut de l’autohrebgement, c’est qu’en adsl on est limité à 1 MO (théorique donc c’est beaucoup moins), ça risque pas d’être très très long ?

    Et le FBI il vas être content si on donne la possibilité à tout le monde d’être des mega upluoad !!!
    AH ahah !!

  • Laurent

    Excellent billet, merci !

  • Baronsed

    python -m SimpleHTTPServer
    sert le répertoire courant sur le port 8000.

  • Salut,

    J’utilise depuis déjà un an Jyraphe et j’en suis très satisfait. J’ai développé un module pour Jyraphe qui permet de lister les fichiers dépôsés en affichant la taille des fichiers et la date de dépôt. Tout cela de manière sécurisée, si ça intéresse quelqu’un.

    La solution alternative FileZ a l’air pas mal je vais la tester !

    Merci 🙂

    A plus,

  • willow
  • Pingback: Auto-héberger son service Web de partage de fichiers | LorfDotNet()

  • Uggy
  • Pingback: Nono’s Vrac 66 « m0le'o'blog()

  • J’utilise Jyraphe, et en lisant ton comparatif je n’imagine pas migrer sur un autre. Les avantages de Jyraphe ? Ca marche sur les serveurs de faible puissance car il n’y a pas besoin de base MySQL, pas d’opérations complexes, etc. C’est simple, ça fait son boulot, point.

    A noter que la version de développement introduit des URL beaucoup plus courtes pour les téléchargements, car à l’heure actuelle elles font plusieurs kilomètres alors que ça n’est pas forcément justifié.

  • Je conseille fortement FileZ qui est un excellent outil. Pas simple, c’est vrai, au départ mais efficace à l’arrivée.

  • shiningfm

    Super, merci pour cet article !
    Cependant j’aimerais préciser que mysql n’est pas nécessaire pour filez : on peut utiliser sqlite. C’est vrai que l’installation est un peu lourde quand même mais du coup, avec la gestion des utilisateurs, c’est un bon outi !

  • +1 pour Filez que je viens de mettre en oeuvre sur un Kimsufi. Marche impec. Ceci dit, effectivement l’installation n’est pas des plus simple et il faut ajouter « a la mano » les utlisateurs dans mysql.
    Merci pour cet article Nico

  • Majoux

    J’utilise jyraphe depuis très longtemps et j’en suis très content.
    Bien sur je l’ai customisé avec mes templates !

  • lpe

    Bonjour, merci pour l’article qui a été le début d’une longue journée d’administration système. Après avoir tout passé en revue il est ressortit que beaucoup de c’est projets était à l’arrêt parfois depuis plusieurs années.

    Mon choix c’est donc porté sur ZendTo (dernière version beta en mai 2012). C’est vraiment sympa mais pour un bidouilleur comme moi niveau intermédiaire 12h pour avoir un truc 100% fonctionnel sur une debian leny.

    Bon courage!

    • Si tu veux partager ton installation de ZendTo sur Debian, tu peux écrires un billet invité sur le blog (me contacter par mail: contact {a} nicolargo {dot} com).

  • Yezarath

    Il y a aussi DropCenter (http://dropcenter.fr/) (Je sais pas si sa censure les lignes :p) Qui permet de faire un résultat similaire avec un petit plus, un petit logiciel fonctionnant sous WinDobe (je crois) qui permet de voir en temps réel quand un user a glisser quelque chose dans votre cloud :P.

    • Je sais et j’ai comme action de faire un billet sur le sujet dès que j’ai un peu de temps…

      • Yezarath

        Ah sympa :O C’est similaire a Filez mais avec une installation instantanée pratique pour les néophytes ^^.

  • Bonjour,

    Faut que je garde cette liste dans mes bookmarks, ça peut toujours être intéressant d’avoir une liste de solutions user-friendly via le protocole HTTP 😉

    Par contre, j’ai un petit doute sur un point : les utilisateurs « normaux » sont ils réellement tous capables d’uploader sans difficulté des gros fichiers dont la taille se compte en giga ? Je veux dire, une bonne partie pourrait ne pas deviner qu’il faut mieux bien brancher le câble ethernet, à moins d’avoir une connexion wifi très très fiable durant toute la durée de l’upload…

    Personnellement, rien que pour ça, je préfère les « vrais » protocoles comme rsync 😉 Y a t-il des bonnes solutions en stock qui mixent les deux ?

    • Pierre

      L’avantage du http c’est de pouvoir s’installer chez des hebergeurs du style : http://www.o2switch.fr avec un espace de stockage illimité. Le rsync n’est alors pas possible (meme s’ils activent le ssh pour une ip publique je crois)

  • Aldo

    Dans le même style il y a elfinder qui est pas mal
    il fait en quelque sorte gallerie photo basique
    pas besoin de base de donnée
    http://elfinder.org/

  • yann

    Mouais… du « simple » qui oblige a avoir un serveur HTTP (à la sécurité difficile à assurer) voire une BDD pour juste servir des fichiers…

    Bon, y’a quand même des protocoles adaptés pour ça. Sous Linux, SSH permet désormais de servir un serveur SFTP only chrootable facilement pour un utilisateur « partage » a qui on ne veut pas donner un shell. Couplé a qq règles iptables (ou un fail2ban pour un truc un peu plus malin) pour décourager les bruteforcer, c’est quand même mieux. Bon, faut se coller aussi un domaine dyndns impérativement si on n’est pas en IP fixe, mais ca reste moins complexe que l’usine à gaz d’un serveur HTTP et du site de partage construit dessus.

    Ouais, ca oblige à installer un client sous windows… mais un winscp, c’est pas si compliqué quand même! C’est même la seule « complexité côté client.

    En prime ce qui transite sur le réseau est chiffré.

    Le seule véritable emmerdement? Ces boites qui filtrent le SSH en sortie, empêchant de rentrer chez soi du boulot. Mais bon, les proxy/firewalls opérés par des cons qui ne veulent voir passer que du HTTP, ca se baise: En général, un ssh qui écoute sur port 80 en plus du 22, un proxytunnel… au pire, le serveur modifié qui sert une « fortune » en banière pour les cons du dessus qui le sont un poil moins que les autres et ont ajouté la banière openSSH, qui passe avant l’ouverture du canal chiffré, dans les signatures de leur IDS de merde!

    Là, ils vont pouvoir justifier leur salaire et en ajouter une à chaque connection! o:)

  • jbeauvois

    Le projet jyraphe evolue en jirafeau > https://gitorious.org/jirafeau