J’adore les listes, elles permettent d'ordonner le monde. Et quand le monde est ordonné, je vais mieux.

Voici donc la liste des services publiquement accessibles dans mon univers informagique, les gestionnaires de contenu que j’héberge sur ma petite parcelle de l'Internet — et en lien, si j’y pense et si elles sont toujours d'actualité, les bafouilles que j'ai pu commettre à leur propos ou, en commentaire, quelques indications quant au déploiement des services présentés si j'estime qu'un renvoi à la documentation officielle ne suffit pas.

Debian

Debian logo

La machine que je loue tourne sous Debian (d'abord Wheezy, puis Jessie). J’ai un VPS en location chez DediShops a un prix raisonnable, dont l’installation est détaillée dans cet article.

Quand les programmes que j’utilise s’y prêtent, comme des services en node.js, j’utilise le programme Supervisor ; il suffira de retourner à ce dernier article pour jeter un œil à l'ensemble de mes fichiers de configuration.

Ghost

Ghost logo

D’abord longtemps propulsé par WordPress, mon carnet quelque peu laissé à l’abandon prenait trop de place à mon goût. Je l’ai démantelé pour le migrer vers Ghostà l’instar de Loïc duquel j’ai suivi le mouvement.

Le thème que j'utilise est une version modifiée — un fork — de Ghostwriter ; j'expose les raisons de mon fork dans cet article.

Long story short, mon fork a été créé pour que les polices utilisées par le thème proviennent de mon propre serveur et non d'ailleurs (Google Fonts en l’occurrence). J'en ai profité pour mettre à jour les dépendances du thème, faire quelques ajouts typographiques, et intégrer un service de commentaires dont je parle plus bas.

Le fichier de configuration du service supervisor est le suivant :

[program:ghost]
command = node /path/to/ghost/index.js
directory = /path/to/ghost
user = ghost
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ghost.log
stderr_logfile = /var/log/supervisor/ghost_err.log
environment = NODE_ENV="production"

Pour mettre à jour Ghost, un simple alias que je lance depuis l'invite de commande de mon serveur. J'ai placé ceci dans la configuration de mon invite de commande (.zshrc ou .bashrc) :

alias update-ghost='sudo su ghost -c "cd /path/to/ghost; rm -rf core/; wget http://ghost.org/zip/ghost-latest.zip; unzip -uo ghost-latest.zip -d /path/to/ghost; npm install --production; npm update --production; rm ghost-latest.zip"; sudo supervisorctl restart ghost'

GNU social

GNU social logo

D'abord utilisateur de StatusNet, j'ai suivi le mouvement de versement du code au sein de la Free Software Foundation pour passer à GNU social.

Après l'abandon de StatusNet par Evan Prodromou (qui maintenant s'amuse avec pump.io), le développement a repris avec GNU social, supervisé par Mikael Nordfelth. Une tripotée de bugs qui étaient restés en suspend ont été corrigés, d'autres ont évidemment été créés dans la foulée et une version stable tarde à apparaître.

En bref, on aurait pu croire à la mort du projet suite au changement de crèmerie, que le passage de StatusNet à Pump.io pour le nœud principal (identi.ca) aurait tué la communauté autour de StatusNet / GNU social, mais il n'en a rien été : la communauté est active, quoique évidemment désordonnée et éclatée entre serveurs plus ou moins peuplés, ce qui fait partie de l'identité de ce réseau.

Notons toutefois la tendance à l'esprit de ruche des néophytes, qui se ruent tout·e·s sur les mêmes points (quitter.se, par exemple), au détriment d'une d'une répartition raisonnée de la charge sur différents serveurs n'engendrant pas un problème endémique de surcharge pondérale de certains serveurs par rapport à d'autres, complique la maintenance, augmente les besoins d'infrastructure, etc.

Pour une idée de configuration, voir ce fichier commenté par mes soins, basé sur la configuration de mon instance Herds :

<?php
if (!defined('GNUSOCIAL')) { exit(1); }

