Dans ce post je vais vous expliquer comment est-ce que j’ai fais l’installation de FreshRSS dans mon infrastructure. Tout d’abord FreshRSS est un agrégateur de liens RSS, celui-ci nous permet donc de centraliser toutes les news des sites d’actualités qui nous intéresse du moment qu’ils fournissent un lien de type RSS. Pour l’installer on a différent moyens possibles, on peut l’installer depuis les sources en brut sur la machine, ou utiliser une VM et faire la même chose. Ou utilisé Docker donc des conteneurs.

Installation et configuration

Docker

Pour installer Docker et Docker compose veuillez faire ces commandes sur un système Debian (De préférence la dernière version distribuée par Debian) :

mkdir /root/.docker
echo "{}" > /root/.docker/config.json

apt install -y curl gnupg lsb-release vim rsync btrfs-progs
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker

Création d’un utilisateur dédié

Ici l’installation est faite directement en root, pour des raisons de sécurités utilisez un utilisateur dédié pour Docker :

usermod -aG wheel,docker myuser
su - myuser
mkdir /home/myuser/.docker
echo "{}" > /home/myuser/.docker/config.json

Essai

Pour vérifier si Docker est bien installer faites cette commande :

docker run hello-world

Installation de FreshRSS

Pour installer FreshRSS, j’utilise Docker compose, il lui faut une base de donnée pour fonctionner. J’utilise un conteneur avec MariaDB. Pour se faire on va créer plusieurs dossier et le fichier docker-compose.yml :

mkdir Docker && mkdir Docker/applications && touch docker-compose.yml
cd Docker

Maintenant on vient configurer nos conteneurs, voici le fichier docker-compose.yml au complet :

version: "3.9"
services:
  freshrss:
    image: lscr.io/linuxserver/freshrss:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - ./applications/freshrss:/config
    restart: always
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
     - internet
     - no-internet
  
  mariadb:
    image: lscr.io/linuxserver/mariadb:latest
    environment:
      - PUID=1000
      - PGID=1000
      - "MYSQL_ROOT_PASSWORD=MYSQLROOTPASSWORD"
      - TZ=Europe/Paris
    volumes:
      - ./applications/databases/mariadb:/config
    restart: always
    networks:
      - no-internet

  watchtower:
    image: containrrr/watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    command: --label-enable --cleanup --interval 300
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    
networks:
  no-internet:
    driver: bridge
    internal: true
  internet:
    driver: bridge
    enable_ipv6: true
    ipam:
      config:
        - subnet: "fd00:dead:beef::/48"

Ici, vous avez uniquement la configuration côté conteneurs. Vous devez avoir un serveur web avec un reverse proxy comme NGINX ou Apache. Personnellement j’utilise NGINX, voici ma configuration :

server {
	listen 8443 ssl;
        listen [::]:8443 ssl;

        http2  on;

	server_name rss.patchli.fr;

	access_log /var/log/nginx/patchli.fr/freshrss/access.log;
	error_log /var/log/nginx/patchli.fr/freshrss/error.log;

	ssl_certificate /etc/nginx/ssl/patchli.fr_ecc/fullchain.cer;
	ssl_certificate_key /etc/nginx/ssl/patchli.fr_ecc/patchli.fr.key;
	ssl_stapling_file /etc/nginx/ocsp_staple/patchli.fr_ecc.der;

	include includes/custom_error_pages.conf;
	include includes/common_headers.conf;
	include includes/HSTS-preload.conf;

	set $upstream freshrss:80;

	location / {
		proxy_pass http://$upstream;
		proxy_hide_header X-Powered-By;
	}
}

server {
	listen 8080;
	listen [::]:8080;
	server_name rss.patchli.fr;
	return 301 https://$server_name$request_uri;
}

Cette configuration est celle que j’utilise sur mon second reverse proxy (SAKUYA). Et maintenant, voici la configuration utilisée sur mon premier reverse proxy (YOHANE) :

server {
    listen 8443 ssl;
    listen [::]:8443 ssl;

    http2  on;

	server_name rss.patchli.fr;

	access_log /var/log/nginx/frieren/rss/access.log;
	error_log /var/log/nginx/frieren/rss/error.log;

	ssl_certificate /etc/nginx/ssl/patchli.fr_ecc/fullchain.cer;
	ssl_certificate_key /etc/nginx/ssl/patchli.fr_ecc/patchli.fr.key;
	ssl_stapling_file /etc/nginx/ocsp_staple/patchli.fr_ecc.der;

	include includes/custom_error_pages.conf;
	include includes/common_headers.conf;
	include includes/HSTS-preload.conf;

	set $upstream 10.0.0.2:443;

	location / {
		proxy_pass https://$upstream;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 2;
        proxy_ssl_server_name on;
        proxy_ssl_name rss.patchli.fr;
        proxy_set_header Host rss.patchli.fr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_ssl_protocols TLSv1.3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_ssl_session_reuse on;
		proxy_hide_header X-Powered-By;
	}

}
server {
	listen 8080;
	listen [::]:8080;
	server_name rss.patchli.fr;
	return 301 https://$server_name$request_uri;
}

Après ça, vous pouvez vous connecter à FreshRSS depuis NGINX Vous devez connecter la base de données MariaDB au FreshRSS, puis vous pouvez enfin créer votre compte admin et gérer FreshRSS et rajouter des flux RSS.