Installer Snowy, gardien de vos post-its en ligne (debian+lighttpd)

Snowy est un serveur de notes, cela permet de partager des prises de notes genre post-it entre plusieurs machines, fixes ou mobiles et un site web. Idéal pour vos TODO et autres listes de trucs à procrastiner sans les oublier pour autant… etc.

Ce service peut se substituer à la fonctionnalité "liste de tâches" de gmail (et va bien au-delà).

Le présent billet explique comment installer et configurer son propre serveur Snowy sous Debian avec le serveur web lighttpd.

À l'origine, Snowy a été conçu pour fonctionner avec le logiciel de prise/gestion de notes de bureau TomBoy. Désormais, plusieurs logiciels sur différentes plateformes sont capables de communiquer avec Snowy5 :

  • Tomboy : GNU/Linux, *BSD, OSX, Windows ;
  • Tomdroid pour Android (client lecture seule) ;
  • Conboy : client pour maemo (Nokia n900 et consorts) ;
  • Snowy lui-même offre une interface web pour parcourir les notes en lecture seule.

1. Installation de Snowy

Ici le but est d'auto-héberger son propre serveur de notes pour garder ses notes chez-soi. La configuration de l'installation est la suivante :

  • Debian stable (squeeze) ;
  • Lighttpd comme serveur web;
  • Installation dans /var/www/snowy.example.net/ ;
  • Le service sera accessible au domaine snowy.example.net**.

Pour d'autres configurations, reluquez plutôt la documentation officielle en anglais.

Snowy est encore considéré comme en développement ; à mes yeux il présente pourtant des signes de maturité : ça juste-marche, les APIs sont stables et l'installation n'est pas trop galère.

Dépendances

Toutes les dépendances sont disponibles sous forme de paquets, les versions des logiciels présentes dans Debian stable font l'affaire2 :

# apt-get install python-lxml python-sqlite python-dateutil python-pkg-resources python-json python-openid python-tz python-django

Installer Snowy

Récupérer le code du logiciel :

# mkdir /var/www/snowy.example.net/
# cd /var/www/snowy.example.net/
# git clone git://git.gnome.org/snowy
# cp snowy/local_settings.py.in snowy/local_settings.py
# chown -R www-data:www-data snowy/snowy.db

Il faut ensuite initialiser la base de données1 :

# python manage.py syncdb

Accepter de créer un nouvel utilisateur et lui choisir un mot de passe.

Configuration de lighttpd

On choisit pour des raisons de performances de faire tourner Snowy via un FastCGI.

Il faut pour cela fournir un petit script .fcgi qui n'est pas dans les sources de snowy :

# cd /var/www/snowy.example.net/
# wget http://hackriculture.fr/media/snowy.fcgi
# chmod +x snowy.fcgi

Il est ensuite nécessaire d'utiliser un fichier de configuration pour lighttpd.

# nano /etc/lighttpd/conf-available/65-snowy.conf

Puis y placer le code suivant (en prenant soin d'adapter les occurrences de snowy.example.net).

#
## Snowy FastCGI
#                                                                                                                                                  $HTTP["host"] == "snowy.example.net" {
    url.rewrite-once = (
        "^/(?!(stats|site_media|media)).*$" => "/snowy.fcgi$0"
    )

    alias.url = (
        "/site_media/" => "/var/www/snowy.example.net/snowy/site_media/",
        "/media/"      => "/usr/share/pyshared/django/contrib/admin/media/",
    )

    fastcgi.server = (
        "/snowy.fcgi" => ((
            "bin-path"     => "/var/www/snowy.example.net/snowy/snowy.fcgi",
            "socket"       => "/tmp/snowy.sock",
            "check-local"  => "disable",
        )),
    )
}

Activer le site :

# lighty-enable-mod snowy
# /etc/init.d/lighttpd restart

Normalement à ce point, si vous pointez un navigateur web sur l'adresse de votre snowy (ex: http://snowy.example.net), vous devriez voir la page d'accueil de Snowy.

Configuration de Snowy

Reste quelques détails avant que Snowy soit pleinement fonctionnel, éditer le fichier de configuration :

# nano local_settings.py
  1. Décommenter la ligne suivante à moins de vouloir faire un serveur public (création de compte libre) :
    MODERATE_NEW_USERS = True
  2. Ajouter la ligne suivante dans local_settings.py pour avoir des URLs potables :
    FORCE_SCRIPT_NAME = ''
  3. Éventuellement changer dans local_settings.py pour utiliser https (recommandé), décommenter :
    URI_SCHEME = 'https'
  4. Sauvegarder puis on appliquer le tout :
    # /etc/init.d/lighttpd restart
    Enfin, il faut ajuster le nom de domaine et le nom affiché à l'adresse https://< votre-installation-snowy >/admin/sites/site/1/

2. Configuration de Tomboy

Synchroniser une instance de TomBoy permet de vérifier que tout fonctionne bien. Même les versions assez anciennes3 de tomboy (la 1.3 présente dans Debian stable par exemple) supportent snowy.

Si ça n'est pas encore fait :

# apt-get install tomboy
  1. Dans les préférences de Tomboy, onglet synchronisation, choisir le service "Site web de Tomboy"
  2. Cliquer sur "Connexion au serveur"
  3. Autoriser la connexion dans la page web qui devrait s'ouvrir4

Dans le champ serveur mettre l'URL du service fraîchement installé (ex: https://snowy.example.net), pensez au https si vous avez configuré le service comme tel.

…Ayé !, vous pouver coller des petits papiers jaunes partout sur votre petit nuage !

Perspectives

Snowy me semble, en plus d'être pratique, un logiciel pas encore fini mais qui va dans le bon sens :

  • Basé sur des protocoles ouverts et pratiques (OAuth, OpenID) ;
  • Les protocoles et formats "maison" de Tomboy sont ouverts, les APIs sont stables… résultat, d'autres logiciels les réutilisent de manière interopérable ;
  • Il ne fait pas l'économie d'une interface web agréable (et les améliorations d'interface sont pensées… bien qu’apparemment en standby actuellement :-/);
  • Même si tomboy propose un service de stockage des notes, l'accent est mis, via Snowy sur l'opportunité de monter son propre service facilement ;
  • Tomboy est un logiciel rôdé (malgré qu'il se traine Mono…).

Il reste beaucoup à faire (amélioration de l'interface, interface d'édition, interface mobile…). Ça serait dommage que ça s'arête là, non ? motivés ? au boulot !

Références


  1. Par défaut, snowy utilise une base sqlite3, vous pouvez choisir une autre base de données en éditant local_settings.py avant de lancer la commande syncdb 

  2. …et vu que Debian stable est généralement considérée comme la plus "obsolète" des distributions, il y a bien des chances que ça fonctionne pour votre distribution favorite également… 

  3. Par contre, pour deboguer, les messages d'erreurs ne sont pas terribles ; lancer tomboy dans un terminal peut aider… 

  4. Si vous êtes curieux, sous le capot, c'est OAuth qui est utilisé, chaque instance de TomBoy synchronisée se voit attribuer une clé d'accès propre à elle-même lors du premier accès, cela évite de sauvegarder/retenir des mots de passe et permet de couper l'accès à une instance sans devoir changer de mot de passe. 

  5. Comme quoi faire des APIs et des formats de fichier stables et documentés, ça marche !