Goals

The operation of a local FreshRSS server is actually quite simple and once this part is complete, a complete FreshRSS server can be accessed on the local network. Basically it is a classic web server, PHP application.

NEW: For the very impatient I have a "console only" section. There are only commands, no explanations.

Last update:

  • 07.09.2024: Initial document

Requirements

  • TrueNAS Core or pure FreeBSD server
    • IP address of the jail is known and preferably reserved in DHCP
    • Hostname of the jail is known (e.g. rss.domain.local) and accessible via internal DNS

Diagram

The setup including all optional possibilities looks like this:

                   ┌──────────────────────────────────────────────────────┐
                   │  TrueNAS                   Optional:                 │
                   │ ┌───────────────────────┐ ┌────────────────────────┐ │
                   │ │ jail/rss              │ │ jails_data/rss         │ │
                   │ │   tt-rss (php) ───────┼─┼─► backup               │ │
                   │ │     ▲                 │ │   conf                 │ │
LAN: 0.0.0.0:443 ──┼─┼─► nginx               │ │   data                 │ │
                   │ └───────────────────────┘ └────────────────────────┘ │
                   └──────────────────────────────────────────────────────┘

Create jail

You need your own jail. Here we take rss as jail name.

Optional: Data directories

How certain data directories are stored outside the jail is explained here.
The following directories are required:

└── /mnt/tank/jails_data
  └── rss
    ├── backup # Storage for backups (in jail: /mnt/backup)
    ├── conf # Storage for configuration files (in the jail: /mnt/conf)
    └── data # Storage for the data in FreshRSS (in the jail: /mnt/data)

Set up jail

Login to the jail via SSH: ssh USERNAME@IP or ssh USERNAME@HOSTNAME to gain root rights with su.

Customize package source

Package sources should be customized, see separate article!

Nginx

Nginx and PHP must already be installed, see separate article!

Create configuration

The Nginx configuration is created in a separate file for better administration:

  • /usr/local/etc/nginx/conf.d/freshrss.conf = FreshRSS configuration for Nginx

Optional: Set symlink to refer to the configuration in /mnt/conf/: ln -sf /mnt/conf/freshrss.conf /usr/local/etc/nginx/conf.d/freshrss.conf

cat > /usr/local/etc/nginx/conf.d/freshrss.conf << 'EOF'
server {
 listen 443 ssl;
 http2 on;
 root /usr/local/www/FreshRSS;
 index index.php index.html;
 location ~ \.php$ {
  include fastcgi_params;
  set $path_info $fastcgi_path_info;
  fastcgi_split_path_info ^(/.+\.php)(/.*)?$;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_param PATH_INFO $path_info;
  fastcgi_pass php-handler;
 }
}
'EOF'

FreshRSS

Install packages & activate services

Now update the package source with pkg update and install further PHP modules required by FreshRSS: pkg install -y git php84-curl php84-fileinfo php84-zip php84-intl php84-mbstring

Customize path

Optional: Set symlink to point to the complete FreshRSS directory in /mnt/data/: ln -sf /mnt/data/FreshRSS /usr/local/www/FreshRSS

Installation

cd /usr/local/www/FreshRSS
git init && git remote add origin https://github.com/FreshRSS/FreshRSS.git && git pull origin edge
chown -R www:www /usr/local/www/FreshRSS/

Start services

We have now reached the end of the preparations and all services can now be started with service php_fpm restart && service nginx restart.

The "FreshRSS" website can now be opened.
The installation wizard is run through the first time. This is largely self-explanatory, it is only important to select SQLITE as the database.

Console

OPTIONAL = Only execute if the configuration is outside the jail INITIAL = Only execute during initial installation or if the configuration is not outside the jail

pkg update
pkg install -y git php84-curl php84-fileinfo php84-zip php84-intl php84-mbstring
OPTIONAL: ln -sf /mnt/conf/freshrss.conf /usr/local/etc/nginx/conf.d/freshrss.conf
OPTIONAL: ln -sf /mnt/data/FreshRSS /usr/local/www/FreshRSS
INITIAL: fetch https://raw.githubusercontent.com/marzlberger/bsdbox/main/freshrss/freshrss.conf -o /usr/local/etc/nginx/conf.d/freshrss.conf
cd /usr/local/www/FreshRSS
git init && git remote add origin https://github.com/FreshRSS/FreshRSS.git && git pull origin edge
chown -R www:www /usr/local/www/FreshRSS/
service php_fpm restart && service nginx restart