SSD Nodes Learn 8GB RAM — $66/वर्ष
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-08-01

Ubuntu VPS वर FreshRSS कसे इन्स्टॉल करावे

Ubuntu 24.04 वर Apache, PHP आणि MariaDB वापरून FreshRSS सेटअप करण्याची संपूर्ण प्रक्रिया. यामध्ये व्हर्च्युअल होस्ट कॉन्फिगरेशन, डेटाबेस सेटअप आणि क्रॉन जॉब सेट करण्याच्या पायऱ्या आहेत.

तुम्ही काय तयार करत आहात

सेल्फ-होस्ट केलेले RSS रीडर हे एक असे फीड रीडर आहे जे तुमच्या स्वतःच्या सर्व्हरवर चालते, त्यामुळे कोणीही ते बंद करू शकत नाही किंवा त्यातील मजकूर बदलू शकत नाही. हे मार्गदर्शक Ubuntu 24.04 VPS वर FreshRSS स्थापित करते: समोर Apache, मागे PHP, साठवणुकीसाठी MariaDB आणि नवीन लेख मिळवण्यासाठी एक cron job. RSS (Really Simple Syndication) हे एक फाईल फॉरमॅट आहे जे एखादी वेबसाईट प्रकाशित करते जेणेकरून सॉफ्टवेअर तिचे लेख वाचू शकेल. FreshRSS हे एक PHP ॲप्लिकेशन आहे जे त्या फाईल्स गोळा करते, लेख साठवते आणि तुम्हाला एक वेब इंटरफेस तसेच फोन ॲप्ससाठी API (Application Programming Interface) प्रदान करते.

इन्स्टॉलेशन प्रक्रिया लहान आहे: एक रिलीज अनपॅक करणे, डेटाबेस तयार करणे, एक व्हर्च्युअल होस्ट लिहिणे आणि एक कमांड लाईन इन्स्टॉलर चालवणे. खाली दिलेले बहुतेक काम हे नंतर चुकीच्या पद्धतीने केले जाणारे भाग आहेत, जसे की रिफ्रेश जॉब, मोबाईल API साठी एनकोडेड स्लॅश आणि फाईल ओनरशिप.

जुलै 2026 पर्यंत FreshRSS 1.29.1 हे सध्याचे रिलीज आहे आणि त्यासाठी PHP 8.1 किंवा त्यापेक्षा नवीन आवृत्ती आवश्यक आहे. Ubuntu 24.04 मध्ये PHP 8.3 समाविष्ट आहे, त्यामुळे डिस्ट्रिब्युशन पॅकेजेस पुरेशी आहेत आणि तुम्हाला कोणत्याही थर्ड पार्टी PHP रिपॉझिटरीची गरज नाही.

LAMP स्टॅक कार्यरत असल्याची खात्री करा

FreshRSS हे एक सामान्य PHP ॲप्लिकेशन आहे, त्यामुळे त्याला इतर ॲप्लिकेशन्सप्रमाणेच पायाभूत सुविधांची आवश्यकता असते. जर तुम्ही अद्याप ती तयार केली नसेल, तर प्रथम Ubuntu 24.04 साठी LAMP स्टॅक सेटअप पूर्ण करा आणि त्यानंतर येथे परत या. थोडक्यात सांगायचे तर:

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

systemctl status apache2 ने active (running) दर्शवले पाहिजे. जर Apache सुरू होत नसेल, तर त्याचे सामान्य कारण म्हणजे दुसरी एखादी प्रक्रिया आधीच port 80 वापरत असणे, आणि sudo ss -ltnp | grep :80 त्या प्रक्रियेचे नाव दर्शवते.

FreshRSS साठी आवश्यक PHP एक्स्टेंशन्स

FreshRSS साठी libxml, cURL, JSON, PDO_MySQL, PCRE आणि ctype ही एक्स्टेंशन्स अनिवार्य आहेत. याव्यतिरिक्त, mbstring, iconv, Zlib, ZipArchive आणि 32-बिट सिस्टिमवर GMP असणे आवश्यक आहे. Ubuntu वर ही एक्स्टेंशन्स खालीलप्रमाणे डिस्ट्रिब्युशन पॅकेजेसद्वारे मिळतात:

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

