دليل النشر

استضافة FreshRSS على خادمك الافتراضي الخاص (VPS)

انشر على VPS Cloud ←

دليل عملي

الاستضافة الذاتية

استضافة FreshRSS على خادمك الافتراضي الخاص (VPS)

مجمِّعات RSS التجارية تُغلَق أو تغيّر أسعارها أو تبيع اهتماماتك. يقلب FreshRSS المنطق: قارئ خلاصات خفيف متعدد المستخدمين تستضيفه بنفسك. إليك كيفية نشره بشكل نظيف على خادم VPS، مع قاعدة بيانات ووكيل عكسي وشهادة HTTPS.

10 دقائق للقراءةعدد الخطوات: 9
المحتويات· لماذا تستضيف ‎FreshRSS‎ ذاتيًا على خادم ‎VPS‎1/10
  1. 01لماذا تستضيف ‎FreshRSS‎ ذاتيًا على خادم ‎VPS‎
  2. 02فوائد ملموسة لـ‎FreshRSS‎ المُستضاف ذاتيًا
  3. 03المتطلبات التقنية
  4. 04نشر ‎FreshRSS‎ خطوة بخطوة
  5. 05الإعداد المتقدم لـ‎FreshRSS‎
  6. 06واجهة ‎FreshRSS‎ البرمجية لعملاء الذكاء الاصطناعي والأتمتة
  7. 07‎FreshRSS‎ مقابل ‎Miniflux‎ مقابل ‎Tiny Tiny RSS‎
  8. 08النسخ الاحتياطي وترحيل ‎FreshRSS‎
  9. 09استكشاف الأخطاء: 4 أخطاء شائعة
  10. 10حالة استخدام: خلاصة مراقبة تقنية للمطور

لماذا تستضيف ‎FreshRSS‎ ذاتيًا على خادم ‎VPS‎

FreshRSS مجمِّع خلاصات RSS/Atom مكتوب بلغة PHP، مصمَّم ليكون خفيف الموارد مع إدارة آلاف المقالات. تحلّ الاستضافة الذاتية على خادم VPS ثلاث مشكلات لا تعالجها الخدمات المغلقة: الاستدامة (لا تختفي متابعتك بين ليلة وضحاها)، والخصوصية (لا أحد يحلّل اشتراكاتك)، والحداثة (تحدّد أنت وتيرة التحديث عبر cron، دون حصة مفروضة). خادم VPS، خلافًا للاستضافة المشتركة، يمنحك وصولاً كاملاً عبر SSH وحقّ تشغيل حاوية Docker وجدولة المهام — وهو بالضبط ما يحتاجه FreshRSS لتحديث الخلاصات في الخلفية.

فوائد ملموسة لـ‎FreshRSS‎ المُستضاف ذاتيًا

  • واجهة برمجية أصلية متوافقة مع ‎Fever‎ و‎Google Reader‎: زامِن مع ‎Reeder‎ أو ‎FeedMe‎ أو ‎Fluent Reader‎ على الجوال.
  • امتداد ‎GReader‎ / الكشط (scraping): استرجع المحتوى الكامل للمقالات المبتورة بفضل مرشّحات ‎XPath‎.
  • متعدد المستخدمين مع حصص لكل حساب: مثالي لمشاركة نسخة داخل وكالة.
  • بصمة ذاكرة ضئيلة (200 إلى 300 ميغابايت): يعمل على أصغر خادم ‎VPS‎ دون تعثّر.
  • تحديث مُدار بـ‎cron‎: أنت تقرّر ما إذا كانت الخلاصات تُحدَّث كل 5 دقائق أو كل ساعة.
  • نسخ احتياطي بسيط: قاعدة بيانات ‎SQLite‎/‎MySQL‎ ومجلد بيانات يكفيان لاستعادة كل شيء.

المتطلبات التقنية

FreshRSS من أكثر تطبيقات الاستضافة الذاتية اقتصادًا في الموارد. احسب 1 vCPU و1 غيغابايت من RAM لنسخة شخصية بعدد قليل من المستخدمين؛ ويكفي 10 غيغابايت من القرص بسعة كبيرة، إذ يشغل معظمه سجلّ المقالات. على الجانب البرمجي: Docker وإضافة Docker Compose مثبّتتان على الخادم VPS، واسم نطاق (أو نطاق فرعي من نوع rss.yourdomain.com) موجَّه بسجل A إلى عنوان IP الخادم، ومنفذ 80/443 مفتوح للوكيل العكسي. لا حاجة لتثبيت PHP على المضيف: تتضمّن الصورة الرسمية freshrss/freshrss كل شيء.

