SSD Nodes Learn RAM 8GB — $66/mwaka
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-01

Jinsi ya kusakinisha FreshRSS kwenye VPS ya Ubuntu

Sakinisha FreshRSS 1.29.1 kwenye Ubuntu 24.04 VPS ukitumia Apache, PHP 8.3 na MariaDB, kisha sanidi virtual host, cron ya kusasisha na API ya simu.

Unachojenga

Kisomaji cha RSS kinachojihudumia ni kisomaji cha milisho kinachoendeshwa kwenye seva unayomiliki, hivyo hakuna mtu anayeweza kukizima au kubadilisha kinachokuonyesha. Mwongozo huu unasakinisha FreshRSS kwenye VPS ya Ubuntu 24.04: Apache iko mbele, PHP iko nyuma yake, MariaDB hutumika kuhifadhi data, na kazi moja ya cron huchukua makala mpya. RSS (really simple syndication) ni muundo wa faili ambao tovuti huchapisha ili programu ziweze kusoma makala zake. FreshRSS ni programu ya PHP inayokusanya faili hizo, kuhifadhi makala, na kukupa kiolesura cha wavuti pamoja na API (application programming interface) ambayo programu za simu hutumia kuwasiliana.

Usakinishaji wenyewe ni mdogo: fungua kifurushi cha release, tengeneza database, andika virtual host moja, kisha endesha installer moja ya command line. Kazi nyingi zilizo hapa chini zinahusu mambo ambayo watu huyakosea baada ya hapo. Hayo ni kazi ya kuonyesha upya, mistari iliyosimbwa kwa URL kwa API ya simu, na umiliki wa faili.

FreshRSS 1.29.1 ndiyo release ya sasa kufikia Julai 2026, na inahitaji PHP 8.1 au mpya zaidi. Ubuntu 24.04 inasafirisha PHP 8.3, hivyo packages za distribution zinatosha na huhitaji repository ya PHP ya mtu mwingine.

Anza kwa LAMP stack inayofanya kazi

FreshRSS ni programu ya kawaida ya PHP, kwa hiyo inahitaji msingi sawa na programu nyingine yoyote. Ikiwa bado hujaunda msingi huo, fuata usanidi wa LAMP stack kwa Ubuntu 24.04 kwanza, kisha urudi hapa. Kwa ufupi:

sudo apt update
sudo apt install -y apache2 mariadb-server php libapache2-mod-php
sudo systemctl enable --now apache2 mariadb

systemctl status apache2 inapaswa kuripoti active (running). Ikiwa Apache haitaanza, sababu ya kawaida ni mchakato mwingine ambao tayari unatumia port 80, na sudo ss -ltnp | grep :80 huutaja.

Viendelezi vya PHP ambavyo FreshRSS inahitaji

FreshRSS inachukulia libxml, cURL, JSON, PDO_MySQL, PCRE na ctype kuwa vya lazima. Pia inahitaji mbstring, iconv, Zlib na ZipArchive, pamoja na GMP kwenye mfumo wa biti 32. Kwenye Ubuntu, hivi huja kama vifurushi vya usambazaji:

sudo apt install -y php-curl php-mbstring php-xml php-zip php-mysql php-intl php-gmp
sudo systemctl restart apache2

Thibitisha vile PHP imepakia kwa kutumia php -m. Kiendelezi kinachokosekana hakizuii kisakinishi kuanza. Kisakinishi husimama kwenye skrini ya mahitaji na kuonyesha mstari mwekundu unaotaja kiendelezi hicho. Kugundua tatizo hapo kunaweza kuchanganya, kwa hiyo thibitisha sasa. Kuwasha upya Apache ni muhimu kwa sababu libapache2-mod-php huendesha PHP ndani ya mchakato wa Apache. Hivyo, kiendelezi kipya hakiwezi kuonekana na seva ya wavuti hadi Apache iwashe upya.

Pakua toleo

Sakinisha FreshRSS nje ya web root chaguo-msingi, kisha uelekeze Apache humo. Kutenganisha saraka ya programu na document root kunamaanisha kuwa ni public folder pekee inayoweza kufikiwa kupitia HTTP.

cd /tmp
curl -fsSLO https://github.com/FreshRSS/FreshRSS/archive/refs/tags/1.29.1.tar.gz
tar xzf 1.29.1.tar.gz
sudo mv FreshRSS-1.29.1 /srv/freshrss

