Hosting FreshRSS na Managed VPS oznacza, że Państwo i Państwa zespół czytają swoje kanały RSS z maszyny, która należy do Państwa, a nasze zespoły dbają o jej aktualność i nadzorują ją dniem i nocą. FreshRSS to wolne oprogramowanie na licencji AGPL-3.0. Ten poradnik podąża za jego oficjalną dokumentacją: instalacja przez Docker Compose, HTTPS, odświeżanie kanałów, konta i logowanie, API dla aplikacji mobilnych, baza danych, kopie zapasowe i aktualizacje.
Autor: Simon Vasconcelos Lee
Opublikowano 11 listopada 2026Czas czytania: 13 minut
data i extensions, za odwrotnym proxy z HTTPS.CRON_MIN sama odświeża kanały: projekt zaleca mniej więcej dwa uruchomienia na godzinę.data oraz, przy PostgreSQL lub MySQL, bazę danych, a aktualizować poleceniem docker compose pull.FreshRSS to samodzielnie hostowany agregator kanałów RSS napisany w PHP. README opisuje go jako lekki, łatwy w obsłudze, wydajny i konfigurowalny, przetłumaczony na ponad dwadzieścia języków. To aplikacja wieloużytkownikowa, z trybem czytania anonimowego i własnymi etykietami.
FreshRSS jest rozwijany przez swoją społeczność na GitHubie, a jego oficjalną stronę publikuje społeczność FreshRSS. Rozszerzenia znajdują się w osobnym repozytorium, a dokumentacja obejmuje użytkowników, administratorów i programistów.
FreshRSS jest udostępniany na GNU Affero General Public License, wersja 3: jego manifest composer.json deklaruje ją jako AGPL-3.0, a README odsyła do tekstu licencji. Tekst ten potwierdza nieograniczone prawo do uruchamiania niezmodyfikowanego programu. Mogą więc Państwo używać obrazu opublikowanego przez projekt dla swojej firmy i zespołu, bez zakupu licencji.
Artykuł 13 dodaje warunek właściwy dla AGPL: jeśli Państwo zmodyfikują program, Państwa wersja musi oferować każdemu, kto korzysta z niej zdalnie, przez sieć, możliwość bezpłatnego uzyskania jej kodu źródłowego. Rozszerzenie zewnętrzne dodane do woluminu extensions podlega własnej licencji.
Projekt publikuje swoje oficjalne obrazy na Docker Hub, pod nazwą freshrss/freshrss, wraz z przykładowym plikiem Compose. Na serwerze z zainstalowanym Dockerem proszę utworzyć katalog o nazwie freshrss i umieścić w nim ten compose.yaml, zaczerpnięty z tego pliku i z README Dockera:
volumes:
data:
extensions:
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
hostname: freshrss
restart: unless-stopped
logging:
options:
max-size: 10m
volumes:
- data:/var/www/FreshRSS/data
- extensions:/var/www/FreshRSS/extensions
ports:
- 127.0.0.1:8080:80
environment:
TZ: UTC
CRON_MIN: '3,33'
TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16
healthcheck:
test: ["CMD", "cli/health.php"]
timeout: 10s
start_period: 60s
start_interval: 11s
interval: 75s
retries: 3
docker compose up -d
127.0.0.1: FreshRSS jest osiągalny wyłącznie przez odwrotne proxy, postawione na tym samym serwerze. Przykładowy plik projektu publikuje port 8080 do użytku lokalnego; adres 127.0.0.1 rezerwuje go tutaj dla proxy.data przechowuje konfigurację, konta oraz, przy SQLite, bazę danych każdego użytkownika. README zaznacza, że zawiera on wszystkie dane osobowe. Docker Compose nadaje mu nazwę od katalogu: freshrss_data.extensions przechowuje rozszerzenia zewnętrzne, jeśli je Państwo dodadzą.TZ przyjmuje strefę czasową serwera, w formacie PHP; domyślnie UTC.TRUSTED_PROXY zachowuje wartość z przykładowego pliku: prywatne zakresy, z których pochodzą żądania proxy. Od niej zależy, który adres trafia do dzienników, odwiedzającego czy proxy.cli/health.php, aby Docker wiedział, czy instancja odpowiada.Tag latest, domyślny, podąża za ostatnią wersją numerowaną; edge podąża za wydaniem ciągłym; tag taki jak 1.30.4 przypina wersję, a przyrostek -alpine daje to samo na bazie Alpine zamiast Debiana. Sekcja o aktualizacjach wraca do tego wyboru.
Gdy odwrotne proxy jest gotowe, proszę otworzyć swój adres HTTPS: kreator instalacji pyta o język, sprawdza serwer, proponuje wybór bazy danych, a następnie tworzy konto administratora, z hasłem i metodą logowania. SQLite działa bez żadnych przygotowań. Instalacja jest możliwa także z wiersza poleceń, przez cli/do-install.php i cli/create-user.php, uruchamiane przez docker exec --user www-data freshrss.
Jeśli chodzi o zasoby, README wymaga lekkiego serwera z Linuksem lub Windowsem i zaznacza, że FreshRSS działa nawet na Raspberry Pi 1, z czasem odpowiedzi poniżej sekundy, przy 150 kanałach i 22 000 artykułów. Rozmiar zależy od liczby użytkowników, kanałów i przechowywanych artykułów. Na Managed VPS wystarczy opisać nam swoje zastosowanie, a polecimy odpowiedni rozmiar.
Do zastosowań produkcyjnych README Dockera zaleca odwrotne proxy na serwerze hosta, które zapewnia HTTPS. Najpierw proszę wybrać nazwę domeny lub subdomenę, taką jak rss.example.com, wskazującą na serwer rekordami A i AAAA. Projekt poleca Traefik i publikuje dla niego kompletny plik Compose, z certyfikatami Let’s Encrypt i przekierowaniem z HTTP na HTTPS; podaje też przykłady dla Apache, Nginx i Caddy.
Caddy sam uzyskuje certyfikat i włącza HTTPS. Ten blok podąża za przykładem z dokumentacji dla subdomeny, skierowanym tutaj na port opublikowany lokalnie:
rss.example.com {
reverse_proxy 127.0.0.1:8080
}
Ten blok powtarza przykład Nginx z README Dockera dla katalogu głównego domeny, zredukowany do portu 80, aby Certbot mógł zainstalować HTTPS. Dwa ostatnie wiersze przekazują nagłówek Authorization, którego potrzebuje API Google Reader:
upstream freshrss {
server 127.0.0.1:8080;
keepalive 64;
}
server {
listen 80;
listen [::]:80;
server_name rss.example.com;
location / {
proxy_pass http://freshrss/;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_read_timeout 90;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
}
}
Certbot następnie instaluje certyfikat i zajmuje się jego odnawianiem:
sudo certbot --nginx
FreshRSS przechowuje swój adres publiczny w base_url, w pliku data/config.php. Opierają się na nim API i WebSub: proszę sprawdzić, czy zawiera Państwa adres w https. README Dockera pokazuje, gdzie znaleźć ten plik w woluminie:
docker volume inspect freshrss_data
sudo nano /var/lib/docker/volumes/freshrss_data/_data/config.php
docker compose restart freshrss
'base_url' => 'https://rss.example.com/',
FreshRSS pobiera nowe artykuły skryptem app/actualize_script.php. Obraz Docker zawiera zadanie cykliczne, które uruchamia go w minutach podanych w CRON_MIN. Bez tej zmiennej albo przy pustej wartości zadanie pozostaje wyłączone, a kanały przestają się same odświeżać.
13,43; */20 również się sprawdza.base_url, a kreator instalacji włącza go, gdy serwer taki adres ma.Inna opisana w dokumentacji metoda: zadanie cykliczne na serwerze hosta, które wywołuje skrypt wewnątrz kontenera. W takim przypadku proszę usunąć CRON_MIN z compose.yaml, aby zachować jedną metodę:
7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1
Od wersji 1.30.0 FreshRSS domyślnie odrzuca adresy sieci lokalnej, takie jak 127.0.0.1, aby chronić przed fałszowaniem żądań po stronie serwera. Sąsiednią usługę, która tworzy kanały, taką jak RSS-Bridge, dopuszcza się przez zmienną INTERNAL_HOST_ALLOWLIST, w postaci rss-bridge:80, albo w konfiguracji systemu. Wartość * usuwa wszelką kontrolę, a dokumentacja uznaje ją za niebezpieczną.
Podczas instalacji FreshRSS proponuje logowanie formularzem, które wymaga JavaScriptu. To metoda domyślna i sprawdza się w większości instancji. Dokumentacja opisuje też inne:
| Metoda | Co daje | Gdzie się ją ustawia |
|---|---|---|
| Formularz | Nazwa użytkownika i hasło właściwe dla FreshRSS | Kreator instalacji |
| Uwierzytelnianie HTTP | Dostęp kontroluje serwer WWW, a nowi użytkownicy są tworzeni przy pierwszym logowaniu | Plik p/i/.htaccess zamontowany w kontenerze, z jego .htpasswd |
| Uwierzytelnianie zewnętrzne | Proxy przekazuje zalogowanego użytkownika w nagłówku Remote-User lub X-WebAuth-User | TRUSTED_PROXY, które wymienia zaufane proxy |
| OpenID Connect | Logowanie przechodzi przez Państwa dostawcę tożsamości, za pomocą modułu Apache mod_auth_openidc | OIDC_ENABLED i zmienne OIDC_*, w obrazie Debian na x86_64 |
Dokumentacja ostrzega, że FreshRSS ufa każdemu adresowi wymienionemu w TRUSTED_PROXY: słabo zabezpieczone proxy pozwoliłoby atakującemu ustawić nagłówek i uzyskać dostęp administratora. Tutaj port nasłuchuje wyłącznie na 127.0.0.1, co rezerwuje go dla proxy samego serwera. Dokumentacja odradza też jakąkolwiek instancję bez uwierzytelniania, gdy tylko serwer jest osiągalny spoza Państwa sieci.
mailer i smtp w data/config.php: dokumentacja podaje, że wysyłka przez funkcję PHP mail nie jest jeszcze obsługiwana w oficjalnych obrazach Docker.Dla instancji współdzielonej przez kilka osób dokumentacja radzi otwierać konta osobom zaufanym i utrzymywać instancję za proxy lub zaporą, która blokuje dostęp do wewnętrznych zakresów adresów.
FreshRSS działa w przeglądarce, na dużych i małych ekranach, a także w aplikacjach na Androida, iOS, Linuksa, Windowsa i macOS. Aplikacje te korzystają z jednego z jego dwóch API: Google Reader, które README ocenia jako najlepsze, oraz Fever, o bardziej ograniczonych funkcjach, mniej wydajnego i mniej bezpiecznego.
https://rss.example.com/api/greader.php, albo https://rss.example.com/api/fever.php dla Fever, wraz z nazwą użytkownika i tym hasłem API.Do sprawdzenia służy link wyświetlany obok hasła API w profilu, który otwiera stronę testową: PASS przy pełnym teście potwierdza, że wszystko działa. Obraz Docker już ustawia Apache tak, by przyjmował zakodowane ukośniki, których potrzebują niektóre aplikacje; przy Nginx przed nim proszę zachować przekazywanie nagłówka Authorization.
README prowadzi tabelę zgodnych aplikacji, z ich platformą, API i funkcjami: między innymi Capy Reader i Readrops na Androidzie, FeedFlow na telefonie i komputerze, RSS Guard i NewsFlash na komputerze, ReadKit i Reeder Classic na iOS i macOS.
FreshRSS ma wbudowaną obsługę SQLite, którą README Dockera opisuje jako najprostszą opcję, o dobrej wydajności. Strona wymagań zaleca PostgreSQL 10 lub nowszy, a przyjmuje też MariaDB 10.6 i MySQL 8.0 lub nowsze. Wyboru dokonuje się w kreatorze instalacji.
| Baza | Konfiguracja | Kopia zapasowa |
|---|---|---|
| SQLite | Żadna: jeden plik na użytkownika, data/users/<user>/db.sqlite | Wolumin data |
| PostgreSQL | Usługa postgres w tym samym compose.yaml | pg_dump albo cli/db-backup.php |
| MySQL lub MariaDB | Państwa serwer bazy i jego nazwa hosta w kreatorze | mysqldump albo cli/db-backup.php |
Dla PostgreSQL proszę dodać tę usługę do compose.yaml, zaczerpniętą z pliku docker-compose-db.yml projektu, a wolumin db do listy woluminów. Hasło trafia do pliku .env, obok compose.yaml:
freshrss-db:
image: postgres:18
container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
logging:
options:
max-size: 10m
volumes:
- db:/var/lib/postgresql
environment:
POSTGRES_DB: freshrss
POSTGRES_USER: freshrss
POSTGRES_PASSWORD: ${DB_PASSWORD}
DB_PASSWORD='a-long-unique-password'
W kreatorze proszę wybrać PostgreSQL i wpisać freshrss-db jako host, wraz z użytkownikiem, hasłem i bazą freshrss.
Do tego wyboru można wrócić później. Dokumentacja opisuje przejście z jednej bazy na inną, na przykład z MySQL na PostgreSQL, albo na nowszą wersję główną PostgreSQL: cli/db-backup.php kopiuje bazę każdego użytkownika do pliku SQLite, a następnie cli/db-restore.php wczytuje ją do nowej bazy.
README zaznacza, że FreshRSS jest dostarczany bez jakiejkolwiek gwarancji: to Państwa kopie zapasowe zachowują subskrypcje, artykuły i ustawienia. Oto, co dokumentacja prosi kopiować:
| Element | Co przechowuje | Do skopiowania |
|---|---|---|
data/ | Konfigurację, konta, dzienniki oraz, przy SQLite, bazy danych | Obowiązkowo; cache/ można pominąć, FreshRSS odtwarza go sam |
extensions/ | Rozszerzenia zewnętrzne | Zalecane, jeśli z nich Państwo korzystają |
| Zewnętrzna baza danych | Przy PostgreSQL, MySQL lub MariaDB dane użytkowników | Obowiązkowo, osobno |
Dokumentacja uważa za bezpieczniejsze zatrzymanie usługi na czas prac konserwacyjnych. Woluminy Dockera kopiuje się za pomocą tymczasowego kontenera, metodą opisaną w dokumentacji Dockera:
docker compose stop freshrss
docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -czf /backup/freshrss-$(date +%F).tgz --exclude=data/cache -C /var/www/FreshRSS data extensions
docker compose start freshrss
Od wersji 1.29.1 FreshRSS potrafi sam eksportować bazę każdego użytkownika do pliku SQLite, niezależnie od używanej bazy, i zachowywać tylko najnowsze eksporty. Ten eksport włącza się w data/config.php:
'auto_sqlite_export' => [
'enabled' => true,
'retention' => 7,
],
Następnie proszę zaplanować polecenie na serwerze, tutaj co noc. Każde uruchomienie zapisuje data/users/<user>/sqlite-backups/<date>.sqlite i usuwa pliki starsze niż siedem ostatnich:
20 2 * * * root docker exec --user www-data freshrss cli/export-sqlite-auto.php --quiet
Przy PostgreSQL proszę dodać zrzut własnym narzędziem bazy, jak w README Dockera. Opcja -T wyłącza terminal, który w zadaniu cyklicznym nie jest potrzebny:
docker compose exec -T freshrss-db pg_dump -U freshrss freshrss | gzip -9 > freshrss-postgres-$(date +%F).sql.gz
Eksport OPML z interfejsu zachowuje listę kanałów, bez niektórych ustawień właściwych dla FreshRSS, takich jak dane logowania czy reguły pobierania ze stron. Pełną kopię zapewniają eksporty SQLite: umieszczone na dysku serwera, trafiają także do jego nocnych kopii zapasowych.
docker compose stop freshrss.docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.cli/db-restore.php --delete-backup --force-overwrite.docker compose start freshrss, a następnie sprawdzić, czy kanały i artykuły są na miejscu.Proszę powtarzać to ćwiczenie od czasu do czasu, na kopii: w ten sposób sprawdzają Państwo, że kopia zapasowa działa.
README Dockera podaje dwa polecenia, wydawane z katalogu z compose.yaml. Woluminy pozostają na miejscu:
docker compose pull
docker compose up -d
FreshRSS publikuje w dwóch kanałach. Wersje numerowane, tag latest, ukazują się kilka razy w roku, bez ustalonego kalendarza, a ich poprawki nie są przenoszone do starszych wersji. Wydanie ciągłe, tag edge, otrzymuje nowe funkcje i poprawki na bieżąco: od wersji 1.30.0 projekt zaleca je ze względu na szybsze poprawki bezpieczeństwa.
data/, rozszerzeń i bazy przed każdą aktualizacją.1.29.1 umożliwiają tę drogę.Aby śledzić nowe wydania, projekt publikuje kanał Atom swoich wersji: wystarczy zasubskrybować go we własnej instancji FreshRSS.
Samodzielny hosting wymaga prowadzenia serwera, oprócz samej aplikacji. Na Managed VPS nasze zespoły przejmują serwer i proaktywnie czuwają nad Państwa instancją; FreshRSS pozostaje Państwa oprogramowaniem, z jego ustawieniami i danymi.
| Temat | Nasze zespoły | Państwo |
|---|---|---|
| Serwer | Aktualizacje systemu i zabezpieczeń, w tym interwencje na serwerze | Moment dogodny dla Państwa działalności |
| Nadzór | Serwer pod opieką całą dobę, 7 dni w tygodniu, z interwencją bez czekania na Państwa telefon | Czytanie dzienników Państwa instancji |
| FreshRSS | Proaktywna opieka: wychwytujemy błędy, spowolnienia i brak miejsca na dysku oraz polecamy poprawkę | Instalacja, aktualizacje i ustawienia, które wdrażają Państwo sami albo Państwa asystent AI |
| Konta i kanały | Serwer, który je utrzymuje, nadzorowany i objęty kopiami zapasowymi | Użytkownicy, subskrypcje, rozszerzenia i hasła API |
| Kopie zapasowe | Co noc, szyfrowane i przechowywane poza maszyną; przywracanie w cenie | Eksporty właściwe dla FreshRSS oraz zgłoszenie prośby o przywrócenie, gdy będzie potrzebne |
| Migracja | Migracja Państwa obecnego serwera, bezpłatna | Moment przełączenia |
Jeśli wolą Państwo, aby nasze zespoły interweniowały w samej aplikacji, usługa ta jest rozliczana godzinowo lub ryczałtowo, z wyceną przekazaną przed interwencją.
Z Managed VPS od Simafri nasze zespoły utrzymują serwer Państwa instancji FreshRSS w aktualności, nadzorują go dniem i nocą i interweniują bez czekania na Państwa telefon; proaktywnie czuwają także nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami albo Państwa asystent AI. Kopie zapasowe są szyfrowane co noc i przechowywane poza maszyną, ich przywracanie jest w cenie, a migracja obecnego serwera jest bezpłatna.
Tak. FreshRSS jest udostępniany na licencji AGPL-3.0: mogą Państwo uruchomić go w firmie bez zakupu licencji. Jeśli go Państwo zmodyfikują, Państwa wersja musi oferować kod źródłowy tym, którzy korzystają z niej przez sieć. Pozostaje koszt serwera, na którym działa.
Proszę utworzyć compose.yaml z obrazem freshrss/freshrss, woluminami data i extensions oraz portem opublikowanym na 127.0.0.1, a następnie uruchomić docker compose up -d. Potem proszę postawić przed nim odwrotne proxy z HTTPS, otworzyć swój adres i przejść przez kreator instalacji.
Przy obrazie Docker proszę podać w CRON_MIN minuty uruchomienia, na przykład 13,43: projekt zaleca mniej więcej dwa uruchomienia na godzinę. Bez CRON_MIN wbudowane zadanie pozostaje wyłączone. Tę samą pracę wykonuje zadanie cykliczne na serwerze, które uruchamia app/actualize_script.php wewnątrz kontenera.
SQLite jest wbudowana i nie wymaga żadnych przygotowań; README Dockera opisuje ją jako najprostszą, o dobrej wydajności. Strona wymagań zaleca PostgreSQL 10 lub nowszy, a przyjmuje też MariaDB 10.6 i MySQL 8.0. Polecenia db-backup i db-restore pozwalają później zmienić bazę.
Proszę włączyć dostęp przez API w sekcji Uwierzytelnianie, a następnie ustawić hasło API w swoim profilu. W zgodnej aplikacji proszę wpisać adres api/greader.php swojej instancji, ponieważ według README najlepsze jest API Google Reader, albo api/fever.php.
Domyślnie nie: konfiguracja ogranicza konta do konta administratora. Pozostałe konta tworzy się w Administracja, Zarządzanie użytkownikami, albo zwiększa się liczbę kont w konfiguracji systemu, aby wyświetlić formularz rejestracji.
Proszę kopiować woluminy data i extensions przy zatrzymanej usłudze. Proszę też włączyć auto_sqlite_export i zaplanować cli/export-sqlite-auto.php, które co noc eksportuje bazę każdego użytkownika do SQLite. Przy PostgreSQL proszę dodać pg_dump. Przywracanie proszę regularnie testować.
Managed VPS obejmuje serwer: system, bezpieczeństwo, nadzór i kopie zapasowe. Nasze zespoły proaktywnie czuwają też nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami. Interwencja w aplikacji jest rozliczana godzinowo lub ryczałtowo.
Simafri
Porozmawiajmy o Państwa projekcie
Proszę powiedzieć nam w kilku słowach, czego Państwo potrzebują: odpowiemy szybko.
Dziękujemy! Państwa zapytanie zostało wysłane. Wkrótce się odezwiemy.
Wolą Państwo e-mail? Proszę napisać do nas na support@simafri.com.