نشر ‎FreshRSS‎ خطوة بخطوة

  1. تجهيز الخادم ‎VPS‎ و‎Docker‎

    اتّصل عبر SSH، وحدّث النظام (apt update && apt upgrade -y)، ثم ثبّت Docker: curl -fsSL https://get.docker.com | sh. أضف مستخدمك إلى مجموعة docker: usermod -aG docker $USER. تحقّق بـdocker compose version. أنشئ مجلد المشروع: mkdir -p /opt/freshrss && cd /opt/freshrss.

  2. كتابة ملف ‎docker-compose.yml‎

    أنشئ الملف docker-compose.yml بالمحتوى التالي:

    services:
      freshrss:
        image: freshrss/freshrss:latest
        container_name: freshrss
        restart: unless-stopped
        environment:
          CRON_MIN: "*/20"
          TZ: "Africa/Casablanca"
        volumes:
          - ./data:/var/www/FreshRSS/data
          - ./extensions:/var/www/FreshRSS/extensions
        ports:
          - "127.0.0.1:8080:80"

    المنفذ مرتبط بـ127.0.0.1 فقط: الوكيل العكسي المحلي وحده يمكنه الوصول إليه.

  3. تهيئة ‎nginx‎ كوكيل عكسي

    ثبّت nginx: apt install -y nginx. أنشئ الملف /etc/nginx/sites-available/freshrss:

    server {
        listen 80;
        server_name rss.yourdomain.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
            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;
        }
    }

    فعّل الـvhost: ln -s /etc/nginx/sites-available/freshrss /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx.

  4. الحصول على شهادة ‎TLS‎ عبر ‎Certbot‎

    ثبّت Certbot وإضافة nginx: apt install -y certbot python3-certbot-nginx. أصدر الشهادة: certbot --nginx -d rss.yourdomain.com. يعدّل Certbot تلقائيًا وضع vhost الـnginx للاستماع على المنفذ 443 وإعادة توجيه HTTP إلى HTTPS. يُمكَّن التجديد التلقائي افتراضيًا عبر مؤقت systemd الخاص بـcertbot.

  5. تشغيل الحاوية

    شغّل المكدّس من /opt/freshrss: docker compose up -d. تابِع التهيئة: docker compose logs -f. تطبّق الحاوية عمليات الترحيل وتنشئ شجرة البيانات عند التشغيل الأول. تحقّق بعد ذلك من أن FreshRSS يستجيب: curl -I https://rss.yourdomain.com.

  6. إكمال التثبيت عبر الويب

    افتح https://rss.yourdomain.com في متصفحك. يطلب منك المساعد اختيار خلفية قاعدة البيانات: حدّد SQLite للاستخدام الشخصي (ملف واحد، لا خدمة للإدارة)، أو MySQL إذا كان متوقعًا عشرات المستخدمين. أنشئ حساب المسؤول بكلمة مرور قوية.

  7. تفعيل الواجهة البرمجية (‎API‎)

    انتقل إلى ملف التعريف ← إدارة API. اختر «تفعيل GReader/Fever API» وعيّن كلمة مرور API منفصلة عن كلمة مرورك الرئيسية. لاحظ عنوان URL الأساسي لـAPI: https://rss.yourdomain.com/api/greader.php.

  8. استيراد ملف ‎OPML‎

    صدّر اشتراكاتك من قارئك القديم (Feedly، Inoreader…) بصيغة OPML. في FreshRSS، انتقل إلى اشتراكات ← استيراد/تصدير ← استيراد ملف OPML. تُعاد إنشاء فئاتك وخلاصاتك في ثوانٍ. تحقّق من أول تحديث يدوي: docker compose exec freshrss php ./cli/actualize.php.

  9. التحقق من ‎cron‎ التلقائي

    تُهيّئ المتغيّر CRON_MIN=*/20 الـcron الداخلي للحاوية لتحديث جميع الخلاصات كل 20 دقيقة. تأكد من تشغيله: docker compose exec freshrss crontab -l. إذا كانت النتيجة فارغة، أضف CRON_MIN: "*/20" تحت environment: وأعد إنشاء الحاوية.