Sasa weka ruhusa, kwa kuwa nyaraka za FreshRSS zina masharti madhubuti: mtumiaji wa web server awe mmiliki wa mti wa saraka, group iweze kusoma kila faili, na group iweze kuandika kwenye ./data/.

sudo chown -R www-data:www-data /srv/freshrss
sudo chmod -R g+r /srv/freshrss
sudo chmod -R g+w /srv/freshrss/data

Ukiruka hatua hii, kisakinishi kitashindwa kuandika usanidi wake, kwa sababu PHP inaendeshwa kama www-data na www-data haiwezi kuandika kwenye saraka inayomilikiwa na root.

Unda hifadhidata

FreshRSS inasaidia SQLite, MariaDB, MySQL na PostgreSQL. SQLite haihitaji usanidi na inafaa kwa mtu mmoja mwenye milisho mia chache. MariaDB ni chaguo bora watu kadhaa wanapotumia tukio moja, kwa sababu uandishi wa wakati mmoja kutoka kwa kazi ya kuhuisha na kiolesura cha wavuti haupingani tena kwa kufungiana faili moja.

sudo mariadb -e "CREATE DATABASE freshrss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mariadb -e "CREATE USER 'freshrss'@'localhost' IDENTIFIED BY 'ReplaceThisPassword';"
sudo mariadb -e "GRANT ALL PRIVILEGES ON freshrss.* TO 'freshrss'@'localhost';"
sudo mariadb -e "FLUSH PRIVILEGES;"

Tumia utf8mb4 badala ya utf8. Milisho huwa na emoji na maandishi yasiyo ya Kilatini, na usimbaji wa zamani wa utf8 wenye baiti tatu hukata kichwa cha makala kwenye herufi ya kwanza yenye baiti nne.

Apache virtual host

Saraka ya umma ni p/, si sehemu ya juu ya mti wa saraka. Kila kitu kingine, ikiwemo faili ya usanidi iliyo na nenosiri la hifadhidata yako, kiko juu ya mzizi wa nyaraka ambako Apache haitawahi kukihudumia.

<VirtualHost *:80>
	ServerName rss.example.com
	DocumentRoot /srv/freshrss/p/

	<Directory /srv/freshrss/p>
		AllowOverride AuthConfig FileInfo Indexes Limit
		Require all granted
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log
	CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined

	AllowEncodedSlashes On
</VirtualHost>

Hifadhi hiyo kama /etc/apache2/sites-available/freshrss.conf na uiwashe:

sudo a2enmod rewrite
sudo a2ensite freshrss
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2

configtest inapaswa kuchapisha Syntax OK. AllowEncodedSlashes On inaonekana kuwa ya hiari, lakini si hivyo: Google Reader API hutuma vitambulishi vya mipasho vyenye %2F, na bila direktiva hii Apache huvikataa. Kwa hiyo programu za simu hushindwa kusawazisha, ingawa kiolesura cha wavuti hufanya kazi kikamilifu.

Ongeza HTTPS kabla ya kuingia

Unakaribia kuandika nenosiri kwenye tovuti hii, kwa hiyo pata cheti kwanza. Elekeza rekodi ya A kwenye seva, kisha fuata usanidi wa Certbot kwa Apache kwenye Ubuntu na utekeleze sudo certbot --apache -d rss.example.com. Certbot hubadilisha usanidi wa virtual host kwa port 443 na kuongeza uelekezaji upya. Thibitisha kwa curl -I https://rss.example.com/, ambayo inapaswa kurudisha 200 au kuelekeza kwenye ukurasa wa kuingia.

Endesha kisakinishi kutoka kwenye mstari wa amri

FreshRSS ina kisakinishi cha kivinjari, lakini toleo la mstari wa amri linaweza kurudiwa na huacha rekodi ya chaguo ulizoweka.

sudo -u www-data php /srv/freshrss/cli/do-install.php \
  --default-user admin --auth-type form --environment production \
  --base-url https://rss.example.com --language en --api-enabled \
  --db-type mysql --db-host localhost --db-user freshrss \
  --db-password 'ReplaceThisPassword' --db-base freshrss
sudo -u www-data php /srv/freshrss/cli/create-user.php \
  --user admin --password 'a-long-passphrase' --api-password 'a-different-passphrase'

Endesha zote mbili kama www-data. Kuzitekeleza kama root huunda faili za usanidi zinazomilikiwa na root, na kiolesura cha wavuti hushindwa kuhifadhi mipangilio yoyote baadaye. --environment production pia ni muhimu, kwa sababu mpangilio wa usanidi huonyesha arifa za PHP kwenye ukurasa.