$config['site']['name'] = 'Name';
$config['site']['server'] = 'server.domain';
$config['site']['path'] = false;
$config['site']['ssl'] = 'always';
$config['site']['fancy'] = true;
$config['site']['profile'] = 'community';
// Source: https://github.com/hannesmannerheim/neo-quitter
$config['site']['theme'] = 'neo-quitter';

// Misc. plugins
addPlugin('ImageMagick'); // GIF support
addPlugin('VideoThumbnails'); // Video thumbnails support
$config['oldschool']['enabled'] = true;
$config['performance']['high'] = true; // Disable trending topics

// Database
$config['db']['database'] = 'mysqli://zzzzz:yyyyy@wwwww/xxxxx';
$config['db']['type'] = 'mysql';
$config['db']['schemacheck'] = 'script';

// XMPP
// Doc: https://gitorious.org/social/mainline/trees/master/plugins/Xmpp/README
addPlugin('Xmpp', array(
    'user'      => 'user',
    'server'    => 'server.domain',
    'password'  => 'xxxxx',
));

// Qvitter
// Source: https://github.com/hannesmannerheim/qvitter
addPlugin('Qvitter');
$config['site']['qvitter']['enabledbydefault'] = true;
$config['site']['qvitter']['defaultbackgroundcolor'] = '#f4f4f4';
$config['site']['qvitter']['defaultlinkcolor'] = '#a22430';
$config['site']['qvitter']['timebetweenpolling'] = 5000;
$config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/yourls-api.php';
$config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983';
$config['site']['qvitter']['sitebackground'] = 'img/vagnsmossen.jpg';
$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4';
$config['site']['qvitter']['enablewelcometext'] = false;
$config['site']['qvitter']['blocked_ips'] = array();
$config['thumbnail']['maxsize'] = 3000;

// Twitter
// Doc: https://gitorious.org/social/mainline/trees/master/plugins/TwitterBridge/README
addPlugin('TwitterBridge');
$config['twitterimport']['enabled'] = true;
$config['twitter']['signin'] = false;

// Queue
unset($config['plugins']['default']['OpportunisticQM']);
unset($config['plugins']['core']['Cronish']);
$config['queue']['enabled'] = true;
$config['queue']['daemon'] = true;
$config['queue']['subsystem'] = 'db';
$config['daemon']['piddir'] = '/path/to/piddir';
$config['daemon']['user'] = 'user';
$config['daemon']['group'] = 'group';

Jappix

Jappix logo

Couplé à un serveur Prosody installé sur ma Debian, j'utilise moins Jappix pour sa fonction de réseau social qu'en guise de dépannage : quand je suis sur un machine qui n'est pas la mienne (donc bien souvent dépourvue de client de messagerie compatible XMPP) ou quand je suis sur un réseau bloquant les connections XMPP (comme mon réseau universitaire).

En somme, j'utilise Jappix comme client web pour XMPP, celui-ci ne consommant pas beaucoup de place, me permettant de lier une interface à des salons de discussion, et le tout ne nécessitant que très peu de configuration des bases de données, grâce à SQLite, par rapport à Movim par exemple (à qui il faut au moins du MySQL, donc quelque chose qui met quelques minutes de plus à être configuré, et je suis fainéant).

GNU MediaGoblin

The goblin

Que j'y accède depuis le client sous Android ou via l'interface web, je suis très content de cette galerie certes plus lourde que MiniGal et d'autres, mais intégrant un support des fichiers audio, vidéo, PDF, images RAW, ... dont je ne pourrais me passer maintenant.

Les processus liés à MediaGoblin sont également lancés via supervisor, et placés dans un groupe afin de pouvoir interagir avec les deux en même temps.

[program:celeryd]
command = /path/to/mediagoblin/bin/celery worker -l error
directory = /path/to/mediagoblin
user = mediagoblin
autostart = true
autorestart = true

; uncomment below to enable logs saving
stdout_logfile = /var/log/supervisor/mediagoblin-celeryd.log
stderr_logfile = /var/log/supervisor/mediagoblin-celeryd_err.log