PHP ने नेमकी कोणती एक्स्टेंशन्स लोड केली आहेत हे तपासण्यासाठी php -m वापरा. एखादे एक्स्टेंशन गहाळ असल्यास इन्स्टॉलर सुरू होण्यापासून थांबत नाही. ते थेट रिक्वायरमेंट्स स्क्रीनवर लाल रंगात त्या एक्स्टेंशनचे नाव दाखवून थांबते, जेथे समस्या शोधणे गोंधळात टाकणारे ठरू शकते, म्हणून आताच खात्री करून घ्या. Apache रीस्टार्ट करणे महत्त्वाचे आहे कारण libapache2-mod-php हे PHP ला Apache प्रोसेसमध्ये ठेवते, त्यामुळे नवीन इन्स्टॉल केलेले एक्स्टेंशन रीस्टार्ट केल्याशिवाय वेब सर्व्हरला दिसत नाही.

रिलीज डाउनलोड करा

FreshRSS ला डीफॉल्ट वेब रूटच्या बाहेर इंस्टॉल करा आणि Apache ला त्याकडे निर्देशित करा. ॲप्लिकेशन डिरेक्टरी डॉक्युमेंट रूटपासून वेगळी ठेवल्यामुळे, केवळ public फोल्डरच 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

आता परवानग्या सेट करा, ज्यांच्याबद्दल FreshRSS डॉक्युमेंटेशन अत्यंत काटेकोर आहे: वेब सर्व्हर युजरकडे संपूर्ण ट्रीची मालकी असावी, ग्रुप प्रत्येक फाईल वाचू शकेल आणि ग्रुपला ./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

ही पायरी वगळल्यास, इंस्टॉलर त्याचे कॉन्फिगरेशन लिहिताना अयशस्वी होतो, कारण PHP हे www-data म्हणून रन होते आणि www-data ला root च्या मालकीच्या डिरेक्टरीमध्ये लिहिण्याची परवानगी नसते.

डेटाबेस तयार करा

FreshRSS हे SQLite, MariaDB, MySQL आणि PostgreSQL ला सपोर्ट करते. SQLite साठी कोणत्याही सेटअपची आवश्यकता नसते आणि एका व्यक्तीसाठी काही शे फीड्स हाताळण्यासाठी ते पुरेसे आहे. जेव्हा अनेक लोक एकाच इन्स्टन्सचा वापर करतात, तेव्हा MariaDB हा उत्तम पर्याय ठरतो, कारण रिफ्रेश जॉब आणि वेब इंटरफेसकडून होणारे एकाच वेळी लेखन (concurrent writes) आता एकाच फाइल लॉकसाठी स्पर्धा करत नाही.

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;"

utf8mb4 वापरा, utf8 नको. फीड्समध्ये इमोजी आणि नॉन-लॅटिन लिपी असतात, आणि जुने तीन बाइट्सचे utf8 एन्कोडिंग पहिल्या चार बाइट्सच्या कॅरेक्टरवर आर्टिकलचे शीर्षक कापते (truncate करते).

Apache व्हर्च्युअल होस्ट

पब्लिक डिरेक्टरी p/ आहे, ट्रीची सुरुवात नाही. डेटाबेस पासवर्ड असलेली कॉन्फिगरेशन फाईल यासह इतर सर्व काही डॉक्युमेंट रूटच्या वर असते, जिथे Apache ती कधीही सर्व्ह करत नाही.

<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>

ती /etc/apache2/sites-available/freshrss.conf म्हणून सेव्ह करा आणि ती इनेबल करा:

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

configtest ने Syntax OK प्रिंट केले पाहिजे. AllowEncodedSlashes On ऐच्छिक वाटते पण ते तसे नाही: Google Reader API मध्ये %2F असलेले फीड आयडेंटिफायर्स असतात आणि या डिरेक्टिव्हशिवाय Apache त्यांना नाकारते, त्यामुळे वेब इंटरफेस व्यवस्थित चालत असतानाही मोबाईल ॲप्स सिंक होण्यास अपयशी ठरतात.

लॉगिन करण्यापूर्वी HTTPS जोडा

