[{"data":1,"prerenderedAt":206},["ShallowReactive",2],{"seo-verification":3,"blog-تثبيت-windmill-على-خادم-vps-أتمتة-ذاتية-الاستضافة-ma-ar":6,"promo-bar-likely":205},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-تثبيت-windmill-على-خادم-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":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":148,"ctaBody":149,"ctaButton":150,"ctaUrl":151,"relatedPosts":152},27,"تثبيت-windmill-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":12,"en":13,"ar":10,"es":14},"installer-windmill-vps","installing-windmill-on-a-vps-self-hosted-automation","instalar-windmill-en-un-vps","تثبيت Windmill على خادم VPS: أتمتة ذاتية الاستضافة","ثبّت Windmill على خادم VPS الخاص بك: حوّل نصوصك البرمجية بلغات Python وTypeScript وBash إلى سير عمل وواجهات داخلية، بأتمتة ذاتية الاستضافة عبر Docker.",13,1,false,"2026-05-24T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finstaller-windmill-vps-poster.svg",{"categorySlug":33,"appSlug":34},"الأتمتة-وسير-العمل","windmill","Windmill منصة مفتوحة المصدر تحوّل الشيفرة (Python وTypeScript وGo وBash وSQL) إلى سير عمل وواجهات API وواجهات داخلية. مُصمّمة للمطوّرين، وتجمع بين مرونة الشيفرة وسرعة الـ no-code. باستضافتها الذاتية على خادم VPS، تصبح محرّك الأتمتة لديك وأداة بناء التطبيقات الداخلية، دون الاعتماد على خدمة SaaS.",[37,41,52,55,62,87,90,99,102,106,109,117,146],{"type":38,"title":39,"body":40},"h2","لماذا تستضيف Windmill ذاتيًا على خادم VPS","يعمل Windmill باستمرار على خادمك ويعرض كل سكربت من سكربتاتك كنقطة REST مصادَق عليها برمز (token)، أو كمهمة مجدولة، أو كواجهة مولَّدة تلقائيًا. وعلى خلاف الدوال عديمة الخادم (serverless)، لا يوجد إقلاع بارد ولا حد تنفيذ يفرضه طرف ثالث. تصل سكربتات Python أو TypeScript أو Bash مباشرةً إلى قواعد البيانات والخدمات الداخلية على خادمك، دون المرور ببوابة سحابية. الواجهة الخلفية مكتوبة بلغة Rust: خوادم API عديمة الحالة وعمّال (workers) يسحبون المهام من طابور مخزَّن في PostgreSQL، ما يسمح بإضافة عمّال دون المساس ببقية المكوّنات.\n\nيتوقف الاختيار أساسًا على طريقة عملك. إن كانت حاجتك ربط خدمات SaaS ببعضها على لوحة مرئية، يبقى \u003Ca href=\"\u002Far\u002Fالمدونة\u002Fتثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026\">n8n\u003C\u002Fa> أكثر مباشرة؛ وللعمليات التجارية الطويلة جدًا التي تتطلب ضمان الاستئناف، صُمّم \u003Ca href=\"\u002Far\u002Fالمدونة\u002Fتثبيت-temporal-على-خادم-vps-أتمتة-ذاتية-الاستضافة\">Temporal\u003C\u002Fa> لهذا الغرض. يستهدف Windmill الفرق التي تكتب الشيفرة أصلًا وتريد جعلها قابلة للتنفيذ والجدولة والاستخدام من غير المطوّرين في دقائق. أما الترخيص، فالنواة بترخيص AGPLv3 وصورة Community Edition مجانية، مع حصص وميزات محجوزة لإصدار Enterprise؛ وإعادة بيعها أو تقديمها كخدمة مُدارة لعملائك تتطلب ترخيصًا تجاريًا.",{"type":42,"title":43,"items":44},"ul","فوائد ملموسة للاستضافة الذاتية",[45,46,47,48,49,50,51],"لا فوترة عند كل تنفيذ: آلاف المهام يوميًا دون فاتورة حوسبة سحابية.","وصول مباشر إلى قواعد البيانات والخدمات الداخلية على الخادم، دون نفق.","أسرار ومفاتيح API مخزّنة مشفّرة داخل Windmill ولا تغادر خادمك أبدًا.","نماذج إدخال ونقاط REST تُولَّد تلقائيًا لكل سكربت انطلاقًا من توقيع دالته `main`.","عمّال إضافيون يمكن إضافتهم أثناء التشغيل لاستيعاب ذروات الحمل.","عدة مساحات عمل (workspaces) معزولة على نسخة واحدة: واحدة لكل فريق أو مشروع أو بيئة.","إدارة الإصدارات: يُحتفظ بكل نشر للسكربت، ويدفع Git Sync مساحة العمل إلى مستودع Git (مضمَّن في Community Edition لمساحات العمل التي لا يتجاوز مستخدموها اثنين).",{"type":38,"title":53,"body":54},"المتطلبات التقنية","يتطلب Windmill معالجَين vCPU على الأقل و4 غيغابايت من RAM. تشغّل الحزمة الرسمية PostgreSQL 18، والخادم، وثلاثة عمّال عامّين بحد ذاكرة 2 غيغابايت لكل منهم، وعاملًا أصيلًا (native) للمهام الخفيفة، والخدمة `windmill_extra` (الإكمال التلقائي عبر LSP ومصحّح أخطاء المحرر)، وCaddy في الواجهة: لذا قلّل عدد العمّال على خادم بسعة 4 غيغابايت. احسب 20 غيغابايت من القرص لقاعدة البيانات والسجلّات وذاكرة التخزين المؤقت لاعتماديات العمّال، التي تكبر مع كل حزمة pip أو npm مستخدمة. يكفي Ubuntu 22.04\u002F24.04 أو Debian 12 مع Docker Engine وإضافة Docker Compose v2، إضافةً إلى اسم نطاق يشير إلى الخادم من أجل شهادة TLS. لا حاجة إلى GPU. إذا كنت تخطط لتشغيل عمّال Python ثقيلة (تعلّم آلي، أو pandas على مجموعات بيانات كبيرة)، فاختر 4 vCPU و8 غيغابايت من RAM على الأقل.",{"type":42,"title":56,"items":57},"حجّم الخادم بحسب الاستخدام",[58,59,60,61],"**قاعدة الناشر**: عامل واحد تقريبًا لكل vCPU، ومن 1 إلى 2 غيغابايت من RAM لكل عامل. المهمة التي تتجاوز حد ذاكرة عاملها (2048 ميغابايت افتراضيًا) تُقتل برمز الخروج 137.","**استخدام فردي أو تجربة**: 2 vCPU و4 غيغابايت من RAM و20 غيغابايت من القرص، مع عامل عام واحد إضافةً إلى العامل الأصيل. يكفي لسكربتات مجدولة وبضع نقاط webhook.","**فريق صغير**: 4 vCPU و8 غيغابايت من RAM و40 غيغابايت من القرص. يتسع المضيف نفسه للعمّال الثلاثة في الملف الرسمي ولـ PostgreSQL دون إشباع الذاكرة.","**عدة فرق أو مهام Python ثقيلة**: 8 vCPU و16 غيغابايت من RAM و80 غيغابايت من القرص لستة إلى ثمانية عمّال. في هذه المرحلة، تبسّط قاعدة PostgreSQL منفصلة النسخ الاحتياطي وترقية الإصدارات.",{"type":63,"title":64,"steps":65},"steps","انشر Windmill باستخدام Docker Compose",[66,69,72,75,78,81,84],{"title":67,"body":68},"نزّل الملفات الرسمية","اتصل بخادمك عبر SSH ونزّل الملفات المرجعية الثلاثة المنشورة في مستودع Windmill: ملف `docker-compose.yml`، وملف `Caddyfile` الخاص بالوكيل العكسي، وملف `.env`:\n\n```bash\nmkdir -p \u002Fopt\u002Fwindmill && cd \u002Fopt\u002Fwindmill\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002Fdocker-compose.yml -o docker-compose.yml\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002FCaddyfile -o Caddyfile\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002F.env -o .env\n```\n\nلا حاجة إلى استنساخ المستودع كاملًا. تتبع هذه الملفات الفرع `main`: أعد قراءتها قبل كل تحديث، لأن الحزمة تتطور (الانتقال إلى PostgreSQL 18، والخدمة `windmill_extra`…).",{"title":70,"body":71},"املأ ملف `.env`","لا يحمل ملف `.env` إلا متغيرين. استبدل كلمة مرور PostgreSQL الافتراضية، وثبّت الصورة على إصدار منشور بدلًا من `main` (الإصدار 1.864.1 بتاريخ 06\u002F11\u002F2026، تحقّق منه في صفحة الإصدارات على GitHub):\n\n```bash\nDATABASE_URL=postgres:\u002F\u002Fpostgres:MOT_DE_PASSE_FORT@db\u002Fwindmill?sslmode=disable\nWM_IMAGE=ghcr.io\u002Fwindmill-labs\u002Fwindmill:1.864.1\n```\n\nانسخ كلمة المرور نفسها إلى `POSTGRES_PASSWORD` تحت الخدمة `db` في ملف `docker-compose.yml`. المضيف `db` هو اسم خدمة PostgreSQL داخل الحزمة: لا تستبدله بـ `localhost`. لاستخدام قاعدة بيانات موجودة، وجّه `DATABASE_URL` إليها واضبط الخدمة `db` على `replicas: 0`.",{"title":73,"body":74},"شغّل الحزمة","شغّل المجموعة كاملة وتابع إقلاع الخادم:\n\n```bash\ndocker compose up -d\ndocker compose ps\ndocker compose logs -f windmill_server\n```\n\nيجب أن يعرض `docker compose ps` الخدمات `db` و`windmill_server` وثلاث نسخ من `windmill_worker` و`windmill_worker_native` و`windmill_extra` و`caddy`؛ ويبقى مفهرس البحث النصي الكامل (`windmill_indexer`) بلا نسخ، لأنه ميزة من إصدار Enterprise. ينتظر الخادم أن تجتاز PostgreSQL فحص الصحة، ثم يطبّق بنفسه ترحيلات المخطط. يستمع على المنفذ 8000 داخل شبكة Docker دون أن يُنشر على المضيف: Caddy هو من يستقبل حركة المرور.",{"title":76,"body":77},"هيّئ الوكيل العكسي وTLS","الأبسط أن تترك Caddy المرفق يحصل على شهادة Let's Encrypt. في الخدمة `caddy` داخل ملف `docker-compose.yml`، ألغِ تعليق المنفذ 443 واستبدل `BASE_URL=\":80\"` باسم نطاقك، ثم أعد تشغيل `docker compose up -d`:\n\n```yaml\n  caddy:\n    ports:\n      - 80:80\n      - 25:25\n      - 443:443\n    environment:\n      - BASE_URL=windmill.example.com\n```\n\nأبقِ المنفذ 80 مفتوحًا لعملية التحقق. إن كان nginx يخدم مواقع أخرى على الخادم أصلًا، فاحذف الخدمة `caddy`، وانشر `127.0.0.1:8000:8000` على `windmill_server` و`127.0.0.1:3000:3000` على `windmill_extra`، ثم أعد إنتاج توجيه `Caddyfile`: تذهب المسارات `\u002Fws\u002F` و`\u002Fws_mp\u002F` و`\u002Fws_debug\u002F` إلى `windmill_extra`، وكل ما عداها إلى الخادم.\n\n```nginx\nlocation ~ ^\u002Fws(_mp|_debug)?\u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:3000;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_set_header Host $host;\n}\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8000;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}\n```\n\nالترويستان `Upgrade` و`Connection` ضروريتان: يستخدم المحرر WebSockets للإكمال التلقائي وتصحيح الأخطاء. تحصل بعد ذلك على الشهادة عبر `certbot --nginx -d windmill.example.com`.",{"title":79,"body":80},"سجّل الدخول وأمّن النسخة","افتح `https:\u002F\u002Fwindmill.example.com` وسجّل الدخول بحساب المشرف الأعلى الافتراضي `admin@windmill.dev` \u002F `changeme`. يقترح معالج التشغيل الأول استبداله بحسابك الخاص: افعل ذلك، لأنك إن تخطّيت هذه الخطوة تبقى بيانات الدخول الافتراضية فعّالة، وهي الثغرة الأكثر شيوعًا في نسخ Windmill المعروضة علنًا. بعد ذلك، اضبط في **Instance settings** قيمة Base URL على العنوان العام بصيغة `https:\u002F\u002F`: يستخدمها Windmill لبناء عناوين webhook وروابط العودة في الـ flows. أنشئ أخيرًا أول مساحة عمل بمعرّف قصير (`prod` أو `data-team`).",{"title":82,"body":83},"اضبط عدد العمّال","يشغّل الملف الرسمي ثلاث نسخ من `windmill_worker`، لكل منها حد 2048 ميغابايت. على خادم بسعة 4 غيغابايت، اخفض العدد إلى واحد أو اثنين؛ وعلى جهاز أكبر، ارفعه إلى عامل واحد لكل vCPU:\n\n```bash\ndocker compose up -d --scale windmill_worker=2\ndocker compose ps windmill_worker\n```\n\nلجعل الإعداد دائمًا، عدّل `deploy.replicas` الخاص بالخدمة في ملف `docker-compose.yml`. لا يحتاج الخادم إلى إعادة تشغيل: يسجّل العمّال أنفسهم ويظهرون في صفحة **Workers** من الواجهة مع مجموعتهم (`default` أو `native`).",{"title":85,"body":86},"حدّث Windmill","غيّر الوسم في `WM_IMAGE` بعد قراءة ملاحظات الإصدار، ثم:\n\n```bash\ndocker compose pull\ndocker compose up -d\ndocker image prune\n```\n\nيُنزّل `pull` الصور الجديدة بينما لا تزال الحاويات القديمة تعمل؛ وعند إعادة التشغيل يرحّل الخادم قاعدة البيانات بنفسه، ويُنهي العمّال مهامهم الجارية ضمن مهلة الإيقاف في Docker (30 ثانية). خذ نسخة احتياطية من القاعدة قبل ذلك مباشرةً، ولا تشغّل `docker image prune -a` إلا إذا كان الخادم لا يستضيف شيئًا آخر: فهذا الأمر يحذف أيضًا صور المشاريع الأخرى.",{"type":38,"title":88,"body":89},"التهيئة بعد التثبيت","بعد أن تصبح النسخة متاحة، تحدد ستة إعدادات طريقة عمل سكربتاتك في الإنتاج. تُضبط جميعها من الواجهة، مساحة عمل تلو الأخرى.",{"type":42,"title":91,"items":92},"الإعدادات الأساسية",[93,94,95,96,97,98],"**مساحات العمل**: تعزل مساحة العمل السكربتات والـ flows والأسرار والأعضاء. أنشئ واحدة لكل فريق أو بيئة بدلًا من خلط كل شيء، واحجز دور المشرف الأعلى (superadmin) لإدارة النسخة.","**المتغيرات والأسرار**: تُشفَّر كل المتغيرات بمفتاح متماثل خاص بمساحة العمل؛ والمتغيرات الموسومة كأسرار لا تعود تظهر في الواجهة بعد إدخالها. هنا مكان رموز API وكلمات المرور، لا في شيفرة السكربت أبدًا.","**الموارد**: كائنات JSON ذات أنواع محددة (اتصال PostgreSQL، حساب SMTP، بيانات اعتماد OAuth). المعامل من نوع `postgresql` في سكربت ما لا يقترح عندها في النموذج المولَّد إلا الموارد من هذا النوع.","**الجدولة**: يقبل كل سكربت أو flow جدولة واحدة أو أكثر بصيغة cron ذات الحقول الخمسة، مع حقل اختياري للثواني في البداية. معالج أخطاء الجدولة ميزة من إصدار Enterprise؛ أما في Community Edition فراقب التنفيذات الفاشلة من قائمة التشغيلات.","**Webhooks**: يُستدعى السكربت بشكل غير متزامن عبر `\u002Fapi\u002Fw\u002F\u003Cworkspace>\u002Fjobs\u002Frun\u002Fp\u002F\u003Cpath>` (الرد: معرّف المهمة) أو بشكل متزامن عبر `\u002Fapi\u002Fw\u002F\u003Cworkspace>\u002Fjobs\u002Frun_wait_result\u002Fp\u002F\u003Cpath>` (الرد: النتيجة). صادِق بالترويسة `Authorization: Bearer \u003Ctoken>` بدلًا من `?token=` الذي ينتهي في سجلّات الوصول.","**Git Sync**: من إعدادات مساحة العمل، اربط مستودعًا لدفع السكربتات والـ flows والموارد إليه عند كل نشر. مجاني في Community Edition حتى مستخدمَين لكل مساحة عمل؛ أما النشر التلقائي انطلاقًا من Git فمحجوز لإصدار Enterprise.",{"type":38,"title":100,"body":101},"مثال: سكربت Python من البداية إلى النهاية","يستعلم هذا السكربت واجهة API، ويحتفظ بالعناصر النشطة، ويدرجها في PostgreSQL عبر مورد من Windmill. أنشئ سكربت Python والصق الشيفرة وشغّله من المحرر:\n\n```python\n# requirements:\n# httpx\n# psycopg2-binary\nfrom typing import TypedDict\n\nimport httpx\nimport psycopg2\n\n\nclass postgresql(TypedDict):\n    host: str\n    port: int\n    user: str\n    dbname: str\n    sslmode: str\n    password: str\n\n\ndef main(api_url: str, db: postgresql) -> dict:\n    resp = httpx.get(api_url, timeout=10)\n    resp.raise_for_status()\n    rows = [r for r in resp.json() if r.get(\"active\")]\n    conn = psycopg2.connect(\n        host=db[\"host\"], port=db[\"port\"], user=db[\"user\"],\n        password=db[\"password\"], dbname=db[\"dbname\"], sslmode=db[\"sslmode\"],\n    )\n    with conn, conn.cursor() as cur:\n        cur.executemany(\n            \"INSERT INTO items (id, name) VALUES (%(id)s, %(name)s) ON CONFLICT DO NOTHING\",\n            rows,\n        )\n    conn.close()\n    return {\"candidates\": len(rows), \"source\": api_url}\n```\n\nتحلّ تعليقات `# requirements:` محل الاستنتاج التلقائي للاعتماديات من أوامر الاستيراد: وهذا مفيد هنا، لأن الاستيراد `psycopg2` يُنشر تحت الحزمة `psycopg2-binary`. يحلّ Windmill هذه الحزم، ويكتب ملف قفل (lockfile)، ويخزّنها مؤقتًا على العامل، فتعمل النسخة نفسها من السكربت دائمًا بالاعتماديات نفسها. أما الصنف `postgresql`، المسمّى باسم نوع المورد، فيُظهر في النموذج أداة لاختيار الموارد. بعد نشره تحت المسار `f\u002Fetl\u002Fimport_items`، يمكن استدعاء السكربت من أي أداة:\n\n```bash\ncurl -X POST \"https:\u002F\u002Fwindmill.example.com\u002Fapi\u002Fw\u002Fprod\u002Fjobs\u002Frun_wait_result\u002Fp\u002Ff\u002Fetl\u002Fimport_items\" \\\n  -H \"Authorization: Bearer $WM_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"api_url\": \"https:\u002F\u002Fapi.example.com\u002Fitems\"}'\n```",{"type":103,"title":104,"body":105},"tip","تقوية النسخة","لا تنشر أبدًا المنفذين 8000 و3000 على الواجهة العامة: يجب ألا يصل إليهما إلا الوكيل العكسي محليًا. خذ نسخة احتياطية من القاعدة بالأمر `docker compose exec -T db pg_dumpall -U postgres | gzip > \u002Fbackups\u002Fwindmill-$(date +%F).sql.gz`: يجب أن يغطي التفريغ العنقود (cluster) كاملًا لا قاعدة `windmill` وحدها، لأن Windmill ينشئ قواعد بيانات ملحقة ويربط سياسات الأمان الخاصة به بأدوار على مستوى العنقود. يحتوي هذا التفريغ على أسرارك المشفّرة: خزّنه خارج الخادم واحمِه كما تحمي سرًّا. لا تربط مقبس Docker داخل العمّال إلا إذا كنت تثق بكل مستخدمي النسخة، لأنه يمنح السكربتات السيطرة على المضيف. وأخيرًا، أبقِ `REQUIRE_SIGNED_DEBUG_REQUESTS=true` على `windmill_extra`: تعطيله على نسخة يمكن الوصول إليها من الإنترنت يعرض مصحّح أخطاء قادرًا على تنفيذ الشيفرة دون مصادقة.",{"type":38,"title":107,"body":108},"استكشاف الأعطال: أخطاء النشر الأول","تأتي معظم الأعطال من قاعدة البيانات، أو ذاكرة العمّال، أو الوكيل العكسي. إليك الأعراض وطرق إصلاحها:",{"type":42,"title":110,"items":111},"الأعراض وطرق الإصلاح",[112,113,114,115,116],"**تتوقف الحاوية `db` فور التحديث**: أُنشئ الحجم بواسطة PostgreSQL 16 وانتقلت الصورة إلى الإصدار 18 الذي يرفض قراءته. اتبع إجراء الترحيل الموجود في التوثيق (تفريغ كامل ثم استعادة)، أو ثبّت `postgres:16` مع نقطة الربط القديمة: يبقى الإصدار 16 مدعومًا حتى نوفمبر 2028.","**مهمة متوقفة بالرمز 137**: تجاوزت حد ذاكرة عاملها. ارفع `resources.limits.memory` في الخدمة `windmill_worker`، أو قلّل حجم البيانات التي يحمّلها السكربت في الذاكرة.","**خادم أو عمّال عاجزون عن الوصول إلى القاعدة**: يشير `DATABASE_URL` إلى `localhost` بدلًا من الخدمة `db`، أو تختلف كلمة المرور عن `POSTGRES_PASSWORD`. أصلح ملف `.env` ثم نفّذ `docker compose up -d` لإعادة إنشاء الحاويات.","**`ModuleNotFoundError` أو فشل تثبيت الاعتماديات**: ينزّل العامل الحزم عند التنفيذ الأول ويجب أن يصل إلى `pypi.org` و`files.pythonhosted.org` عبر HTTPS صادر. خلف وكيل مؤسسي، يضبط المتغيران `PY_TRUSTED_HOST` و`PY_INDEX_CERT` الثقة؛ ويُعلَن الفهرس الخاص في Instance settings (إصدار Enterprise).","**محرر بلا إكمال تلقائي ومصحّح أخطاء صامت**: لا يوجّه الوكيل العكسي المسارات `\u002Fws\u002F` و`\u002Fws_mp\u002F` و`\u002Fws_debug\u002F` إلى `windmill_extra`، أو يحذف الترويستين `Upgrade` و`Connection`. اعتمد التوجيه الوارد في ملف `Caddyfile` الرسمي.",{"type":118,"title":119,"headers":120,"rows":125},"comparison","Windmill أم n8n أم Temporal",[121,122,123,124],"المعيار","Windmill","n8n","Temporal",[126,131,136,141],[127,128,129,130],"كتابة سير العمل","سكربتات Python وTypeScript وGo وBash وSQL… تُجمَّع في flows","لوحة عُقد؛ وعقدة Code بلغة JavaScript أو Python","شيفرة تطبيقية عبر SDK (Go وJava وPython وTypeScript و‎.NET وPHP وRuby وRust)",[132,133,134,135],"الترخيص","AGPLv3 للنواة؛ Community Edition مجانية مع حصص، وميزات Enterprise بترخيص","Sustainable Use License (fair-code)، وملفات `.ee` بترخيص تجاري","MIT للخادم",[137,138,139,140],"الواجهة","محرر ويب، ونماذج وتطبيقات داخلية مولَّدة","محرر مرئي للعُقد","واجهة ويب للمراقبة؛ تُكتب الشيفرة خارج الأداة",[142,143,144,145],"لمن","فرق تكتب الشيفرة وتريد عرضها بسرعة","تكاملات مرئية بين خدمات SaaS","عمليات طويلة بمتطلبات متانة عالية",{"type":103,"body":147},"‏**نشرها بنقرة واحدة من Marketplace ServOrbit.** إن كنت تفضّل تجاوز الإعداد اليدوي، يوفّر Marketplace من ServOrbit Windmill تلقائيًا — الخادم وعاملان وPostgreSQL 16 ووكيل nginx عكسي وشهادة Let's Encrypt — في بضع دقائق. يعرض قسم «الوصول الأول» في منطقة عملائك الرابطَ والبيانات المولَّدة. تتيح لك بطاقة Windmill، المتاحة من الزر في نهاية هذا المقال، البدء فورًا.","‏انشر Windmill بنقرة واحدة على VPS من ServOrbit","‏يوفّر Marketplace من ServOrbit Windmill تلقائيًا مع PostgreSQL 16 وعاملَين ووكيل عكسي — تعمل نصوصك البرمجية في الإنتاج خلال دقائق، دون أي إعداد.","‏عرض بطاقة Windmill","\u002Fapplications\u002Fالأتمتة-وسير-العمل\u002Fwindmill",[153,171,188],{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":162,"views":163,"isPinned":19,"noindex":19,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":29,"bgImage":30,"posterImage":169,"relatedSolution":170},3,"تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026",{"fr":157,"en":158,"ar":155,"es":159},"installer-n8n-vps","install-n8n-on-vps-with-docker-complete-2026-guide","instalar-n8n-en-vps-con-docker","تثبيت n8n على VPS مع Docker: دليل شامل 2026","انشر n8n على VPS مع Docker والوكيل العكسي وHTTPS. يشمل عطل V8، خطأ 502، الانتقال من npm وأمان التنفيذ (تنبيه GHSA-vrv8-j27g-g7cr، أغسطس 2026).",19,4,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[168],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":33,"appSlug":123},{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":163,"views":23,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":29,"bgImage":30,"posterImage":185,"relatedSolution":186},26,"تثبيت-activepieces-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":175,"en":176,"ar":173,"es":177},"installer-activepieces-vps","installing-activepieces-on-a-vps-self-hosted-automation","instalar-activepieces-en-un-vps","تثبيت Activepieces على خادم VPS: أتمتة ذاتية الاستضافة","انشر Activepieces على خادم VPS الخاص بك: أتمتة no-code ذاتية الاستضافة، بيانات خاصة، تكاملات غير محدودة، ونشر عبر Docker في 15 دقيقة.","2026-05-25T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-activepieces-vps-poster.svg",{"categorySlug":33,"appSlug":187},"activepieces",{"id":189,"slug":190,"slugs":191,"title":195,"excerpt":196,"readTime":163,"views":18,"isPinned":19,"noindex":19,"publishedAt":197,"updatedAt":198,"category":199,"categories":200,"featuredImage":29,"bgImage":30,"posterImage":202,"relatedSolution":203},24,"تثبيت-node-red-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":192,"en":193,"ar":190,"es":194},"installer-node-red-vps","installing-node-red-on-a-vps-self-hosted-automation","instalar-node-red-en-un-vps","تثبيت Node-RED على خادم VPS: أتمتة ذاتية الاستضافة","ثبّت Node-RED على خادم VPS لأتمتة مسارات عملك القائمة على التدفّق (flow)، وربط واجهات API وأجهزة إنترنت الأشياء IoT، كل ذلك ذاتي الاستضافة وآمن.","2026-05-27T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[201],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-node-red-vps-poster.svg",{"categorySlug":33,"appSlug":204},"node-red",true,1794270271008]