[{"data":1,"prerenderedAt":298},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-kimai-على-vps-تتبع-الوقت-مفتوح-المصدر-ma-ar":6,"promo-bar-likely":297},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-kimai-على-vps-تتبع-الوقت-مفتوح-المصدر-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":234,"ctaBody":235,"ctaButton":236,"ctaUrl":237,"relatedPosts":238},341,"استضافة-kimai-على-vps-تتبع-الوقت-مفتوح-المصدر",{"fr":12,"en":13,"ar":10,"es":14},"heberger-kimai-vps","self-host-kimai-vps-open-source-time-tracking","alojar-kimai-en-vps-seguimiento-tiempo-open-source","استضافة Kimai على VPS: تتبُّع الوقت مفتوح المصدر","شغّل Kimai بـ Docker على VPS: ملف compose وHTTPS والأدوار والميزانيات والفوترة وAPI والنسخ الاحتياطي وحل المشكلات الشائعة.",14,0,false,"2026-01-09T00:00:00+00:00","2026-11-04T16:30:27+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\u002Fheberger-kimai-vps-poster.svg",{"categorySlug":34,"appSlug":35},"تخطيط-موارد-المؤسسات-وإدارة-الأعمال","kimai","Kimai برنامج مفتوح المصدر لتتبُّع الوقت بترخيص MIT، قادر على أن يحلّ محلّ Toggl Track أو Clockify أو Harvest على المدى الطويل: مؤقّت، وكشوف ساعات، وعملاء، ومشاريع، وأنشطة، وأسعار بالساعة، وميزانيات، وتقارير، وفوترة. يتجاوز هذا الدليل مرحلة التثبيت؛ فهو يشرح بنية منظومة Docker، وملف `docker-compose.yml` مشروحًا لمن يفضّل النشر اليدوي، والنشر عبر HTTPS خلف وكيل عكسي، وإنشاء الحسابات من سطر الأوامر، ونموذج البيانات والأدوار، والفوترة، وواجهة REST API، والإضافات، والنسخ الاحتياطي، والتحديثات، وأكثر الأخطاء شيوعًا. في النهاية ستكون قادرًا على تشغيل Kimai في بيئة الإنتاج لفريق كامل، لا مجرد تشغيله لأول مرة.",[38,42,50,53,62,65,83,86,89,97,115,118,121,130,133,139,142,157,161,164,167,170,178,181,189,229,232],{"type":39,"title":40,"body":41},"h2","لماذا تستضيف Kimai بنفسك؟","تجمع أداة تتبُّع الوقت بيانات حساسة: من يعمل لصالح أي عميل، وكم ساعة، وبأي سعر. في خدمة SaaS تبقى هذه المعلومات لدى المزوّد، وترتفع الكلفة مع كل مستخدم جديد. أما عندما تستضيف Kimai على VPS خاص بك، فتبقى قاعدة البيانات تحت يدك، وتضيف المستخدمين دون رسوم ترخيص، وتختار أنت توقيت التحديثات.",{"type":43,"items":44},"ul",[45,46,47,48,49],"**رخصة MIT** — بلا رسوم ترخيص وبلا حدّ لعدد المستخدمين يفرضه المزوّد.","**فوترة مدمجة** — تُنشأ الفواتير مباشرة من كشوف الساعات، دون أي وحدة خارجية.","**REST API موثّقة** — اربط أدواتك الداخلية (التذاكر، الموارد البشرية، لوحات المتابعة) ببياناتك أنت.","**سيادة البيانات** — الساعات والأسعار وملفات العملاء تبقى في قاعدة MySQL الخاصة بك.","**منظومة خفيفة** — حاوية تطبيق واحدة وقاعدة MySQL، تعمل براحة على خطة VPS للمبتدئين.",{"type":39,"title":51,"body":52},"البنية: ما الذي يعمل على الـ VPS","Kimai تطبيق **PHP** مبني على إطار العمل **Symfony**. يعتمد الإصدار 2 على **MySQL أو MariaDB**، ولم يعد يدعم SQLite. تتوفر الصورة الرسمية `kimai\u002Fkimai2` بنسختين: `apache` (خادم ويب مدمج يستمع على المنفذ **8001**) و`fpm` (مخصّصة للعمل خلف خادم Nginx خاص بك). يستخدم قالب ServOrbit الصورة `kimai\u002Fkimai2:apache-latest` مع MySQL 8.0، فتقتصر المنظومة على حاويتين فقط.",{"type":43,"title":54,"items":55},"مكوّنات المنظومة",[56,57,58,59,60,61],"**الحاوية `kimai`** — Apache وPHP وتطبيق Symfony في المسار `\u002Fopt\u002Fkimai`، والمنفذ 8001 منشور على `127.0.0.1` فقط.","**الحاوية `db`** — MySQL 8.0 مع فحص صحة `mysqladmin ping`، فلا يبدأ Kimai إلا بعد جاهزية قاعدة البيانات.","**الحجم `kimai_db`** — ملفات بيانات MySQL، أي جميع كشوف الساعات التي تسجّلها.","**الحجم `kimai_data`** — المسار `\u002Fopt\u002Fkimai\u002Fvar\u002Fdata`، أي الملفات المرفوعة عبر التطبيق (قوالب الفواتير والمستندات).","**الحجم `kimai_public`** — المسار `\u002Fopt\u002Fkimai\u002Fpublic\u002Favatars`، أي صور المستخدمين الرمزية.","**الوكيل العكسي** — Nginx أو Caddy أو Traefik ينهي اتصال HTTPS ويمرّر الطلبات إلى المنفذ المحلي 8001.",{"type":39,"title":63,"body":64},"نشر Kimai على ServOrbit","يجهّز Marketplace الخاص بـ ServOrbit المنظومة كاملة على Ubuntu 24.04: Docker وMySQL 8.0 وحاوية Kimai والأحجام الثلاثة وكلمة مرور مولَّدة لحساب المسؤول. لا تحتاج إلى اسم نطاق للبدء.",{"type":66,"steps":67},"steps",[68,71,74,77,80],{"title":69,"body":70},"إطلاق النشر","في منطقة العميل: **Marketplace ← ERP والأعمال ← Kimai ← نشر**. ينشئ ServOrbit الـ VPS ويثبّت Docker ويشغّل المنظومة (MySQL 8 + Apache\u002FPHP) تلقائيًا.",{"title":72,"body":73},"استلام بيانات الدخول","انتظر **60 ثانية** تقريبًا. تعرض بطاقة التطبيق بيانات الدخول: المعرّف `admin@kimai.local` وكلمة مرور مولَّدة.",{"title":75,"body":76},"الاتصال دون نطاق","افتح نفق SSH بالأمر `ssh -L 8080:127.0.0.1:8001 root@\u003CIP>` ثم افتح `http:\u002F\u002Flocalhost:8080`. أضف نطاقًا من لوحة التحكم متى أصبحت جاهزًا.",{"title":78,"body":79},"إنشاء العميل والمشروع","أنشئ أول **عميل**، ثم **مشروعًا** مرتبطًا به، ونشاطًا واحدًا على الأقل. حدّد سعرًا بالساعة أو ميزانية.",{"title":81,"body":82},"تسجيل الساعات الأولى","انقر **▶** لتشغيل المؤقّت واختر المشروع والنشاط، وسيسجّل Kimai وقتك أثناء العمل.",{"type":84,"body":85},"tip","عند أول تسجيل دخول، افتح ملفك الشخصي واستبدل العنوان `admin@kimai.local` بعنوان بريد حقيقي، وغيّر كلمة المرور المولَّدة. احتفظ بعد ذلك بحساب المسؤول الأعلى لأعمال الإدارة فقط، وأنشئ حسابات بأسماء أصحابها للعمل اليومي.",{"type":39,"title":87,"body":88},"التثبيت اليدوي باستخدام Docker Compose","إن كنت تفضّل تثبيت Kimai بنفسك على VPS قائم، فهذا ملف `docker-compose.yml` مكافئ للقالب، مع حجم إضافي للإضافات. ضعه في مجلد مخصّص مثل `\u002Fopt\u002Fkimai`.\n\n```yaml\nservices:\n  db:\n    image: mysql:8.0\n    restart: unless-stopped\n    environment:\n      MYSQL_DATABASE: kimai\n      MYSQL_USER: kimai\n      MYSQL_PASSWORD: ${DB_PASSWORD}\n      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}\n    volumes:\n      - kimai_db:\u002Fvar\u002Flib\u002Fmysql\n    healthcheck:\n      test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"127.0.0.1\", \"--silent\"]\n      interval: 10s\n      retries: 12\n\n  kimai:\n    image: kimai\u002Fkimai2:apache-latest\n    restart: unless-stopped\n    depends_on:\n      db:\n        condition: service_healthy\n    ports:\n      - \"127.0.0.1:8001:8001\"\n    environment:\n      DATABASE_URL: \"mysql:\u002F\u002Fkimai:${DB_PASSWORD}@db\u002Fkimai?charset=utf8mb4&serverVersion=8.0.34\"\n      APP_SECRET: ${APP_SECRET}\n      ADMINMAIL: admin@your-domain.com\n      ADMINPASS: ${ADMIN_PASSWORD}\n      TRUSTED_HOSTS: \"localhost,127.0.0.1,kimai.your-domain.com\"\n    volumes:\n      - kimai_data:\u002Fopt\u002Fkimai\u002Fvar\u002Fdata\n      - kimai_plugins:\u002Fopt\u002Fkimai\u002Fvar\u002Fplugins\n      - kimai_public:\u002Fopt\u002Fkimai\u002Fpublic\u002Favatars\n\nvolumes:\n  kimai_db:\n  kimai_data:\n  kimai_plugins:\n  kimai_public:\n```\n\nبعد ذلك ولّد الأسرار في ملف ‎`.env` الذي يقرؤه Compose تلقائيًا، ثم شغّل المنظومة. عند التشغيل الأول تنشئ الحاوية مخطّط قاعدة البيانات وحساب المسؤول المحدَّد في `ADMINMAIL` و`ADMINPASS`.\n\n```bash\ncat > .env \u003C\u003CEOF\nDB_PASSWORD=$(openssl rand -hex 16)\nDB_ROOT_PASSWORD=$(openssl rand -hex 16)\nAPP_SECRET=$(openssl rand -hex 32)\nADMIN_PASSWORD=$(openssl rand -hex 12)\nEOF\nchmod 600 .env\ndocker compose up -d\ndocker compose logs -f kimai\n```",{"type":43,"title":90,"items":91},"متغيّرات البيئة التي ينبغي معرفتها",[92,93,94,95,96],"`DATABASE_URL` — سلسلة اتصال Doctrine: المستخدم وكلمة المرور والمضيف `db` واسم القاعدة و`charset=utf8mb4` و`serverVersion`. ولأن كلمة المرور جزء من عنوان URL، تجنّب فيها الرموز `@` و`\u002F` و`:`؛ والسرّ الست عشري يحلّ المسألة.","`APP_SECRET` — مفتاح Symfony الذي تُوقَّع به الجلسات والرموز. استخدم قيمة عشوائية طويلة تولّدها مرة واحدة ولا تغيّرها دون سبب، لأن تغييرها يُخرج جميع المستخدمين من جلساتهم.","`ADMINMAIL` و`ADMINPASS` — حساب المسؤول الأعلى الذي يُنشأ عند التشغيل الأول. بعد أن تعمل النسخة، أدِر الحسابات من الواجهة أو من سطر الأوامر.","`TRUSTED_HOSTS` — قائمة أسماء المضيفين المقبولة مفصولة بفواصل. يجب أن تتضمّن نطاقك العام، وإلا رفض Symfony الطلبات.","`MAILER_URL` — وسيلة إرسال البريد. يضبطها قالب ServOrbit على `null:\u002F\u002Flocalhost`، فلا تُرسَل أي رسالة. حدّد خادم SMTP لتفعيل استعادة كلمة المرور والإشعارات.",{"type":66,"title":98,"steps":99},"وضع Kimai خلف نطاق مع HTTPS",[100,103,106,109,112],{"title":101,"body":102},"توجيه DNS","أنشئ سجل A للنطاق الفرعي `kimai.your-domain.com` يشير إلى عنوان IP العام للـ VPS، وتحقّق من الانتشار بالأمر `dig +short kimai.your-domain.com`.",{"title":104,"body":105},"إعداد الوكيل العكسي","المنفذ 8001 يستمع على `127.0.0.1` فقط، فلا يصل إليه إلا الوكيل المحلي. مثال على كتلة إعداد Nginx:\n\n```nginx\nserver {\n    listen 80;\n    server_name kimai.your-domain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:8001;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```",{"title":107,"body":108},"الحصول على الشهادة","باستخدام certbot وإضافته الخاصة بـ Nginx تُصدَر شهادة Let's Encrypt وتُستكمل كتلة `server` للمنفذ 443:\n\n```bash\napt install -y certbot python3-certbot-nginx\ncertbot --nginx -d kimai.your-domain.com\n```",{"title":110,"body":111},"تعريف Kimai بالنطاق","أضف `kimai.your-domain.com` إلى `TRUSTED_HOSTS`، ثم نفّذ `docker compose up -d` لإعادة إنشاء الحاوية. إذا بقيت الروابط المولَّدة تبدأ بـ `http:\u002F\u002F`، فراجع توثيق Kimai الخاص بالوكلاء العكسيين: لا تُعتمد ترويسات `X-Forwarded-*` إلا إذا جاءت من وكيل موثوق.",{"title":113,"body":114},"إغلاق ما لا حاجة إليه","في الجدار الناري افتح المنافذ 22 و80 و443 فقط. لا تنشر MySQL أي منفذ، ولا ينبغي أن تفعل.",{"type":39,"title":116,"body":117},"إنشاء المستخدمين من سطر الأوامر","تكفي الواجهة لإدارة الحسابات يوميًا، لكن وحدة تحكّم Symfony في Kimai مفيدة جدًا لأتمتة انضمام الموظفين الجدد أو لاستعادة الوصول. يأخذ الأمر `kimai:user:create` اسم المستخدم وعنوان البريد والدور، ثم يطلب كلمة المرور:\n\n```bash\ndocker compose exec kimai \u002Fopt\u002Fkimai\u002Fbin\u002Fconsole kimai:user:create alice alice@your-domain.com ROLE_TEAMLEAD\n```\n\nوتوفّر وحدة التحكّم نفسها الأمر `kimai:reload` لإعادة بناء ذاكرة التخزين المؤقت بعد تعديل الإعدادات، والأمر `kimai:update` لتطبيق ترحيلات قاعدة البيانات في التثبيتات خارج Docker. نفّذ `bin\u002Fconsole list kimai` داخل الحاوية لعرض الأوامر المتاحة في إصدارك.",{"type":39,"title":119,"body":120},"نموذج البيانات: العملاء والمشاريع والأنشطة","ينظّم Kimai الوقت على ثلاثة مستويات. **العميل** يحمل العملة والمنطقة الزمنية وبيانات الفوترة. **المشروع** يتبع عميلًا واحدًا، ويمكن أن تكون له تواريخ بداية ونهاية ورقم طلب وميزانية. **النشاط** يصف طبيعة العمل (تطوير، اجتماع، دعم)، ويمكن ربطه بمشروع محدّد أو جعله **عامًا** متاحًا في كل المشاريع. وكل إدخال في كشف الساعات يربط مستخدمًا ومشروعًا ونشاطًا وفترة زمنية، مع وصف ووسوم عند الحاجة. إن تصميم هذا التسلسل جيدًا منذ البداية يوفّر عليك تصحيحات مرهقة لاحقًا: عميل لكل جهة تُصدر لها فواتير، ومشروع لكل مهمة أو عقد، وأنشطة عامة للأعمال المشتركة بين المشاريع.",{"type":43,"title":122,"items":123},"الأسعار والميزانيات",[124,125,126,127,128,129],"**السعر بالساعة** — يُحدَّد على مستوى العميل أو المشروع أو النشاط أو المستخدم، ويُطبَّق المستوى الأدق على كل إدخال.","**السعر الثابت** — مبلغ مقطوع لكل إدخال، مفيد لخدمة تُفوتَر بسعر محدّد أيًّا كانت مدتها.","**السعر الداخلي** — الكلفة الحقيقية للساعة بالنسبة إليك، منفصلة عن السعر المفوتَر، لقياس ربحية كل مشروع.","**ميزانية بالوقت أو بالمال** — على مستوى العميل أو المشروع أو النشاط، مع مؤشّر مرئي لنسبة الاستهلاك.","**ميزانية شهرية أو إجمالية** — تُتابَع باقة صيانة شهرية بطريقة مختلفة عن مشروع بسعر ثابت طوال مدّته.","**التجاوز** — تُظهر لوحات المتابعة نسبة استهلاك الميزانية، ويتيح أحد الإعدادات السماح بالإدخالات التي تتجاوزها أو منعها.",{"type":39,"title":131,"body":132},"الأدوار والفرق والصلاحيات","يعتمد Kimai أدوارًا متدرّجة، وتتيح شاشة **الأدوار والصلاحيات** ضبط ما يراه كل دور وما يعدّله بدقة. وتكمّل **الفرق** هذا النظام: العميل أو المشروع أو النشاط المقصور على فريق لا يظهر إلا لأعضائه، و**قائد الفريق** يراجع ساعات فريقه ويصحّحها دون الاطلاع على بقية الشركة. وللمتعاون الخارجي، أنشئ حساب مستخدم مقصورًا على فريق مخصّص له.",{"type":43,"items":134},[135,136,137,138],"`ROLE_USER` — يسجّل ساعاته ويراجعها في المشاريع المتاحة له.","`ROLE_TEAMLEAD` — يرى ساعات أعضاء فرقه ويعدّلها ويطّلع على تقاريرهم.","`ROLE_ADMIN` — يدير العملاء والمشاريع والأنشطة والفواتير والمستخدمين.","`ROLE_SUPER_ADMIN` — صلاحيات كاملة، بما فيها إعدادات النظام والصلاحيات.",{"type":39,"title":140,"body":141},"الفوترة انطلاقًا من كشوف الساعات","تحوّل وحدة الفوترة مجموعة مختارة من الساعات إلى مستند. من قائمة **الفواتير** تختار عميلًا وفترة، ومشروعًا إن شئت، ثم **قالبًا**. يحسب Kimai المبالغ انطلاقًا من الأسعار، ويعرض معاينة، ثم يحفظ الفاتورة مع حالتها (قيد الانتظار، مدفوعة، ملغاة). ويمكن وسم الإدخالات المفوترة بأنها **مُصدَّرة**، مما يمنع فوترتها مرتين ويحميها من التعديل لاحقًا.",{"type":66,"title":143,"steps":144},"إعداد أول قالب فاتورة",[145,148,151,154],{"title":146,"body":147},"إنشاء القالب","من **الفواتير ← القوالب**، أدخل اسم الجهة المُصدِرة والعنوان والبيانات البنكية ومهلة الدفع ونص التذييل.",{"title":149,"body":150},"اختيار صيغة الإخراج","اختر صيغة PDF أو HTML لمستند جاهز للإرسال، أو صيغة مكتبية إن كنت تستكمل الفاتورة في أداة أخرى.",{"title":152,"body":153},"تحديد الترقيم","اضبط صيغة رقم الفاتورة (بادئة، سنة، عدّاد) للحصول على تسلسل متّصل يوافق ممارساتك المحاسبية.",{"title":155,"body":156},"ضبط الضريبة","أدخل نسبة الضريبة المطبّقة في القالب، وأنشئ قالبًا لكل نظام ضريبي إن كنت تفوتر عملاء بنسب مختلفة.",{"type":158,"title":159,"body":160},"callout","الضريبة على القيمة المضافة والبيانات الإلزامية","يحسب Kimai الضريبة انطلاقًا من النسبة المُدخلة في القالب، لكنه لا يعرف وضعك الضريبي. فالبيانات القانونية والنسبة المطبّقة ومدة حفظ الفواتير تتوقف على بلدك وصفتك القانونية، لذا اطلب من محاسبك مراجعة القالب. وإن كنت تمسك حساباتك كاملة في نظام ERP مثل Dolibarr، فيمكن أن يبقى Kimai أداة تسجيل الوقت، وأن يكون التصدير منه أساسًا للفاتورة النهائية.",{"type":39,"title":162,"body":163},"واجهة REST API والتكاملات","يوفّر Kimai واجهة **REST API** تغطي العملاء والمشاريع والأنشطة وكشوف الساعات والمستخدمين. وتقدّم نسختك نفسها التوثيق التفاعلي على المسار `\u002Fapi\u002Fdoc`، متوافقًا دائمًا مع الإصدار المثبَّت. لمصادقة سكربت، أنشئ **رمز API** من ملفك الشخصي، ثم أرسله في ترويسة الطلب:\n\n```bash\ncurl -s -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  https:\u002F\u002Fkimai.your-domain.com\u002Fapi\u002Ftimesheets\n```\n\nيرث الرمز صلاحيات صاحبه، لذا أنشئ حساب خدمة بأدنى دور لازم بدل استخدام حساب المسؤول الأعلى. تتيح الواجهة مثلًا تشغيل مؤقّت من اختصار، أو إرسال الساعات إلى لوحة متابعة، أو مزامنة المشاريع مع أداة التذاكر لديك.",{"type":39,"title":165,"body":166},"توسيع Kimai بالإضافات","يملك Kimai متجر إضافات على موقعه الرسمي، فيه إضافات مجانية وأخرى مدفوعة: المصاريف، والحقول المخصّصة، ومسارات اعتماد كشوف الساعات، والاستيراد من أدوات أخرى. الإضافة مجلد يوضع في `var\u002Fplugins\u002F`. ومع Docker، اربط هذا المجلد بحجم دائم، وإلا اختفى عند إعادة إنشاء الحاوية؛ وهذا دور الحجم `kimai_plugins` في ملف compose أعلاه. تثبيت نموذجي:\n\n```bash\ndocker compose cp PluginNameBundle kimai:\u002Fopt\u002Fkimai\u002Fvar\u002Fplugins\u002F\ndocker compose exec kimai \u002Fopt\u002Fkimai\u002Fbin\u002Fconsole kimai:reload --env=prod\n```\n\nتضيف بعض الإضافات جداول إلى القاعدة وتأتي بأمر تثبيت خاص بها؛ اتبع صفحة الإضافة، وتحقّق من توافقها مع إصدار Kimai لديك قبل كل تحديث.",{"type":39,"title":168,"body":169},"النسخ الاحتياطي والاستعادة","يكاد كل شيء يكون في قاعدة MySQL، ويكمّل الحجمان `kimai_data` و`kimai_public` النسخة الاحتياطية. والتفريغ المنطقي أسهل نقلًا من نسخ ملفات MySQL أثناء التشغيل:\n\n```bash\ndocker compose exec -T db sh -c 'exec mysqldump --single-transaction -u\"$MYSQL_USER\" -p\"$MYSQL_PASSWORD\" \"$MYSQL_DATABASE\"' > kimai-$(date +%F).sql\ndocker run --rm -v kimai_kimai_data:\u002Fdata -v \"$PWD\":\u002Fbackup alpine tar czf \u002Fbackup\u002Fkimai_data-$(date +%F).tgz -C \u002Fdata .\n```\n\nيبدأ الاسم الفعلي للحجم باسم مشروع Compose، فتحقّق منه بالأمر `docker volume ls`. للاستعادة، شغّل منظومة فارغة بنفس ملف ‎`.env`، ثم أعد تحميل التفريغ:\n\n```bash\ndocker compose exec -T db sh -c 'exec mysql -u\"$MYSQL_USER\" -p\"$MYSQL_PASSWORD\" \"$MYSQL_DATABASE\"' \u003C kimai-YYYY-MM-DD.sql\n```\n\nجدوِل التفريغ كل ليلة عبر cron، وانسخه خارج الـ VPS (باستخدام Restic أو BorgBackup أو تخزين كائنات)، وجرّب الاستعادة مرة واحدة على الأقل: فالنسخة التي لم تُستعَد قطّ ليست سوى فرضية.",{"type":43,"title":171,"items":172},"تحديثات بلا مفاجآت",[173,174,175,176,177],"**النسخ الاحتياطي أولًا** — تفريغ قبل التحديث مباشرة يتيح لك التراجع إذا فشل أحد الترحيلات.","**تحديث الصورة** — `docker compose pull kimai && docker compose up -d kimai`، ثم تابع السجلات بالأمر `docker compose logs -f kimai`. عند الإقلاع تطبّق الحاوية ترحيلات قاعدة البيانات تلقائيًا.","**تثبيت إصدار محدّد** — في الإنتاج، استبدل `apache-latest` بوسم صورة يحمل رقم إصدار، لتقرّر أنت موعد الترقية.","**قراءة ملاحظات الإصدار** — بعض الإصدارات الرئيسية تغيّر المتطلبات أو سلوك الإضافات.","**التصدير بانتظام** — تصدير كشوف الساعات بصيغة CSV أو XLSX نسخة مقروءة تفيد في التدقيق أو الانتقال إلى أداة أخرى.",{"type":39,"title":179,"body":180},"حلّ المشكلات الشائعة","ترجع معظم أعطال Kimai على Docker إلى عدد محدود من الأسباب المعروفة. ابدأ دائمًا بالأمرين `docker compose logs kimai` و`docker compose ps`.",{"type":43,"items":182},[183,184,185,186,187,188],"**رسالة «Untrusted Host» أو خطأ 400 بعد إضافة نطاق** — اسم المضيف غير موجود في `TRUSTED_HOSTS`. أضفه ثم أعد إنشاء الحاوية.","**خطأ 500 مع «Permission denied» على المجلد `var\u002F`** — يحدث غالبًا بعد تنفيذ أمر من وحدة التحكّم بمستخدم غير مستخدم خادم الويب. أعد الملكية بالأمر `docker compose exec kimai chown -R www-data:www-data \u002Fopt\u002Fkimai\u002Fvar` ثم نفّذ `kimai:reload`.","**تعديل في الإعدادات بلا أثر** — ذاكرة Symfony المؤقتة تقدّم النسخة القديمة: `docker compose exec kimai \u002Fopt\u002Fkimai\u002Fbin\u002Fconsole kimai:reload --env=prod`.","**إعادة تشغيل Kimai في حلقة عند الإقلاع الأول** — القاعدة غير جاهزة أو `DATABASE_URL` غير صحيح. راجع فحص صحة `db` وبيانات الدخول في ملف ‎`.env`.","**روابط تبدأ بـ `http:\u002F\u002F` خلف وكيل HTTPS** — ترويسات `X-Forwarded-Proto` لا تُرسَل أو لا تُعتبر موثوقة؛ راجع إعدادات الوكيل.","**نسيان كلمة المرور دون بريد مُعَدّ** — `MAILER_URL` يشير إلى `null:\u002F\u002F`: أعد تعيين كلمة المرور من حساب مسؤول، أو أنشئ مسؤولًا جديدًا من سطر الأوامر.",{"type":190,"title":191,"headers":192,"rows":198},"comparison","Kimai مقارنةً بـ Toggl Track وClockify وHarvest",[193,194,195,196,197],"المعيار","Kimai (استضافة ذاتية)","Toggl Track","Clockify","Harvest",[199,203,207,211,216,221,225],[200,201,202,202,202],"الترخيص","مفتوح المصدر (MIT)","مملوك",[204,205,206,206,206],"الاستضافة","الـ VPS الخاص بك","خدمة SaaS لدى المزوّد",[208,209,210,210,210],"مكان البيانات","قاعدة MySQL الخاصة بك","بنية المزوّد التحتية",[212,213,214,215,214],"نموذج الكلفة","كلفة الخادم فقط، بلا رسوم لكل مستخدم","مستوى مجاني محدود ثم اشتراك","مستوى مجاني ثم اشتراك",[217,218,219,219,220],"الفوترة","وحدة مدمجة (قوالب، ترقيم، ضريبة)","بحسب الخطة","مدمجة في المنتج",[222,223,224,224,224],"الواجهة البرمجية","REST مع رموز وتوثيق مدمج","REST",[226,227,228,228,228],"التخصيص","الشيفرة المصدرية والإضافات والإعدادات","الإعدادات والتكاملات",{"type":39,"title":230,"body":231},"اختيار حجم الـ VPS المناسب","Kimai قليل الاستهلاك، ويأتي معظم الحمل من MySQL ومن التقارير التي تغطي فترات طويلة. للمستقل أو الفريق الصغير يكفي **1 vCPU ومن 1 إلى 2 غيغابايت من الذاكرة**. وإذا تجاوز عدد المستخدمين النشطين نحو عشرين مستخدمًا، أو كنت تُعدّ بانتظام تقارير سنوية وعمليات تصدير كبيرة، فخطّط لـ **2 vCPU و4 غيغابايت**، ما يترك هامشًا لذاكرة InnoDB المؤقتة في MySQL. أما مساحة القرص فمتواضعة: بضعة غيغابايتات تكفي لسنوات من كشوف الساعات، لكن احتفظ بمساحة للتفريغات المحلية قبل نقلها خارج الخادم.",{"type":84,"body":233},"قبل دعوة فريقك، حدّد قواعد العمل من **الإعدادات**: تقريب المدد، والسماح بالإدخالات المستقبلية أو منعها، وقفل الفترات التي سبقت فوترتها. فاتخاذ هذه القرارات على نسخة فارغة أسهل بكثير من اتخاذها بعد أشهر من السجلات.","انشر Kimai على VPS في 60 ثانية","ServOrbit يُعدّ المنظومة الكاملة (Apache\u002FPHP + MySQL 8) ويولّد بيانات اعتماد المسؤول — جاهز لتسجيل أولى ساعاتك.","إطلاق Kimai","\u002Fapplications\u002Fتخطيط-موارد-المؤسسات-وإدارة-الأعمال\u002Fkimai",[239,257,277],{"id":240,"slug":241,"slugs":242,"title":246,"excerpt":247,"readTime":248,"views":18,"isPinned":19,"noindex":19,"publishedAt":249,"updatedAt":250,"category":251,"categories":252,"featuredImage":30,"bgImage":31,"posterImage":254,"relatedSolution":255},143,"استضافة-dolibarr-على-خادم-vps-نظام-erp-حر-تحت-السيطرة",{"fr":243,"en":244,"ar":241,"es":245},"heberger-dolibarr-vps","hosting-dolibarr-on-a-vps-open-source-erp-under-control","alojar-dolibarr-en-un-vps-erp-libre","استضافة Dolibarr على خادم VPS: نظام ERP حر تحت السيطرة","انشر Dolibarr على خادم VPS من ServOrbit: نظام ERP\u002FCRM حر، وقاعدة بيانات مضبوطة، ونسخ احتياطية، ووصول HTTPS لشركتك الصغيرة أو المتوسطة.",11,"2026-02-02T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[253],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-dolibarr-vps-poster.svg",{"categorySlug":34,"appSlug":256},"dolibarr",{"id":258,"slug":259,"slugs":260,"title":264,"excerpt":265,"readTime":266,"views":23,"isPinned":19,"noindex":19,"publishedAt":267,"updatedAt":268,"category":269,"categories":274,"featuredImage":30,"bgImage":31,"posterImage":276,"relatedSolution":30},37,"انشر-تطبيقاتك-باستخدام-nginx-proxy-manager-على-خادم-vps",{"fr":261,"en":262,"ar":259,"es":263},"deployer-avec-nginx-proxy-manager","deploy-your-applications-with-nginx-proxy-manager-on-a-vps","desplegar-con-nginx-proxy-manager","انشر تطبيقاتك باستخدام Nginx Proxy Manager على خادم VPS","أدِر النطاقات وشهادات SSL والوكيل العكسي لعدة خدمات على خادم VPS باستخدام Nginx Proxy Manager: التثبيت وشبكات Docker واستكشاف أخطاء 502 والإعداد المتقدم.",10,"2026-05-14T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":270,"name":271,"slug":272,"color":273,"icon":272},3,"النشر","deploiement","bg-success\u002F10 text-success",[275],{"id":270,"name":271,"slug":272,"color":273,"icon":272},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-nginx-proxy-manager-poster.svg",{"id":278,"slug":279,"slugs":280,"title":284,"excerpt":285,"readTime":248,"views":18,"isPinned":19,"noindex":19,"publishedAt":286,"updatedAt":287,"category":288,"categories":294,"featuredImage":30,"bgImage":31,"posterImage":296,"relatedSolution":30},113,"أتمتة-نسخ-خادمك-vps-الاحتياطية-باستخدام-restic",{"fr":281,"en":282,"ar":279,"es":283},"sauvegardes-restic-vps","automate-your-vps-backups-with-restic","copias-de-seguridad-vps-con-restic","أتمتة نسخ خادمك VPS الاحتياطية باستخدام Restic","أتمتة نسخ خادمك VPS الاحتياطية باستخدام Restic: لقطات (snapshots) مشفّرة، وإزالة التكرار (deduplication)، والإرسال إلى S3 أو أي واجهة تخزين كائني.","2026-02-27T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":289,"name":290,"slug":291,"color":292,"icon":293},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[295],{"id":289,"name":290,"slug":291,"color":292,"icon":293},"\u002Fblog\u002Fcovers\u002Fsauvegardes-restic-vps-poster.svg",true,1794270224473]