بالنسبة للمواقع التي تنشر مقتطفًا فقط في خلاصتها، ثبّت الامتداد الرسمي «FreshRSS Content Selector»: اضبط محدِّد CSS (مثل article.post-content) لكل اشتراك، وسيجلب FreshRSS النص الكامل عند كل تحديث. ادمجه مع امتداد المرشّحات لإخفاء المقالات المموَّلة المكتشَفة بالكلمة المفتاحية تلقائيًا.

الإعداد المتقدم لـ‎FreshRSS‎

بمجرد تشغيل النسخة الأساسية، تحوّل ثلاثة محاور تحسينية FreshRSS من قارئ بسيط إلى أداة مراقبة احترافية:

الامتدادات: RSS-Bridge وFullTextRss. انسخ الامتداد إلى /opt/freshrss/extensions/، ثم فعّله في قسم الامتدادات بالواجهة. يُولِّد RSS-Bridge خلاصة RSS للمواقع التي لا توفرها (Twitter/X العام، Instagram، LinkedIn). تُكمل FullTextRss المقالات المبتورة بواسطة قواعد مواقع محددة مسبقًا — أكثر من 2000 موقع مُهيَّأة بالفعل في قاعدة القواعد المجتمعية.

وتيرة التحديث. تناسب القيمة CRON_MIN=*/20 معظم احتياجات المراقبة. للمصادر الحرجة (تنبيهات الأمان، أسعار الأسهم)، انزل إلى */5. لتقليل الحمل على خادمك مع كثير من الاشتراكات غير النشطة، ارتفع إلى */60.

SQLite مقابل MySQL. يكفي SQLite لبضع مئات الآلاف من المقالات وعدد قليل من المستخدمين. عند تجاوز 5 مستخدمين متزامنين أو 500,000 مقال، يوفر MySQL أداءً أفضل. الترحيل من SQLite إلى MySQL ممكن عبر أداة CLI convert-db.php المضمّنة في الحاوية.

واجهة ‎FreshRSS‎ البرمجية لعملاء الذكاء الاصطناعي والأتمتة

FreshRSS من المجمِّعات النادرة التي تطبّق واجهتين برمجيتين قياسيتين: واجهة Google Reader (/api/greader.php) وواجهة Fever (/api/fever.php). هذه الواجهات الموثّقة علنيًا تُتيح التكامل السلس مع عشرات أدوات الأتمتة.

تكامل n8n. في سير عمل n8n، استخدم عقدة HTTP Request مع مصادقة Basic (بيانات اعتماد API الخاصة بـFreshRSS). استدعِ نقطة نهاية GReader لجلب المقالات غير المقروءة الجديدة، ثم سلسل مع عقدة OpenAI لتلخيص كل مقالة وإرسال الملخص إلى Slack أو بريد إلكتروني.

تكامل Make (سابقًا Integromat). يُتيح وحدة HTTP في Make نفس استدعاءات REST. سيناريو نموذجي: كل ساعة، جلب المقالات المميّزة بنجمة، إثراؤها بنموذج لغوي كبير عبر webhook، ودفعها إلى Notion أو Airtable لبناء قاعدة معرفة منظَّمة.

عملاء الذكاء الاصطناعي. يمكن لأطر العمل مثل LangChain أو LlamaIndex الاستعلام مباشرةً عن واجهة FreshRSS البرمجية لتغذية خط أنابيب RAG على مراقبتك الشخصية. تصبح نسختك مصدر بيانات خاصًا ومنظَّمًا وحديثًا، بعيدًا عن النماذج العامة.

‎FreshRSS‎ مقابل ‎Miniflux‎ مقابل ‎Tiny Tiny RSS‎

مرّر الجدول أفقيًا

المعيارFreshRSSMinifluxTiny Tiny RSS
اللغة / المكدّسPHP + SQLite/MySQLGo (ثنائي واحد)PHP + PostgreSQL
الذاكرة العشوائية الدنيا~50 ميغابايت (بدون Docker)~20 ميغابايت~100 ميغابايت
الواجهة البرمجية القياسيةGoogle Reader + FeverMiniflux REST + FeverGoogle Reader (إضافة)
الامتدادات / الإضافاتغنية (أكثر من 30 رسمية)محدودة (مرشّحات أصلية)إضافات طرف ثالث كثيرة
الرخصةAGPL-3.0Apache-2.0GPL-3.0