तुम्ही या साइटवर पासवर्ड टाइप करणार आहात, त्यामुळे प्रथम एक प्रमाणपत्र (certificate) मिळवा. सर्व्हरवर एक A record पॉइंट करा, त्यानंतर Ubuntu वर Apache साठी Certbot सेटअप फॉलो करा आणि sudo certbot --apache -d rss.example.com रन करा. Certbot पोर्ट 443 साठी व्हर्च्युअल होस्ट पुन्हा लिहितो आणि रिडायरेक्ट जोडतो. curl -I https://rss.example.com/ सह खात्री करा, ज्याने 200 किंवा लॉगिन पेजवर रिडायरेक्ट मिळायला हवे.

कमांड लाईनवरून इंस्टॉलर चालवणे

FreshRSS मध्ये ब्राउझर-आधारित इंस्टॉलर उपलब्ध आहे, परंतु कमांड लाईन आवृत्ती पुन्हा वापरण्यायोग्य आहे आणि तुम्ही नेमके काय निवडले याची नोंद ठेवते.

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'

दोन्ही कमांड्स www-data म्हणून चालवा. त्या root म्हणून चालवल्यास तयार होणाऱ्या कॉन्फिगरेशन फाईल्सची मालकी root कडे जाते, ज्यामुळे नंतर वेब इंटरफेसमध्ये कोणतीही सेटिंग सेव्ह करणे अयशस्वी होते. --environment production देखील महत्त्वाचे आहे, कारण डेव्हलपमेंट सेटिंगमुळे PHP नोटिसेस पेजवर दिसू लागतात.

https://rss.example.com/ लोड करा आणि admin म्हणून लॉग इन करा.

फीड्स आपोआप रिफ्रेश का होत नाहीत

जोपर्यंत तुम्ही सूचना देत नाही, तोपर्यंत कोणतीही सिस्टिम तुमच्या फीड्सना पोल करत नाही. जेव्हा ब्राउझर उघडा असतो तेव्हाच FreshRSS रिफ्रेश होते, याचा अर्थ असा की दिवसातून दोनदा भेट दिल्यास तुम्हाला 12 तास जुने लेख दिसू शकतात. यावर उपाय म्हणजे या प्रोजेक्टसोबत मिळणारी app/actualize_script.php ही स्क्रिप्ट, जी cron द्वारे चालवली जाते.

sudo crontab -u www-data -e

एक ओळ जोडा:

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

वीस मिनिटांचा कालावधी हा योग्य किमान वेळ आहे, कारण ही स्क्रिप्ट कोणत्याही फीडला दर वीस मिनिटांपेक्षा जास्त वेळा रिफ्रेश करण्यास नकार देते. त्यामुळे यापेक्षा कमी कालावधी ठेवल्यास केवळ CPU चा अनावश्यक वापर होईल. प्रथम ही स्क्रिप्ट एकदा मॅन्युअली चालवून पहा:

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

यशस्वी आउटपुटमध्ये प्रत्येक फेच केलेल्या फीडचे नाव दिसते आणि शेवटी कोणताही PHP एरर येत नाही. जर काहीही प्रिंट झाले नाही, तर cron वापरकर्ता चुकीचा आहे असे समजावे. data/ वर परमिशन एरर येत असल्यास, याचा अर्थ chmod -R g+w ही पायरी वगळली गेली आहे.

तुमचे पहिले फीड्स जोडा

इंटरफेसच्या वरच्या डाव्या कोपऱ्यातील प्लस बटण वापरा, साइटचा पत्ता पेस्ट करा आणि FreshRSS तुमच्यासाठी फीड लिंक शोधून काढेल. बहुतेक साइट्स जरी त्याची जाहिरात करत नसल्या तरीही एक फीड प्रकाशित करतात, जे सहसा /feed, /rss किंवा /atom.xml वर असते. कॅटेगरी म्हणजे फोल्डर्स असतात आणि एका फीडला एका फोल्डरमधून दुसऱ्या फोल्डरमध्ये हलवणे सोपे असते.

जर तुम्ही दुसऱ्या रीडरवरून येत असाल, तर तिथे एक OPML फाईल एक्सपोर्ट करा आणि ती सबस्क्रिप्शन मॅनेजमेंट पेजवर इम्पोर्ट करा. OPML (outline processor markup language) हे फीड लिस्टचे मानक फॉरमॅट आहे आणि प्रत्येक चांगला रीडर याला सपोर्ट करतो. मोठ्या प्रमाणात इम्पोर्ट केल्यास पहिल्या रिफ्रेशला वेळ लागतो कारण प्रत्येक फीड एकदा फेच केले जाते, त्यामुळे गतीचा अंदाज घेण्यापूर्वी पहिल्या cron रनला पुरेसा वेळ द्या.