Pakia https://rss.example.com/ na uingie kama admin.

Kwa nini milisho haijisasishi yenyewe

Hakuna kinachokagua milisho yako hadi ukiamuru. FreshRSS hujisasisha wakati kivinjari kimefunguliwa kwenye mfumo huo. Hii inamaanisha kuwa mfumo unaoutembelea mara mbili kwa siku hukuonyesha makala zilizopitwa na wakati kwa saa kumi na mbili. Suluhisho ni hati ambayo mradi hutoa kwa kazi hii, app/actualize_script.php, iendeshe kupitia cron.

sudo crontab -u www-data -e

Ongeza mstari mmoja:

*/20 * * * * php /srv/freshrss/app/actualize_script.php > /tmp/FreshRSS.log 2>&1

Dakika ishirini ndiyo muda wa chini unaofaa. Hati hukataa kusasisha mlisho mmoja mara nyingi zaidi ya mara moja kila dakika ishirini. Kwa hiyo, ratiba fupi zaidi hutumia CPU bila faida. Iendeshe kwa mkono mara moja kwanza:

sudo -u www-data php /srv/freshrss/app/actualize_script.php

Matokeo yanayofaa huonyesha jina la kila mlisho uliopakuliwa na kumalizika bila hitilafu ya PHP. Ikiwa haitoi chochote kabisa, mtumiaji wa cron si sahihi. Hitilafu ya ruhusa kwenye data/ inamaanisha kuwa hatua ya chmod -R g+w ilirukwa.

Ongeza mipasho yako ya kwanza

Tumia kitufe cha kuongeza kilicho juu kushoto mwa kiolesura, bandika anwani ya tovuti, kisha FreshRSS itakutafutia kiungo cha mpasho. Tovuti nyingi bado huchapisha mpasho hata kama haziutangaza, kwa kawaida katika /feed, /rss au /atom.xml. Kategoria ni folda, na kuhamisha mpasho kati yake ni kuburuta.

Ikiwa unatoka kwenye kisomaji kingine, hamisha faili ya OPML kutoka huko na uiingize kwenye ukurasa wa usimamizi wa usajili. OPML (outline processor markup language) ni muundo wa kawaida wa orodha ya mipasho, na kila kisomaji kinachofaa kuhamia hukubali muundo huo. Uingizaji mkubwa huwa wa polepole wakati wa uonyeshaji upya wa kwanza kwa sababu kila mpasho hupakuliwa mara moja, kwa hiyo subiri cron iendeshwe mara ya kwanza kabla ya kutathmini kasi.

Isome kwenye simu yako

FreshRSS hutumia Google Reader API, ambayo inaauniwa na karibu kila programu ya RSS. Masharti mawili lazima yatimizwe. Katika mipangilio ya uthibitishaji, "Allow API access" lazima iwe imewashwa; bendera ya --api-enabled hapo juu tayari iliweka hali hiyo. Katika wasifu wako, sehemu ya nenosiri la API lazima iwe na thamani. Nenosiri hilo limetenganishwa kimakusudi na nenosiri lako la kuingia kwa sababu simu ni kifaa kinachopotea kwa urahisi zaidi.

Tembelea https://rss.example.com/api/ na uchague "Check full server configuration". Usanidi unaofanya kazi hurudisha PASS. Hitilafu hapa karibu kila mara husababishwa na kukosekana kwa mstari wa AllowEncodedSlashes On. Katika programu, weka anwani ya seva kuwa https://rss.example.com/api/greader.php, jina la mtumiaji liwe mtumiaji wako wa FreshRSS, na nenosiri la API liwe nenosiri hilo.

Mbadala wa Docker

Ikiwa ungependa kutosimamia PHP na Apache wewe mwenyewe, mradi hutoa image rasmi ya freshrss/freshrss, na faili moja ya compose hukupa programu pamoja na database yake. Hasara yake ni ya kawaida: vipengele vichache vya kusimamia kwenye host, lakini unaongeza safu moja ya kuchunguza hitilafu inapotokea. Bado unahitaji reverse proxy kwa TLS (usalama wa safu ya usafirishaji). Ikiwa chaguo hili linakufaa zaidi, misingi ya Docker Compose kwa VPS inaeleza muundo wa faili, na mstari wa cron unakuwa docker exec --user www-data freshrss php ./app/actualize_script.php.