النسخ الاحتياطي وترحيل ‎FreshRSS‎

من مزايا الاستضافة الذاتية السيطرة الكاملة على بياناتك. مستويان من النسخ الاحتياطي يغطيان جميع السيناريوهات:

تصدير OPML (الاشتراكات). من اشتراكات ← استيراد/تصدير ← تصدير OPML، تُنشئ ملف XML يحمل جميع خلاصاتك وفئاتك. أتمتِ ذلك عبر crontab: 0 3 * * * docker exec freshrss php /var/www/FreshRSS/cli/export-opml-file.php > /opt/backups/freshrss-opml-$(date +%F).xml.

نسخ احتياطي كامل (قاعدة البيانات + البيانات). للاحتفاظ بسجل القراءة والنجوم، انسخ وحدة Docker بالكامل: rsync -a /opt/freshrss/data/ /opt/backups/freshrss-data-$(date +%F)/.

الترحيل بين خوادم VPS. العملية خطية: (1) أوقف الحاوية المصدر (docker compose stop)؛ (2) انسخ مجلد data/ إلى الخادم الجديد عبر rsync أو scp؛ (3) انشر نفس docker-compose.yml على الخادم الجديد وابدأ التشغيل؛ (4) حدّث سجل DNS A إلى عنوان IP الجديد. الوقت الإجمالي لنسخة شخصية: أقل من 10 دقائق، دون فقدان أي بيانات.

استكشاف الأخطاء: 4 أخطاء شائعة

1. Cron غير نشط — الخلاصات لا تتحدث. العَرَض: يبقى عمود «آخر تحديث» ثابتًا. تحقّق أولاً من تشغيل cron الداخلي: docker compose exec freshrss crontab -l. إذا كانت النتيجة فارغة، أضف CRON_MIN: "*/20" تحت environment: وأعد إنشاء الحاوية.

2. خلاصة لا تتحدث أبدًا رغم نشاط cron. السبب الأكثر شيوعًا: الخلاصة ترجع باستمرار خطأ HTTP 429 (تحديد المعدل) أو 403. تحقّق في اشتراكات ← إدارة ← آخر خطأ. لموقع يحجب الطلبات دون User-Agent، أضف User-Agent صريحًا في الإعدادات المتقدمة للخلاصة.

3. خطأ SSL «certificate verify failed». يحدث حين تحاول الحاوية الوصول إلى خلاصة HTTPS بشهادة موقَّعة ذاتيًا أو منتهية الصلاحية. الخيارات: تعطيل التحقق من SSL لهذه الخلاصة تحديدًا، أو تحديث قاعدة بيانات CA للحاوية (docker compose exec freshrss update-ca-certificates).

4. امتداد FullTextRss صامت — المحتوى لا يزال مبتورًا. تحقّق من تفعيل الامتداد في الامتدادات وصحّة عنوان URL لخدمة FullTextRss في إعداداته. إذا كنت تستخدم النسخة المستضافة ذاتيًا، اختبر الرابط مباشرةً في المتصفح. استجابة JSON فارغة تعني أن محدِّد الموقع غير موجود في قاعدة القواعد — أنشئ ملف قواعد مخصصة في site_patterns/ وأضِفه كحجم Docker.

حالة استخدام: خلاصة مراقبة تقنية للمطور

أضف خلاصات إصدار GitHub لكل تبعية في مشروعك (https://github.com/<owner>/<repo>/releases.atom)، وخلاصة Hacker News (https://news.ycombinator.com/rss)، ومدونات المشرفين الرئيسيين في منظومتك، وخلاصات CVE لبيئة التشغيل ونظام التشغيل.

يقدم FreshRSS الجدول الزمني الخام — بدون ترتيب خوارزمي ولا منشورات مروّجة. أنشئ قاعدة إضافة نجمة تلقائية: أي مقالة تحتوي 'تنبيه أمني' أو 'تغيير جذري' تحصل على نجمة وتُطلق إشعار ntfy على هاتفك. تحصل على الإشارة، دون ضجيج المنصات الاجتماعية.

أطلق متابعتك الإخبارية في دقائق

يأتي خادم ServOrbit Cloud VPS مع Docker مُثبَّت مسبقًا ووكيل عكسي جاهز للاستخدام: انشر قالب FreshRSS واستعِد التحكم بخلاصاتك، دون الاعتماد على أي خدمة طرف ثالث.