[{"data":1,"prerenderedAt":134},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-actual-budget-على-vps-بديل-ynab-الخاص-بك-ma-ar":6,"promo-bar-likely":133},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-actual-budget-على-vps-بديل-ynab-الخاص-بك-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},173,"استضافة-actual-budget-على-vps-بديل-ynab-الخاص-بك",{"fr":12,"en":13,"ar":10,"es":14},"self-host-actual-budget-vps","self-host-actual-budget-on-a-vps-your-private-ynab-alternative","alojar-actual-budget-en-un-vps","استضافة Actual Budget على VPS: بديل YNAB الخاص بك","استضف Actual Budget على خادم VPS — تطبيق ميزانية صفرية برخصة MIT، مع مزامنة بنكية، ووصول من أجهزة متعددة، ومزامنة مشفّرة طرفًا لطرف. بلا اشتراك.",12,1,false,"2026-07-07T00:00:00+00:00","2026-10-29T03:10:23+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-actual-budget-vps-poster.svg",{"categorySlug":34,"appSlug":35},"تخطيط-موارد-المؤسسات-وإدارة-الأعمال","actual-budget","أثبت YNAB أنّ نظام الميزانية الصفرية (نظام المظاريف) ينجح، لكن اشتراكه البالغ 99 دولارًا\u002Fسنة ونموذجه السحابي الحصري لا يناسبان الجميع. يجلب Actual Budget (رخصة MIT، نحو 26 ألف نجمة على GitHub) المنهجية نفسها — أسنِد لكل دولار مهمة قبل أن تنفقه — إلى خادم ‎Node.js ذاتي الاستضافة يعمل على حاوية Docker واحدة. تبقى بياناتك في ملف SQLite على خادم VPS الخاص بك؛ ويتزامن كل جهاز، مع تشفير اختياري من طرف إلى طرف. إليك كيفية نشره في دقائق.",[38,42,45,55,58,61,83,86,104,107,110,113,124],{"type":39,"title":40,"body":41},"h2","لماذا تستضيف ميزانيتك ذاتيًا بدلًا من استخدام YNAB","طريقة الميزانية بالمظاريف بسيطة: خصّص كل دولار وارد لفئة مسمّاة (الإيجار، الطعام، الادخار، صندوق الطوارئ) قبل إنفاقه. وعندما تنفد فئة، فإما أن توقف الإنفاق أو أن تنقل المال بوعي من مظروف آخر. أشاع YNAB هذا النهج في تطبيق أنيق — لكنه يكلّف 99 دولارًا\u002Fسنة، ويخزّن بياناتك المالية على خوادمه، ولا يمكن تدقيقه. يعيد Actual Budget إنتاج الطريقة (بما في ذلك مرونة 'التأقلم مع المفاجآت' المرغوبة) بشيفرة مصدرية كاملة على GitHub برخصة MIT. واستضافته ذاتيًا على خادم VPS تعني أنّ معاملاتك وأرصدتك وتاريخ ميزانيتك لا يغادر بنيتك التحتية أبدًا — والتكلفة السنوية هي ما يكلّفه خادم VPS صغير مهما كان.",{"type":39,"title":43,"body":44},"انشر Actual Budget باستخدام Docker في دقيقتين","يأتي Actual كصورة Docker واحدة — بلا خادم قاعدة بيانات، وبلا وسيط رسائل، وبلا ملفات إعداد. حاوية واحدة، ووحدة تخزين واحدة، ومنفذ واحد. على خادم VPS بنظام Ubuntu 22.04، نفّذ: `docker run -d --restart=always -p 5006:5006 -v actual-budget:\u002Fdata --name actual-budget actualbudget\u002Factual-server`. يصبح الخادم جاهزًا في أقل من ثانيتين على المنفذ 5006. افتح `http:\u002F\u002F\u003Cyour-vps-ip>:5006` في متصفح، وانقر 'Create new budget'، وتكون قد بدأت وضع الميزانية. تُخزَّن قاعدة بيانات SQLite بأكملها في وحدة تخزين Docker المسمّاة `actual-budget` — انسخها احتياطيًا بأمر واحد `docker run --rm -v actual-budget:\u002Fdata alpine tar -czf - \u002Fdata`. يحتوي المجلد المركَّب على `\u002Fdata` على مجلدين فرعيين هما `server-files` و`user-files`: فيهما تعيش حالة الخادم كلها. لنشر دائم، فضّل ملف `‎docker-compose.yml` (تحيل الوثائق الرسمية إلى الملف الموجود في المستودع، `packages\u002Fsync-server\u002Fdocker-compose.yml`) وشغّله بالأمر `docker compose up --detach`.",{"type":46,"title":47,"items":48},"ul","ما تحصل عليه جاهزًا فور التثبيت",[49,50,51,52,53,54],"ميزانية صفرية بنظام المظاريف — أسنِد كل دولار إلى فئة قبل الإنفاق؛ ويُنبّه Actual إلى الإنفاق الزائد في الوقت الحقيقي.","مزامنة عبر أجهزة متعددة — يتشارك الهاتف والجهاز اللوحي والحاسوب المكتبي الميزانية الحية نفسها عبر الخادم المشفّر.","تشفير اختياري من طرف إلى طرف — بعد تفعيله من الإعدادات لا يخزّن الخادم سوى النص المشفّر؛ ولا يمكن قراءة معاملاتك إلا على أجهزتك.","مزامنة بنكية اختيارية: Enable Banking (بنوك أوروبية، ميزة تجريبية) أو SimpleFIN Bridge (أمريكا الشمالية) أو Akahu (نيوزيلندا) أو ‎Pluggy.ai (البرازيل)؛ وبحسب الوثائق لم يعد GoCardless يقبل حسابات جديدة. ويبقى استيراد ملفات OFX\u002FQFX\u002FCSV يدويًا ممكنًا.","تقارير: مخطّط صافي الثروة، والتدفّق النقدي، والإنفاق حسب الفئة، وتقارير مخصّصة بالكامل.","استيراد من YNAB 4 وnYNAB — رحّل تاريخك الكامل في نحو خمس دقائق.",{"type":39,"title":56,"body":57},"المتطلبات المحدّدة بالأرقام لتشغيل Actual Budget","Actual من أخفّ الخدمات استضافةً. من جهة الآلة: يكفي خادم VPS بذاكرة 1 GB ونظام Ubuntu 22.04 وزيادة، إذ يستهلك التطبيق نحو 80 MB في وضع الخمول (تحقّق من ذلك على نسختك بالأمر `docker stats`). ومن جهة الشبكة: اسم نطاق، وسجلّ DNS يشير إلى الخادم، والمنفذان 80 و443 مفتوحان للوكيل العكسي؛ ويمكن إبقاء المنفذ 5006 مغلقًا أمام العموم بعد تثبيت Caddy. أما أرقام الخادم نفسه: فالمنفذ الافتراضي هو 5006، ومجلد البيانات هو `\u002Fdata` (المتغير `ACTUAL_DATA_DIR`)، ورفع الملفات محدود افتراضيًا بـ 20 MB للمزامنة و50 MB للمزامنة المشفّرة. وقد تتجاوز ميزانية قديمة جدًا أو ضخمة هذه الحدود؛ وعندئذ تضغط إعادة ضبط المزامنة السجلّ التاريخي. وللمزامنة البنكية أضف حسابًا لدى المزوّد الذي تختاره ومفاتيح API الخاصة به، ولدى Enable Banking تطبيقًا من نوع Production يستخدم عنوان إعادة توجيه بـ HTTPS.",{"type":39,"title":59,"body":60},"أضف HTTPS كي تتمكّن من المزامنة من أي مكان","للوصول إلى ميزانيتك من خارج خادم VPS — على الهاتف أو من بلد آخر — تحتاج إلى HTTPS. وأبسط مسار هو Caddy. ثبّته على خادم VPS نفسه وأضف ملف Caddyfile من سطر واحد: `‎budget.yourdomain.com { reverse_proxy localhost:5006 }`. يتولّى Caddy شهادة Let's Encrypt تلقائيًا. وبمجرد أن يُحلَّ النطاق، افتح `https:\u002F\u002Fbudget.yourdomain.com` على هاتفك، وانقر زر 'Add to Home Screen' في المتصفح، فيصبح Actual أيقونة PWA كاملة على شاشتك الرئيسية. وتمرّ كل حركة المزامنة بين أجهزتك والخادم عبر قناة TLS هذه. ليس هذا من باب الراحة فحسب. يحتاج Actual إلى سياق آمن لتفعيل `SharedArrayBuffer` الذي يستخدمه محرّك SQLite الخاص به: فبدون HTTPS يرفض التطبيق العمل في المتصفح. تذكر الوثائق الرسمية ثلاثة أسباب لهذا التعطّل: غياب HTTPS، أو ترويسات `Cross-Origin-Embedder-Policy` و`Cross-Origin-Opener-Policy` المضبوطة خطأً، أو متصفح قديم جدًا. مع الخادم الافتراضي `actual-server` تُرسَل هاتان الترويستان أصلًا؛ وإن مررتَ عبر Nginx فلا تكرّرهما (انظر استكشاف الأخطاء أدناه). وتضيف المزامنة البنكية سببًا ثانيًا: يجب أن يستخدم عنوان إعادة التوجيه المسجَّل لدى المزوّد `https`.",{"type":62,"title":63,"steps":64},"steps","الإعداد في ست خطوات",[65,68,71,74,77,80],{"title":66,"body":67},"أنشئ خادم VPS (1 GB من ذاكرة RAM، Ubuntu 22.04)","يستهلك Actual في وضع الخمول أقل من 80 MB من ذاكرة RAM. حتى أصغر باقة VPS تمنحك متّسعًا وفيرًا.",{"title":69,"body":70},"انشر الحاوية","`docker run -d --restart=always -p 5006:5006 -v actual-budget:\u002Fdata --name actual-budget actualbudget\u002Factual-server`",{"title":72,"body":73},"أنشئ ميزانيتك","افتح المنفذ 5006 في متصفح، وانقر 'Create new budget'، وأضف حساباتك البنكية مع الأرصدة الافتتاحية.",{"title":75,"body":76},"أعدّ فئات المظاريف","أنشئ فئات (السكن، الطعام، النقل، الادخار…) ووزّع دخلك الشهري المتوقّع عليها.",{"title":78,"body":79},"أمّن باستخدام HTTPS","ثبّت Caddy، وأضف `‎budget.yourdomain.com { reverse_proxy localhost:5006 }` إلى ملف Caddyfile الخاص بك، ثم أعد التحميل.",{"title":81,"body":82},"ثبّت على الهاتف","افتح عنوان URL بصيغة HTTPS على هاتفك واستخدم 'Add to Home Screen' — فيصبح Actual Budget أيقونة PWA.",{"type":39,"title":84,"body":85},"المزامنة البنكية: Enable Banking، ميزة تجريبية","تدرج وثائق Actual الرسمية Enable Banking ضمن مزوّدي المزامنة للبنوك الأوروبية، وتصفه بأنه ميزة تجريبية: قد تحتوي على أخطاء ونواقص ووثائق غير مكتملة، وقد تُزال في إصدار لاحق. وقد لا تكون موجودة في آخر إصدار مستقر؛ وتنصح الصفحة بتفعيل الميزات التجريبية واستخدام صور `nightly` للحصول على أحدث تنفيذ. وتتجمّع ملاحظات المستخدمين في بلاغ GitHub رقم 7799 (فُتح في مايو 2026 ووُسم «experimental feature» وكان ما يزال مفتوحًا عند مراجعتنا). ولا يتضمن أي قائمة ببنوك مضمونة: عليك أن تتحقق في معالج Actual من ظهور بلدك وبنكك، ثم أن تجرّب على حساب واحد قبل الاعتماد عليها. وتذكّر أيضًا أن مفاتيح المزوّد تعيش على خادمك: فخادم VPS محصَّن جيدًا ونسخ احتياطية محمية جزء من المنظومة.",{"type":62,"title":87,"steps":88},"إعداد Enable Banking في Actual في خمس خطوات",[89,92,95,98,101],{"title":90,"body":91},"أنشئ التطبيق لدى Enable Banking","سجّل الدخول إلى حسابك لدى Enable Banking، وأنشئ تطبيقًا جديدًا واختر النوع Production.",{"title":93,"body":94},"صرّح بعنوان إعادة التوجيه عبر HTTPS","استخدم نطاقك متبوعًا بـ `\u002Fenablebanking\u002Fauth_callback`، مثل `https:\u002F\u002Fbudget.example.com\u002Fenablebanking\u002Fauth_callback`، ثم انقر Register. يجب أن يكون المخطط `https`.",{"title":96,"body":97},"اربط حساباتك من جانب Enable Banking","اربط أولًا الحسابات المطلوبة في واجهة Enable Banking؛ وإلا فلن ترى، كما تحذّر الوثائق، لا قائمة البنوك ولا قائمة الحسابات في Actual.",{"title":99,"body":100},"أدخل معرّف التطبيق والمفتاح","انسخ Application ID (بالصيغة `12345678-1234-1234-1234-123456789012`) دون أي مسافة قبله أو بعده. في Actual: More → Bank Sync → Set up Enable Banking، ألصق المعرّف وقدّم ملف المفتاح الخاص `.pem`.",{"title":102,"body":103},"اربط حسابًا في Actual ببنكك","في أحد حسابات Actual اختر Link account → Enable Banking، وحدّد بلدك وبنكك، ثم اتبع خطوات التفويض لدى البنك. تحقّق من أولى المعاملات المستوردة قبل الانتقال إلى حساب آخر.",{"type":39,"title":105,"body":106},"كيف تنسخ ميزانيتك احتياطيًا","تقيم كل البيانات في وحدة تخزين Docker المسمّاة `actual-budget`. والنسخ الاحتياطي اليومي عبر cron هو أمر واحد: `docker run --rm -v actual-budget:\u002Fdata -v \u002Fbackups:\u002Fout alpine tar czf \u002Fout\u002Factual-budget-$(date +%Y%m%d).tar.gz \u002Fdata`. استعِد عبر فكّ ملف tar إلى وحدة تخزين جديدة قبل تشغيل الحاوية. كما يملك Actual تصديرًا مدمجًا: من Settings، في قسم Data، انقر على «Export data». ينشئ ذلك ملف ZIP محمولًا لميزانيتك بأكملها يمكنك استيراده في أي نسخة أخرى من Actual. توضيحان. أولًا، تحتوي وحدة التخزين هذه أيضًا على بيانات اعتماد المزامنة البنكية: تفيد الوثائق بأنها تُخزَّن على الخادم خارج نطاق التشفير من طرف إلى طرف، فيستطيع قراءتها كل من يصل إلى قاعدة البيانات. تعامل مع الأرشيف كسرٍّ: صلاحيات مقيّدة ونسخة مشفّرة خارج الخادم. ثانيًا، بعد الاستعادة توصي الوثائق بإعادة ضبط المزامنة (Settings → Advanced → Reset Sync) من الجهاز الذي يحمل أحدث التغييرات، كي لا تتزامن النسخة الاحتياطية عائدةً إلى حالتها القديمة. جرّب استعادة كاملة على نسخة مؤقتة مرة واحدة على الأقل: فالنسخة التي لم تُستعَد قط تبقى فرضية.",{"type":39,"title":108,"body":109},"التشفير من طرف إلى طرف: ما يغطّيه وما لا يغطّيه","التشفير من طرف إلى طرف في Actual اختياري. لتفعيله افتح الميزانية وانتقل إلى الإعدادات، قسم Encryption، وانقر «enable encryption» واختر كلمة مرور: مفتاح مشتق منها يشفّر بياناتك قبل أن تغادر الجهاز. بعض النقاط التي ينبغي معرفتها قبل النقر. هو غير قابل للتراجع: لا يمكن تعطيله، والعودة إلى ملف غير مشفّر تمرّ عبر نسخة احتياطية ثم استعادة. وإن فقدت كلمة المرور فالوثائق واضحة: بياناتك المشفّرة لا يمكن استرجاعها، إلا إن احتفظت بنسخة محلية تستطيع بها إعادة ضبط المفتاح. وعلى كل جهاز جديد إدخال كلمة المرور مرة واحدة، ويجب أن تختلف عن كلمة مرور الخادم. ويستلزم التفعيل إعادة ضبط المزامنة، ويكلّف التشفير بطئًا طفيفًا أثناء المزامنة. وأخيرًا هو لا يغطّي سوى بيانات الميزانية: تبقى مفاتيح المزامنة البنكية على جانب الخادم، والبيانات المحلية على الجهاز غير مشفّرة، ومن هنا فائدة تشفير القرص.",{"type":39,"title":111,"body":112},"تحديث Actual دون فقدان بياناتك","التحديث يعني استبدال الصورة لا البيانات. مع Docker Compose: `docker compose pull && docker compose up -d`. ومع أمر `docker run` الوارد في هذا الدليل تصف الوثائق ثلاث خطوات: `docker stop`، ثم `docker container rm` على الحاوية، ثم إعادة تشغيل `docker run` نفسه مع `--pull=always`. ما دامت وحدة التخزين `actual-budget` محفوظة، تنجو الميزانية من استبدال الحاوية. وقبل كل تحديث خذ النسخة الاحتياطية الواردة في القسم السابق؛ وهذا أوجب إن كنت تستخدم صورة `nightly` لتجربة المزامنة البنكية، إذ توصي الوثائق بالنسخ الاحتياطي قبل تجربة ذلك الفرع. وثمة فخّ معروف: عند الرجوع من صورة `nightly` إلى وسم مستقر قد تواجه الرسالة «This budget cannot be loaded with this version of the app»؛ وتحيل صفحة الاستعادة حينها إلى ترحيل يدوي لـ SQLite، والأفضل ألا ترتجله على النسخة الوحيدة من بياناتك. بعد التحديث افتح التطبيق وتحقّق من آخر معاملة متزامنة ورصيد أحد الحسابات.",{"type":46,"title":114,"items":115},"استكشاف الأخطاء: رسائل فعلية وأسباب معروفة",[116,117,118,119,120,121,122,123],"`SharedArrayBufferMissing` (خطأ فادح عند التحميل) — لا HTTPS، أو ترويسات COOP\u002FCOEP غائبة أو مكرّرة، أو متصفح قديم جدًا. مع Nginx أخفِ الترويسات القادمة من الخادم (`proxy_hide_header Cross-Origin-Embedder-Policy;` و`proxy_hide_header Cross-Origin-Opener-Policy;`) واضبطها مرة واحدة: `require-corp` و`same-origin`.","`Enable Banking API error: status=403 body={\"code\":403,\"message\":\"Application is not active\"}` — تطبيق Enable Banking لم يُفعَّل بعد؛ وتبقى قائمة الحسابات فارغة دون أي خطأ في الواجهة (أُبلغ عنه في البلاغ رقم 7799).","التطبيق غير موجود رغم صحة المعرّف — يكفي وجود مسافة في بداية Application ID لإفشال الاتصال؛ احذفها (طلب أحد المستخدمين في البلاغ تجاهل المسافة وتوضيح الرسالة).","`URL \"app:\u002F\u002Factual\u002Fenablebanking\u002Fauth_callback\" uses unsupported scheme` — يدعم فريق Enable Banking عمليات إعادة التوجيه عبر `https` فقط؛ واقترح إعادة توجيه HTTPS تحوّل بعدها إلى مخطط التطبيق.","`Could not validate the credentials. Please check your Application ID and secret key.` — أُبلغ عنه في Firefox وحده بقيم تعمل في Chromium؛ ولا يوجد حل بديل مسجَّل، فجرّب متصفحًا آخر للإعداد الأولي.","مستفيدون فارغون أو مطابقون للملاحظات، ورصيد بطاقة خاطئ — هذه السلوكيات مذكورة في البلاغ رقم 7799 (مثلًا يُعرض أول رصيد يعيده المزوّد، وهو أحيانًا الائتمان المتاح، بدل الدين المسجَّل). وهي حدود في التنفيذ التجريبي لا خطأ في تثبيتك: قارنها بكشف الحساب البنكي.","`PostError: network-failure` و`Wrong transactions period requested` وتعدد تطبيقات Enable Banking — أُبلغ عنها في البلاغ نفسه دون إصلاح مسجَّل. وإن أنشأت تطبيقًا ثانيًا فافصل الحسابات واجمعها كلها تحت تطبيق واحد: فقد فشلت مزامنة الحسابات المرتبطة عبر الأول بعد إضافة الثاني.","سجلات مفصّلة — أضف `DEBUG=actual-sensitive:enable-banking,actual-sensitive:bank-sync` إلى بيئة الحاوية، وأعد التشغيل، وأعد إنتاج الخطأ، ثم أزل المتغير.",{"type":125,"title":126,"body":127},"tip","لا تنشر سجلات «sensitive» كما هي أبدًا","تحذّر الوثائق من أن هذه السجلات قد تحتوي على بيانات اعتماد ومعلومات بنكية وبيانات خاصة أخرى: فلا تلصقها في بلاغ عام ولا على Discord. وتجنّب أيضًا `DEBUG=*` أو `DEBUG=actual*` لأنهما يفعّلان المخرجات الحساسة كذلك؛ ويكفي `DEBUG=actual:*` للتصحيح العادي. راجع المقتطف واحجب ما يلزم قبل تسليمه للمشرف الذي يساعدك، وأعد قيمة `DEBUG` السابقة بعد انتهاء التشخيص.","انشر Actual Budget على خادم VPS بنقرة واحدة","استعِد السيطرة على ميزانيتك بعيدًا عن التطبيقات القائمة على الاشتراك. يوفّر ServOrbit نسخة جاهزة للاستخدام من Actual Budget — ميزانية صفرية بنظام المظاريف، ومزامنة عبر جميع أجهزتك، وتشفير من الطرف إلى الطرف — على خادم VPS في منطقتك، بتكلفة شهرية ثابتة، مع بقاء بياناتك المالية على بنية تحتية تتحكّم فيها بالكامل.","انشر Actual Budget","\u002Fvps-cloud",[],true,1794270202602]