तुमच्या फोनवर वाचा

FreshRSS हे Google Reader API ला सपोर्ट करते, जे जवळजवळ सर्व RSS ॲप्सना चालते. यासाठी दोन गोष्टींची पूर्तता होणे आवश्यक आहे. ऑथेंटिकेशन सेटिंग्जमध्ये, "Allow API access" हे सुरू (on) असावे, जे वरील --api-enabled फ्लॅगद्वारे आधीच सेट केले आहे. तुमच्या प्रोफाईलमध्ये, API password फील्डमध्ये एक व्हॅल्यू असणे आवश्यक आहे. हे पासवर्ड तुमच्या लॉगिन पासवर्डपेक्षा वेगळे ठेवले जाते, कारण फोन हरवण्याची शक्यता जास्त असते.

https://rss.example.com/api/ ला भेट द्या आणि "Check full server configuration" निवडा. योग्यरित्या सेट केलेले सेटअप PASS दर्शवते. येथे त्रुटी येण्याचे मुख्य कारण म्हणजे AllowEncodedSlashes On ओळ गहाळ असणे. ॲपमध्ये, सर्व्हरचा पत्ता https://rss.example.com/api/greader.php म्हणून द्या, युजरनेम म्हणून तुमचा FreshRSS युजर टाका आणि API password म्हणून तुमचा पासवर्ड वापरा.

Docker चा पर्याय

जर तुम्हाला PHP आणि Apache स्वतः हाताळायचे नसतील, तर हा प्रकल्प एक अधिकृत freshrss/freshrss इमेज प्रकाशित करतो. एक compose फाईल तुम्हाला ॲप्लिकेशन आणि त्याचा डेटाबेस एकत्रितपणे उपलब्ध करून देते. यामध्ये नेहमीचाच तडजोडीचा मुद्दा असतो: होस्टवर कमी घटक असतात, परंतु काही बिघडल्यास डीबग करण्यासाठी एक अतिरिक्त स्तर वाढतो आणि TLS (transport layer security) साठी अजूनही रिव्हर्स प्रॉक्सीची आवश्यकता असते. जर हे तुम्हाला अधिक सोयीचे वाटत असेल, तर VPS साठी Docker Compose ची मूलभूत माहिती मध्ये फाईल फॉरमॅटची माहिती दिली आहे आणि cron लाईन docker exec --user www-data freshrss php ./app/actualize_script.php अशी होईल.

बॅकअप आणि अपग्रेड

तुमची स्थिती दोन गोष्टींवर अवलंबून असते: डेटाबेस आणि /srv/freshrss/data/. पहिल्याचा डंप sudo mysqldump freshrss > freshrss.sql वापरून घ्या, दुसरी फाईल कॉपी करा आणि या दोन्ही गोष्टी सर्व्हरव्यतिरिक्त इतरत्र सुरक्षित ठेवा. तुमच्या सबस्क्रिप्शन लिस्टचे अधूनमधून OPML एक्सपोर्ट घेणे देखील फायदेशीर ठरते, कारण ती फाईल कोणत्याही RSS सॉफ्टवेअरवर तुमची वाचन व्यवस्था पुन्हा तयार करू शकते.

अपग्रेड करणे म्हणजे नवीन रिलीज त्याच डिरेक्टरीमध्ये अनपॅक करणे आणि ओनरशिप कमांड्स पुन्हा चालवणे. FreshRSS पुढच्या वेळी पेज लोड झाल्यावर स्वतःहून डेटाबेस मायग्रेशन लागू करते. आधी बॅकअप घ्या, कारण जर मायग्रेशन अयशस्वी झाले आणि तुमच्याकडे डेटाबेस रिस्टोर करण्यासाठी काही नसेल, तर ती स्थिती पूर्ववत करता येत नाही. रीडर ही एक कमी जोखमीची सेवा आहे आणि जर तुम्ही स्वतः होस्ट करण्यासारख्या गोष्टींची यादी पाहत असाल, तर हा एक चांगला पहिला पर्याय आहे.

FAQ

माझे फीड्स फक्त FreshRSS उघडल्यावरच अपडेट का होतात?

