Pourquoi auto-héberger FreshRSS sur un VPS
FreshRSS est un agrégateur de flux RSS/Atom écrit en PHP, conçu pour être discret en ressources tout en gérant des milliers d'articles. Le self-hosting sur VPS résout trois problèmes que les services fermés ne traitent pas : la pérennité (votre veille ne disparaît pas du jour au lendemain), la confidentialité (personne ne profile vos abonnements) et la fraîcheur (vous définissez la fréquence de rafraîchissement via cron, sans quota imposé). Un VPS, contrairement à un hébergement mutualisé, vous donne un accès SSH complet, le droit de lancer un conteneur Docker et de planifier des tâches — exactement ce dont FreshRSS a besoin pour rafraîchir les flux en arrière-plan.
Bénéfices concrets du FreshRSS auto-hébergé
- API native compatible Fever et Google Reader : synchronisez avec Reeder, FeedMe ou Fluent Reader sur mobile.
- Extension GReader / scraping : récupérez le contenu complet d'articles tronqués grâce aux filtres XPath.
- Multi-utilisateurs avec quotas par compte : idéal pour partager une instance au sein d'une agence.
- Empreinte mémoire minime (200 à 300 Mo) : tourne sur le plus petit des VPS sans broncher.
- Rafraîchissement piloté par cron : vous décidez si les flux se mettent à jour toutes les 5 minutes ou toutes les heures.
- Sauvegarde triviale : une base SQLite/MySQL et un dossier de données suffisent à tout restaurer.
Prérequis techniques
FreshRSS est l'une des applications les plus frugales du self-hosting. Comptez 1 vCPU et 1 Go de RAM pour une instance personnelle à quelques utilisateurs ; 10 Go de disque suffisent largement, l'essentiel étant occupé par l'historique d'articles. Côté logiciel : Docker et le plugin Docker Compose installés sur le VPS, un nom de domaine (ou sous-domaine type rss.votredomaine.ma) pointé en A vers l'IP du serveur, et un port 80/443 ouvert pour le reverse proxy. PHP n'a pas à être installé sur l'hôte : l'image officielle freshrss/freshrss embarque tout.
Déployer FreshRSS pas à pas
Préparer le VPS et Docker
Connectez-vous en SSH, mettez à jour le système puis installez Docker : curl -fsSL https://get.docker.com | sh. Vérifiez avec docker compose version. Créez un dossier projet mkdir -p /opt/freshrss && cd /opt/freshrss.
Écrire le docker-compose.yml
Définissez un service à partir de l'image freshrss/freshrss:latest, montez deux volumes (./data:/var/www/FreshRSS/data et ./extensions:/var/www/FreshRSS/extensions) et fixez CRON_MIN=*/20 pour rafraîchir les flux toutes les 20 minutes. Exposez le port interne 80 uniquement vers le reverse proxy, pas vers l'extérieur.
Lancer le conteneur
Démarrez la stack avec docker compose up -d, puis suivez l'initialisation via docker compose logs -f. Le conteneur applique les migrations et crée l'arborescence de données au premier démarrage.
Mettre en place le reverse proxy et le SSL
Placez un reverse proxy (Caddy ou Nginx Proxy Manager) devant FreshRSS. Avec Caddy, deux lignes suffisent : rss.votredomaine.ma { reverse_proxy freshrss:80 } et le certificat Let's Encrypt est obtenu et renouvelé automatiquement.
Terminer l'installation web
Ouvrez https://rss.votredomaine.ma, choisissez le backend de base (SQLite pour un usage perso, MySQL/PostgreSQL pour plusieurs utilisateurs), créez le compte administrateur et activez l'API dans Profil pour la synchronisation mobile.
Importer vos flux et fiabiliser le cron
Importez votre OPML existant depuis l'ancien lecteur. Vérifiez que le job interne tourne avec docker compose exec freshrss ./cli/actualize.php lancé manuellement une première fois pour valider la récupération des articles.
Pour les sites qui ne publient qu'un extrait dans leur flux, installez l'extension officielle « FreshRSS Content Selector » : configurez un sélecteur CSS (ex : article.post-content) par abonnement et FreshRSS ira récupérer le texte intégral à chaque rafraîchissement. Combinez-la avec l'extension de filtres pour masquer automatiquement les articles sponsorisés détectés par mot-clé.