لماذا تستضيف FileBrowser ذاتياً على خادم VPS
FileBrowser مدير ملفات ويب مكتوب بلغة Go، ويُوزَّع على هيئة ملف تنفيذي واحد. يعرض مجلداً من خادمك في واجهة حديثة: رفع، وتنزيل، ومعاينة، وتحرير نصوص، وإدارة مستخدمين، وروابط مشاركة. إنه الأداة المثالية حين يكون Nextcloud مبالغاً في حجمه: دون قاعدة بيانات خارجية، ودون PHP، وببصمة بضع عشرات من الميغابايت. على خادم VPS، يصبح نقطة الوصول عبر الويب إلى بيانات خادمك — تسليم ملفات لعميل، أو منح وصول مُقيَّد إلى مجلد، أو ببساطة إدارة ملفات تطبيق دون المرور عبر SFTP. يلزم خادم VPS لأن FileBrowser يحتاج إلى القراءة/الكتابة في نظام الملفات والعمل كخدمة دائمة، وهو ما لا تتيحه الاستضافة المشتركة.
FileBrowser مقارنةً بالبدائل المستضافة ذاتياً
مرّر الجدول أفقيًا
| المعيار | FileBrowser | Nextcloud | Seafile |
|---|---|---|---|
| قاعدة البيانات | SQLite مدمجة | MySQL/PostgreSQL مطلوبة | MySQL/PostgreSQL مطلوبة |
| الحد الأدنى من الذاكرة | ~30 ميغابايت | ~500 ميغابايت | ~200 ميغابايت |
| التثبيت | ملف تنفيذي واحد أو صورة Docker | Docker Compose متعدد الخدمات | Docker Compose متعدد الخدمات |
| إدارة المستخدمين | نعم، مع النطاقات (scopes) | نعم، كاملة | نعم، كاملة |
| عميل مزامنة سطح المكتب | لا | نعم | نعم |
| روابط مشاركة بانتهاء صلاحية | نعم، مدمج | نعم | نعم |
| التحرير عبر الإنترنت | النصوص فقط | نص، Office (OnlyOffice) | لا |
| حالة الاستخدام الرئيسية | وصول ومشاركة خفيفة | مجموعة مكتبية كاملة | مزامنة بيانات ضخمة |
فوائد ملموسة لـ FileBrowser المستضاف ذاتياً
- خفيف للغاية: ملف تنفيذي بلغة Go، وقاعدة SQLite مدمجة، ويبدأ خلال بضع ميلي ثانية.
- إدارة دقيقة للصلاحيات: يُحصر كل مستخدم في مجلد فرعي (scope) بحقوق محددة.
- روابط مشاركة بكلمة مرور ومدة صلاحية: أرسل ملفاً دون إنشاء حساب للمستلِم.
- التحرير والمعاينة داخل المتصفح (نصوص، صور، فيديوهات) دون تنزيل.
- أوامر مخصصة وخطافات (hooks): شغّل سكربتاً عند الرفع (تحويل، فحص مكافحة فيروسات).
- واجهة ويب نظيفة بديلاً عن SFTP للمستخدمين غير التقنيين.
- سمة داكنة أصلية، وواجهة متجاوبة على الجوال.
- بحث فوري عن اسم الملف في الشجرة المعروضة.
المتطلبات التقنية
FileBrowser من أكثر الأدوات اقتصاداً في الموارد: 1 vCPU و512 ميغابايت من الذاكرة تكفي بوفرة، وتعتمد مساحة القرص على حجم الملفات المراد تقديمها وحده. لا حاجة لأي قاعدة بيانات خارجية — إذ تُخزَّن الإعدادات والحسابات في ملف SQLite محلي. تحتاج إلى Docker وDocker Compose، ونطاق فرعي files.yourdomain.com موجَّه إلى خادم VPS، ووسيط عكسي لـ HTTPS. مهم: خطّط لأي مجلد من المضيف تريد عرضه (مجلد مخصص /srv/share، لا جذر النظام أبداً) واربطه كوحدة تخزين في الحاوية. تحقق من أن المنفذين 80 و443 مفتوحان في جدار الحماية، وأن خادمك يملك سجل DNS A (أو AAAA لـ IPv6) يشير إلى عنوانه العام.
انشر FileBrowser خطوة بخطوة
تجهيز المجلدات والإعدادات
على خادم VPS:
mkdir -p /opt/filebrowser /srv/share. أنشئ ملفاً فارغاً لقاعدة البيانات:touch /opt/gtsteffaniak/filebrowser.db. المجلد/srv/shareهو ما سيعرضه FileBrowser. اضبط الصلاحيات لكي يتمكن UID الحاوية من الكتابة فيه:chown -R 1000:1000 /srv/share /opt/filebrowser.كتابة ملف docker-compose.yml
اعتمد على صورة
gtsteffaniak/filebrowser:latest. اربط/srv/share:/srv(البيانات)، و/opt/gtsteffaniak/filebrowser.db:/database/filebrowser.db(قاعدة البيانات)، واضبطPUID/PGIDعلى 1000 (أو UID المجلد المشترك الفعلي). اعرض المنفذ الداخلي 80 إلى الوسيط العكسي فقط. أضفrestart: unless-stoppedلكي يعيد FileBrowser التشغيل تلقائياً بعد إعادة تشغيل الخادم.التشغيل واسترجاع بيانات الدخول
ابدأ بـ
docker compose up -d. عند أول تشغيل، ينشئ FileBrowser حسابadminبكلمة مرور تظهر في السجلات:docker compose logs filebrowser. دوّنها لأول تسجيل دخول. إذا لم تظهر كلمة المرور في السجلات، سجّل الدخول بـadmin/admin(الافتراضيات الرسمية للصورة) وغيّرها فوراً.إعداد الوسيط العكسي وSSL
ضع FileBrowser خلف وسيط عكسي HTTPS. مع Caddy:
files.yourdomain.com { reverse_proxy filebrowser:80 }. تُولَّد شهادة Let's Encrypt وتُجدَّد تلقائياً. مع nginx، أنشئ vhost مخصصاً معproxy_pass http://127.0.0.1:<port_container>;وكتلةssl_certificateتشير إلى ملفات certbot. تأكد من إرسال رأسX-Forwarded-Forلكي يسجّل FileBrowser عناوين IP العملاء الحقيقية في سجلاته.التأمين وإنشاء الحسابات
سجّل الدخول، وغيّر كلمة مرور المدير فوراً، ثم أنشئ مستخدمين مع حصر كل واحد في نطاقه (المجلد الفرعي) بالحقوق المناسبة. فعّل المصادقة الثنائية على الوسيط العكسي إذا كان الوصول حساساً. في إعدادات FileBrowser، عطّل التسجيل العام (
allow registration: false) وقيّد طرق المصادقة.اختبار المشاركة والروابط العامة
ارفع ملف اختباري، وأنشئ رابط مشاركة بانتهاء صلاحية (مثلاً 7 أيام) وكلمة مرور اختيارية. انسخ الرابط وافتحه في نافذة تصفح خاصة للتحقق من عمله دون جلسة نشطة. تحقق من احترام حد انتهاء الصلاحية من خلال واجهة الإدارة.
تأمين FileBrowser في بيئة الإنتاج
كشف مدير الملفات على الإنترنت دون طبقات أمان إضافية أمرٌ محفوف بالمخاطر. عدة إجراءات تكميلية تُطبَّق حسب سياقك: تقييد الوصول بعنوان IP على مستوى الوسيط العكسي إذا كانت الأداة مخصصة لفريق على شبكة ثابتة؛ فرض المصادقة الأساسية HTTP أمام FileBrowser لإضافة حاجز قبل شاشة تسجيل الدخول؛ تفعيل سجلات الوصول المفصّلة لاكتشاف محاولات القوة الغاشمة. لا يوفر FileBrowser قفل الحساب بعد N محاولة فاشلة بشكل أصلي: إذا كان VPS مكشوفاً للعموم، فإن قاعدة fail2ban على سجلات nginx أو Caddy لمطابقة استجابات 401 تُعدّ مكملاً أساسياً.
قائمة مراجعة الأمان قبل الإطلاق
- كلمة مرور المدير مغيّرة عند أول تشغيل.
- التسجيل العام معطّل في إعدادات FileBrowser.
- الوسيط العكسي HTTPS نشط، وإعادة توجيه HTTP→HTTPS مفعّلة.
- كل مستخدم محدود بنطاق مجلده الخاص.
- Fail2ban (أو Crowdsec) مُهيَّأ على سجلات الوسيط العكسي.
- انتهاء الصلاحية الافتراضي مفعّل عالمياً لجميع روابط المشاركة.
- نسخ احتياطية منتظمة لـ
/opt/gtsteffaniak/filebrowser.db(الحسابات والإعدادات والصلاحيات). - تقييد الوصول بعنوان IP على الوسيط العكسي إذا كان لدى المستخدمين عناوين ثابتة.
تخصيص FileBrowser: العلامة التجارية والأوامر والخطافات
يوفر FileBrowser عدة مستويات من التخصيص يمكن الوصول إليها من واجهة الإدارة. يتيح قسم العلامة التجارية (Branding) استبدال الشعار واسم التطبيق والألوان — مفيد لتقديم وصول بعلامة بيضاء للعملاء. قسم الأوامر المخصصة (Custom Commands) هو أحد أقوى الميزات: يمكن لكل نطاق (scope) حمل أوامر shell متاحة بنقرة واحدة في الواجهة. الخطافات — before_upload، وafter_upload، وbefore_delete، وafter_delete وغيرها — تتيح أتمتة إجراءات دون تدخل المستخدم: توليد صورة مصغّرة عند رفع صورة، وتشغيل فحص ClamAV، والمزامنة مع تخزين S3.
النسخ الاحتياطي وتحديث FileBrowser
يخزّن FileBrowser كامل إعداداته في ملف SQLite واحد: /opt/gtsteffaniak/filebrowser.db. يحتوي هذا الملف على الحسابات والنطاقات والصلاحيات ورموز المشاركة وإعدادات التطبيق. نسخة احتياطية يومية لهذا الملف تكفي لضمان استعادة كاملة. التحديث لا يعدو سحب الصورة الجديدة: docker compose pull && docker compose up -d. يطبّق FileBrowser ترحيلات قاعدة البيانات تلقائياً عند بدء التشغيل. قبل أي تحديث رئيسي، انسخ ملف SQLite خارج مجلد Docker للاحتفاظ بنقطة تراجع آمنة.
استثمر «الأوامر المخصصة» في FileBrowser لأتمتة المعالجة اللاحقة: مثلاً، اربط سكربتاً يُشغَّل عند كل رفع (after_upload) يولّد صورة مصغّرة أو يطلق فحص ClamAV. لمشاركات العملاء، أنشئ دائماً مستخدماً مخصصاً بنطاق مُصغَّر بدلاً من مشاركة حساب المدير، وفعّل انتهاء الصلاحية التلقائي على الروابط العامة كي لا يبقى أي ملف متاحاً إلى ما لا نهاية. لأتمتة النسخ الاحتياطية، يكفي cron يومي بـ cp /opt/gtsteffaniak/filebrowser.db /backup/filebrowser-$(date +%F).db — تذكّر حذف النسخ الأقدم من 30 يوماً لتجنب امتلاء القرص.