कारण जोपर्यंत तुम्ही शेड्युलर तयार करत नाही, तोपर्यंत तो अस्तित्वात नसतो. FreshRSS ब्राउझर सत्र सुरू असतानाच फीड्स रिफ्रेश करते आणि टॅब बंद केल्यावर कोणतीही प्रक्रिया करत नाही. www-data वापरकर्ता म्हणून app/actualize_script.php कॉल करणारी cron ओळ जोडा, त्यानंतर स्क्रिप्ट एकदा मॅन्युअली चालवून त्याचे आउटपुट तपासा. शांतता (कोणतेही आउटपुट नसणे) म्हणजे सहसा cron चुकीच्या वापरकर्त्याद्वारे चालवले जात आहे, ज्यामुळे PHP ला data/ मध्ये लिहिणे शक्य होत नाही.

माझे मोबाईल ॲप कनेक्ट होऊ शकत नाही, पण वेबसाइट काम करते. असे का?

Google Reader API विनंती मार्गांमध्ये (request paths) एन्कोड केलेले स्लॅश (%2F) समाविष्ट करते आणि Apache डीफॉल्टनुसार त्यांना नाकारते. व्हर्च्युअल होस्टमध्ये AllowEncodedSlashes On जोडा आणि Apache पुन्हा लोड करा. https://rss.example.com/api/ उघडून आणि "Check full server configuration" चालवून दुरुस्तीची खात्री करा, ज्यामध्ये PASS असा रिपोर्ट मिळायला हवा. तसेच, तुमच्या प्रोफाइलमध्ये API पासवर्ड सेट केला आहे का ते तपासा, कारण तो तुमच्या लॉगिन पासवर्डपेक्षा वेगळा असतो.

मी SQLite वापरावे की MariaDB?

एका वापरकर्त्यासाठी SQLite वापरा, कारण यामध्ये काहीही इन्स्टॉल करण्याची किंवा पासवर्ड व्यवस्थापित करण्याची गरज नसते. जेव्हा एकापेक्षा जास्त व्यक्ती इन्स्टन्सवर वाचतात किंवा जेव्हा तुम्ही काहीशे फीड्सच्या पुढे जाता, तेव्हा MariaDB वापरा. कारण रिफ्रेश जॉब आणि वेब इंटरफेस एकाच वेळी लिहित असतात आणि एकच फाइल लॉक ही मर्यादा ठरते. नंतरच्या काळात एक्सपोर्ट आणि इम्पोर्ट कमांड्सद्वारे या दोन्हीमध्ये स्थलांतर करणे शक्य आहे, त्यामुळे हा कायमस्वरूपी निर्णय नाही.

इन्स्टॉलर त्याचे कॉन्फिगरेशन लिहिताना अयशस्वी का होतो?

PHP हे Apache अंतर्गत www-data म्हणून चालते आणि तो वापरकर्ता root च्या मालकीच्या डिरेक्टरीमध्ये लिहू शकत नाही. sudo chown -R www-data:www-data /srv/freshrss आणि sudo chmod -R g+w /srv/freshrss/data पुन्हा चालवा, त्यानंतर इन्स्टॉलर पुन्हा सुरू करा. जर तुम्ही कमांड लाइन इन्स्टॉलर आधीच root म्हणून चालवला असेल, तर पुन्हा प्रयत्न करण्यापूर्वी data/ अंतर्गत तयार केलेल्या फाइल्स हटवा, कारण त्यांची मालकी (ownership) हीच खरी समस्या आहे.

सेल्फ-होस्टेड RSS रीडरसाठी किती सर्व्हर क्षमतेची गरज असते?

खूप कमी. लहान प्लॅनवर काहीशे फीड्स सहज हाताळले जाऊ शकतात, कारण लोड हा दर वीस मिनिटांनी होणाऱ्या HTTP फेचिंगचा अल्प कालावधी असतो आणि जुने लेख काढून टाकल्यावर डेटाबेस लहान राहतो. डिस्कचा वापर रिटेन्शननुसार वाढतो, त्यामुळे सर्व काही कायमस्वरूपी साठवून ठेवण्याऐवजी आर्कायव्हिंग सेटिंग्जमध्ये लेख काढून टाकण्याचे धोरण (purge policy) सेट करा.

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