; Set PYTHONPATH to the directory containing celeryconfig.py
environment=PYTHONPATH="/path/to/mediagoblin",MEDIAGOBLIN_CONFIG="/path/to/mediagoblin/mediagoblin_local.ini",CELERY_CONFIG_MODULE="mediagoblin.init.celery.from_celery"
startsecs=10
numprocs=1

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

[program:paster]
command = /path/to/mediagoblin/bin/paster serve /path/to/mediagoblin/paste.ini --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
directory = /path/to/mediagoblin
user = mediagoblin
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/mediagoblin-paster.log
stderr_logfile = /var/log/supervisor/mediagoblin-paster_err.log
environment = CELERY_ALWAYS_EAGER=false

[group:mediagoblin]
programs=celeryd,paster

Pour mettre à jour MediaGoblin :

alias update-mediagoblin='sudo su mediagoblin -c "cd /path/to/mediagoblin; git pull -u; git submodule update; ./bin/python setup.py develop --upgrade; ./bin/gmg dbupdate"; sudo supervisorctl restart mediagoblin:'

Hastebin

Plateforme de libre collage propulsée par haste-server dont j'ai présenté ici l'installation sur une Debian Squeeze (à adapter pour Wheezy ou Jessie, évidemment).

Je m'en sers surtout pour y lancer du code, des fichiers de configuration, des logs, depuis la ligne avec haste-client. Pour que la commande haste contacte mon serveur et pas la maison-mère hastebin, il suffit d'ajouter à .bashrc, .zshrc ou quel que soit le fichier de configuration de l'invite de commande et ajouter :

export HASTE_SERVER=http://bin.postblue.info

En ce qui concerne le lancement du service :

[program:haste]
command = node /path/to/haste/server.js
directory = /path/to/haste
user = haste
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/haste.log
stderr_logfile = /var/log/supervisor/haste_err.log

Pour mettre à jour Haste :

alias update-haste='sudo su haste -c "cd /path/to/haste; git pull -u; npm install; npm update"; sudo supervisorctl restart haste'

EtherPad Lite

Très utile pour quand il me faut travailler sur un projet académique en groupe, EtherPad Lite tourne sans problème : peu de plugins installés, une mise à jour de temps en temps, Abiword installé et configuré pour l'import de fichiers, ... bref ça dépanne et ça le fait bien.

[program:etherpad]
command = node /path/to/etherpad/node_modules/ep_etherpad-lite/node/server.js
directory = /path/to/etherpad
user = etherpad
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/etherpad.log
stderr_logfile = /var/log/supervisor/etherpad_err.log

Pour mettre à jour Etherpad Lite :

alias udpate-etherpad='sudo su etherpad -c "cd /path/to/etherpad; git pull -u; ./bin/installDeps.sh; npm update"; sudo supervisorctl restart etherpad'

FreshRSS

FreshRSS

Après avoir utilisé RSSLounge puis Selfoss, j'ai décidé d'essayer FreshRSS. Très complet, il n'en est pas moins très léger.

Rien à en dire si ce n'est que je suis très content de la légèreté et de la souplesse de l'outil. FreshRSS fait son boulot et le fait très bien, se mettant à jour de lui-même en suivant un canal git.

Autoblog

Les gouvernements, organisations et entreprises mettent de plus en plus de pression légale, morale et financière sur les citoyens, entravant leur liberté d'expression. Des sites connus comme Wikileaks bénéficient facilement de l'effet Streisand, mais c'est rarement le cas des sites plus petits. Mais l'information doit circuler. Le projet autoblog a pour but d'aider à répliquer automatiquement les articles partout sur le web, bien sûr à une échelle plus modeste que ce qui a été fait pour Wikileaks. Voyez cela comme un effet Streisand automatisé. (source)

J'utilise la version 0.3 de mitsukarenai dont le code est disponible sur GitHub, qui ajoute. On peut retrouver mon instance à cette adresse.

H5ai

Baikal