Nakala na masasisho

Vitu viwili huhifadhi hali yako: hifadhidata na /srv/freshrss/data/. Tupa nakala ya kwanza kwa sudo mysqldump freshrss > freshrss.sql, nakili ya pili, na uhifadhi vyote mahali pengine mbali na seva hii. Orodha yako ya usajili pia inafaa kusafirishwa mara kwa mara katika muundo wa OPML, kwa kuwa faili hiyo huunda upya usanidi wako wa usomaji katika programu yoyote ya RSS.

Kusasisha kunamaanisha kufungua toleo jipya zaidi juu ya saraka ileile na kutekeleza tena amri za umiliki. FreshRSS hutumia uhamishaji wake wa hifadhidata kiotomatiki ukurasa unaofuata unapopakiwa. Tengeneza nakala kwanza, kwa sababu uhamishaji ukishindwa kwenye hifadhidata usiyoweza kurejesha, hali hiyo haiwezi kurekebishwa. Huduma ya msomaji ina hatari ndogo kuendeshwa na ni chaguo zuri la kwanza ikiwa unapitia orodha ya huduma zinazofaa kujihifadhi mwenyewe.

FAQ

Kwa nini milisho yangu husasishwa tu ninapofungua FreshRSS?

Kwa sababu hakuna kipanga ratiba hadi utengeneze kimoja. FreshRSS husasisha milisho wakati kipindi cha kivinjari kiko wazi, na haifanyi chochote kichupo kinapofungwa. Ongeza mstari wa cron unaoita app/actualize_script.php kama mtumiaji wa www-data, kisha endesha hati hiyo kwa mkono mara moja na usome matokeo yake. Kutokuwepo kwa ujumbe kwa kawaida humaanisha cron inaiendesha kama mtumiaji asiye sahihi, hivyo PHP haiwezi kuandika kwenye data/.

Kwa nini programu yangu ya simu haiwezi kuunganisha, lakini tovuti inafanya kazi?

Google Reader API huweka mikato iliyosimbwa (%2F) ndani ya njia za maombi, na Apache huikataa hiyo kwa chaguo-msingi. Ongeza AllowEncodedSlashes On ndani ya virtual host, kisha reload Apache. Thibitisha marekebisho kwa kufungua https://rss.example.com/api/ na kuendesha "Check full server configuration", ambayo inapaswa kuripoti PASS. Pia hakikisha kuwa nenosiri la API limewekwa katika wasifu wako, kwa sababu ni tofauti na nenosiri lako la kuingia.

Je, nitumie SQLite au MariaDB?

Tumia SQLite kwa mtumiaji mmoja, kwa sababu hakuna kitu cha kusakinisha na hakuna nenosiri la kudhibiti. Tumia MariaDB zaidi ya mtu mmoja anaposoma kwenye instance hiyo, au unapozidi milisho mia chache, kwa sababu kazi ya kusasisha na kiolesura cha wavuti huandika kwa wakati mmoja, na kufuli la faili moja huwa kizuizi. Kuhama kati yao baadaye kunawezekana kupitia amri za export na import, kwa hiyo huu si uamuzi wa kudumu.

Kisakinishi kinashindwa kinapoandika usanidi wake. Tatizo ni nini?

PHP huendeshwa kama www-data chini ya Apache, na mtumiaji huyo hawezi kuandika kwenye saraka inayomilikiwa na root. Endesha tena sudo chown -R www-data:www-data /srv/freshrss na sudo chmod -R g+w /srv/freshrss/data, kisha anzisha kisakinishi tena. Ikiwa tayari uliendesha kisakinishi cha mstari wa amri kama root, futa faili ilizounda chini ya data/ kabla ya kujaribu tena, kwa sababu umiliki wake ndio tatizo halisi.

Kisomaji cha RSS kinachojipangisha kinahitaji seva yenye uwezo gani?

Kinahitaji uwezo mdogo sana. Milisho mia chache kwenye mpango mdogo hufanya kazi vizuri, kwa sababu mzigo huwa vipindi vifupi vya kuchukua data kupitia HTTP kila baada ya dakika ishirini, na hifadhidata hubaki ndogo baada ya makala za zamani kufutwa. Nafasi ya diski huongezeka kulingana na muda wa kuhifadhi, kwa hiyo weka sera ya kufuta makala katika mipangilio ya kuhifadhi badala ya kuhifadhi kila kitu milele.

#freshrss#rss#self-hosting#php#apache