Save this as compose.yaml in an empty directory, then run the commands below. Keep the frirss-data directory: it holds your instance data.
compose.yaml
services:
frirss:
image: ghcr.io/fripix/frirss:latest
container_name: frirss
ports:
- "8080:80"
volumes:
- ./frirss-data:/app/data
restart: unless-stopped
environment:
TZ: Europe/Zurich
# Optional: remove the # in front of a line to turn it on (see the table).
# Start
# PUID: "1000"
# PGID: "1000"
# Network
# FRIRSS_BASE_URL: https://frirss.example.com
# PROXY_INTERNAL_HOSTS: 192.168.1.20
# PROXY_REWRITES: https://rss.example.com=http://freshrss:80
# CORS_ORIGIN: https://frirss.example.com
# Redis cache, strongly recommended
# REDIS_URL: redis://redis:6379
# CACHE_ARTICLES_PER_FEED: "50"
# CACHE_TTL: "86400"
# CACHE_SYNC_INTERVAL: "0"
# CACHE_SYNC_ACTIVE_DAYS: "7"
# CACHE_SYNC_PARALLEL_USERS: "3"
# Limits and storage
# FRIRSS_REFRESH_MAX_FEEDS: "1000"
# FRIRSS_PROXY_RATE_LIMIT: "600"
# FRIRSS_DATA_DIR: /app/data
Docker Compose
mkdir -p frirss-data
docker compose up -d
Unraid
Open the Apps tab in Unraid Community Applications, search for FriRSS and install its template. Check the host port and persistent /app/data mapping before starting.
All are optional except TZ, already set. In compose.yaml, remove the # in front of a line to turn it on; with docker run, add ‑e NAME=value before the image name. Then recreate the container.
Variable
What it does
Default
Start
TZ
The container’s time zone, for dates and logs. Example: Europe/London.
—
PUID, PGID
User and group FriRSS runs as. The data folder is taken over in their name on start.
1000
Network
FRIRSS_BASE_URL
FriRSS’s public address. Recommended behind a reverse proxy; also fixes the single sign-on (OIDC) redirect addresses.
Taken from the request
PROXY_INTERNAL_HOSTS
Private hosts FriRSS may reach, comma-separated. Needed when FreshRSS sits on your local network or a Docker network.
None
PROXY_REWRITES
Reach FreshRSS over the internal network instead of its public address: public address=internal address, comma-separated.
None
CORS_ORIGIN
Allowed origins, only when the interface and the server are served separately.
None
Redis cache, strongly recommended
REDIS_URL
Turns the cache on: lists shown at once, background pre-fetch, extracted articles and AI results shared by the whole instance.
Off
CACHE_ARTICLES_PER_FEED
Articles kept in the cache per feed.
50
CACHE_TTL
Lifetime of a cache entry, in seconds.
86400 (one day)
CACHE_SYNC_INTERVAL
Background pre-fetch, every N minutes. 0 turns it off; needs REDIS_URL.
0
CACHE_SYNC_ACTIVE_DAYS
Only pre-fetches for accounts seen in the last N days.
7
CACHE_SYNC_PARALLEL_USERS
Accounts pre-fetched at once.
3
Limits and storage
FRIRSS_REFRESH_MAX_FEEDS
Feeds refreshed on each click on Refresh.
1000
FRIRSS_PROXY_RATE_LIMIT
Requests per account per minute, one budget shared by the proxy, article extraction and AI. 0 removes the limit.
600
FRIRSS_DATA_DIR
SQLite database folder, inside the container.
/app/data
02Create your FriRSS account
Once the container is running, open this address on the Docker host, or use that host’s address from another device. Create the first FriRSS account immediately: it becomes the administrator. Registration then closes and can be reopened in Preferences → Administration.
Local address after startup
http://localhost:8080
03Connect FreshRSS to FriRSS
This time, use your FreshRSS credentials. They are separate from the FriRSS account you just created.
FreshRSS address
The URL of your instance, for example https://rss.example.com.
FreshRSS username
The account whose subscriptions you want to read.
API password
The password set in your FreshRSS profile during preparation.
Add a FreshRSS serverConnect your FreshRSS instance to get started.
Server URLhttps://rss.example.com
FreshRSS userhome
API password••••••••••••Set in FreshRSS → Configuration → Profile
Name (optional)Home
Connect
FreshRSS on a private network?
The proxy blocks private addresses by default. Explicitly allow your FreshRSS hostname or IP with PROXY_INTERNAL_HOSTS. Replace the example address with your actual host; do not disable the protection globally.
PROXY_INTERNAL_HOSTS
PROXY_INTERNAL_HOSTS=192.168.1.20
Docker: add -e PROXY_INTERNAL_HOSTS=192.168.1.20 before the image name. Compose: remove the # in front of the PROXY_INTERNAL_HOSTS line and replace the address with your FreshRSS’s. Recreate the container after changing it.
Your feeds are ready to read.Choose your layout, your theme and your first article. You can fine-tune the rest as you go.
04Grow your installation
FriRSS works with its built-in SQLite database. Redis is an optional addition for faster reading and shared caching across devices.
SQLiteSQLite comes with FriRSS
Accounts, preferences and configuration live in the built-in database. Back up your FriRSS data: no additional database service is required.
RedisRecommended, optionalFor FriRSS
A shared cache for article lists, extracted articles and AI results. It avoids repeating the same work for each device or user.
A useful addition for faster repeat visits. FriRSS also works without Redis.
Connect your Redis service with REDIS_URL. Background prefetching is enabled separately with CACHE_SYNC_INTERVAL, which requires Redis.
Back up /app/data using the official SQLite snapshot procedure or encrypted export. Copying only a live frirss.db file is not a reliable backup.
Give it HTTPS
For remote access, use an HTTPS reverse proxy; do not expose the container port directly to the internet. For AI translations, allow read and send timeouts of at least 120 seconds.
Update deliberately
Read the release notes, back up your data, then pull the new image and recreate the container. The official README remains the reference for evolving configuration.