[{"data":1,"prerenderedAt":183},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-gotenberg-على-vps-واجهة-توليد-pdf-للمطورين-ma-ar":6,"promo-bar-likely":182},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-gotenberg-على-vps-واجهة-توليد-pdf-للمطورين-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":35,"sections":36,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},275,"استضافة-gotenberg-على-vps-واجهة-توليد-pdf-للمطورين",{"fr":12,"en":13,"ar":10,"es":14},"heberger-gotenberg-vps","self-host-gotenberg-on-a-vps-pdf-generation-api-for-developers","alojar-gotenberg-en-un-vps","استضافة Gotenberg على VPS: واجهة توليد PDF للمطورين","انشر Gotenberg 8.x على VPS: واجهة REST مستضافة ذاتيًا لتوليد PDF من HTML والروابط و DOCX و Markdown. دليل شامل مع nginx و Laravel\u002FPython\u002FNode.js والتشخيص.",8,1,false,"2026-01-16T00:00:00+00:00","2026-11-04T16:30:27+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-gotenberg-vps-poster.svg",{"categorySlug":24,"appSlug":34},"gotenberg","كل خدمة PDF كـ SaaS تُحاسب لكل صفحة أو مستند. Gotenberg لا تفعل ذلك — إنها خدمة HTTP مصغّرة مفتوحة المصدر برخصة MIT تُولّد PDF من HTML والروابط وMarkdown ومستندات LibreOffice، مع تضمين ‎Chromium وLibreOffice في حاوية Docker واحدة. يغطي هذا الدليل النشر الكامل على VPS — مسارات API ووكيل nginx العكسي وأمثلة تكامل PHP\u002FPython\u002FNode.js والإعداد المتقدم وتشخيص الأخطاء الشائعة.",[37,41,75,85,88,107,110,113,116,119,122,125],{"type":38,"title":39,"body":40},"h2","لماذا استضافة واجهة API لتوليد PDF ذاتيًا؟","خدمات PDF كـ SaaS تُحاسب لكل مستند أو صفحة أو استدعاء API. بمجرد أن يُولّد تطبيقك فواتير أو تقارير أو عقودًا بكميات كبيرة، تنمو التكلفة خطيًا مع استخدامك. Gotenberg تستبدلها بتكلفة VPS شهرية ثابتة بصرف النظر عن عدد PDF التي تُولّدها. كما تبقي مستنداتك خاصة: لا شيء يغادر بنيتك التحتية أثناء التحويل.",{"type":42,"title":43,"headers":44,"rows":50},"comparison","Gotenberg أم WeasyPrint أم Stirling-PDF أم Puppeteer؟",[45,46,47,48,49],"الأداة","صيغ المصدر","الحد الأدنى من RAM","واجهة REST","الرخصة",[51,57,63,69],[52,53,54,55,56],"Gotenberg 8.x","HTML، URL، DOCX\u002FODT\u002FXLSX، Markdown، صور","‎2 GB (Chromium)","نعم — multipart\u002Fform-data","MIT",[58,59,60,61,62],"WeasyPrint","HTML + CSS (بدون JS)","‎256 MB","لا — مكتبة Python\u002FCLI","BSD",[64,65,66,67,68],"Stirling-PDF","PDF (تحرير، OCR، دمج)","‎512 MB","نعم — JSON\u002Fmultipart","MIT (AGPLv3 للنسخة Pro)",[70,71,72,73,74],"Puppeteer منفردًا","HTML + URL عبر Chrome headless","‎1.5 GB","لا — مكتبة Node.js","Apache 2.0",{"type":76,"title":77,"items":78},"ul","ما يمكن لـ Gotenberg تحويله",[79,80,81,82,83,84],"HTML إلى PDF عبر نسخة Chromium كاملة — CSS وخطوط الويب وJavaScript واستفسارات وسائط الطباعة مُكرَّمة جميعها.","أي رابط إلى PDF — أرشف مشاهدات لوحة التحكم وأنشئ تقارير أسبوعية أو التقط إيصالات الدفع.","مستندات LibreOffice (DOCX وXLSX وPPTX وODT وODS وODP وأكثر من 20 صيغة) إلى PDF بدون تثبيت Microsoft Office.","Markdown إلى PDF عبر مسار Chromium مع CSS قابل للتهيئة.","دمج عدة ملفات PDF في ملف واحد باستدعاء API واحد.","الصور (PNG وJPEG وWebP وTIFF) محوَّلة إلى PDF.",{"type":38,"title":86,"body":87},"المتطلبات","خادم VPS بـ ‎**1 vCPU** على الأقل و‎**2 GB RAM** (يستهلك Chromium وحده من 1.2 إلى 1.5 GB أثناء التصيير؛ 1 GB RAM غير كافٍ أثناء التحويل). Ubuntu 22.04 أو 24.04 مع Docker وDocker Compose v2 مثبَّتَين. يستمع Gotenberg على **المنفذ 3000** افتراضيًا. لا يلزم نطاق إذا استدعيت الواجهة API من نفس الخادم — `http:\u002F\u002F127.0.0.1:3000` يكفي. لكشفه لخدمات أخرى يُوصى بوكيل nginx العكسي (انظر أدناه).",{"type":89,"title":90,"steps":91},"steps","نشر Gotenberg خطوة بخطوة",[92,95,98,101,104],{"title":93,"body":94},"إنشاء ملف compose","اتصل بـ VPS عبر SSH وأنشئ مجلدًا:\n```\nmkdir gotenberg && cd gotenberg\n```\nأنشئ `docker-compose.yml`:\n```yaml\nservices:\n  gotenberg:\n    image: gotenberg\u002Fgotenberg:8\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:3000:3000\"\n    command:\n      - gotenberg\n      - --chromium-disable-javascript=false\n      - --api-timeout=30s\n      - --chromium-max-queue-size=10\n```\nالربط بـ `127.0.0.1` يمنع الوصول المباشر من الإنترنت. في عام 2026 الإصدار المستقر هو **8.x** (8.9.1 فما فوق) — الصورة `:8` تتبع أحدث 8.x.",{"title":96,"body":97},"تشغيل الحاوية","شغّل `docker compose up -d`. يسحب Gotenberg الصورة (~1.5 GB، تشمل Chromium وLibreOffice) ويشغّل خادم HTTP. تحقق من نقطة نهاية الصحة:\n```\ncurl http:\u002F\u002F127.0.0.1:3000\u002Fhealth\n```\naستجابة `{\"status\":\"up\"}` تؤكد أن الخدمة جاهزة.",{"title":99,"body":100},"توليد أول PDF من HTML","أنشئ ملف HTML بسيطًا (`invoice.html`) وحوّله:\n```\ncurl -s --request POST http:\u002F\u002F127.0.0.1:3000\u002Fforms\u002Fchromium\u002Fconvert\u002Fhtml \\\n  --form 'index.html=@invoice.html' \\\n  -o invoice.pdf\n```\nالاستجابة هي PDF كتدفق ثنائي.",{"title":102,"body":103},"تحويل مستند Word إلى PDF","ارفع ملف DOCX إلى مسار LibreOffice:\n```\ncurl -s --request POST http:\u002F\u002F127.0.0.1:3000\u002Fforms\u002Flibreoffice\u002Fconvert \\\n  --form 'files=@contract.docx' \\\n  -o contract.pdf\n```\nيستخدم Gotenberg محرك LibreOffice المدمج للتحويل — لا يلزم ترخيص Microsoft Office.",{"title":105,"body":106},"إضافة المصادقة (مستحسن)","ليس لدى Gotenberg مصادقة مدمجة. النهج المستحسن: ثبّت nginx، أنشئ وكيلًا عكسيًا من `https:\u002F\u002Fgotenberg.your-domain.com` إلى `http:\u002F\u002F127.0.0.1:3000`، وأضف مصادقة HTTP basic. لا تكشف الخدمة أبدًا دون مصادقة على الإنترنت العام.",{"type":38,"title":108,"body":109},"مسارات API وصيغها","يكشف Gotenberg عائلتين من مسارات REST، جميعها `POST multipart\u002Fform-data`.\n\n**مسارات Chromium** — التصيير عبر متصفح headless:\n- `POST \u002Fforms\u002Fchromium\u002Fconvert\u002Fhtml` — التحويل من ملف HTML محلي (حقل `index.html`).\n- `POST \u002Fforms\u002Fchromium\u002Fconvert\u002Furl` — التحويل من رابط عام (حقل `url`)؛ يحمّل Chromium الصفحة كاملة بما فيها JavaScript.\n- `POST \u002Fforms\u002Fchromium\u002Fconvert\u002Fmarkdown` — تحويل Markdown مع ورقة أنماط اختيارية.\n\n**مسارات LibreOffice** — تحويل مستندات المكتب:\n- `POST \u002Fforms\u002Flibreoffice\u002Fconvert` — يقبل DOCX وXLSX وPPTX وODT وODS وODP وأكثر من 20 صيغة؛ يدمج عدة ملفات في PDF واحد إذا أرسلت `merge=true`.\n\n**مسارات PDF** — معالجة PDF الموجودة:\n- `POST \u002Fforms\u002Fpdfengines\u002Fmerge` — يدمج عدة ملفات PDF في ملف واحد.\n- `POST \u002Fforms\u002Fpdfengines\u002Fconvert` — يحوّل إلى PDF\u002FA (أرشفة طويلة المدى).\n\n**Webhook**: بدلًا من تلقي PDF ردًا متزامنًا، مرّر ترويسة `Gotenberg-Webhook-Url` — سيُرسل Gotenberg PDF إلى عنوانك URL بمجرد انتهاء التحويل.",{"type":38,"title":111,"body":112},"وكيل nginx العكسي","لكشف Gotenberg لخدمات أخرى أو استدعائه من نطاق مخصص، أضف كتلة `location` في إعداد nginx:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name gotenberg.your-domain.com;\n\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fgotenberg.your-domain.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fgotenberg.your-domain.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass         http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header   Host $host;\n        proxy_set_header   X-Real-IP $remote_addr;\n        proxy_read_timeout 60s;\n        client_max_body_size 50M;\n\n        auth_basic           \"Gotenberg API\";\n        auth_basic_user_file \u002Fetc\u002Fnginx\u002F.htpasswd;\n    }\n}\n```\n\nإذا كان Gotenberg يعمل على نفس الخادم مع تطبيقك الخلفي، فضّل الاستدعاء المباشر على `http:\u002F\u002F127.0.0.1:3000` — يتجنب حركة الشبكة الخارجية ولا يتطلب كشف الخدمة على نطاق.",{"type":38,"title":114,"body":115},"التكامل المتقدم: PHP وPython وNode.js","Gotenberg محايد للغة — أي عميل HTTP قادر على إرسال `multipart\u002Fform-data` يعمل.\n\n**PHP \u002F Laravel** — استخدم حزمة `gotenberg-php` الرسمية:\n```php\nuse Gotenberg\\Gotenberg;\nuse Gotenberg\\Stream;\n\n$request = Gotenberg::chromium('http:\u002F\u002F127.0.0.1:3000')\n    ->pdf()\n    ->html(Stream::path('\u002Fpath\u002Fto\u002Finvoice.html'));\n\n$response = $client->sendRequest($request);\nfile_put_contents('invoice.pdf', $response->getBody());\n```\n\n**Python** — مع مكتبة `gotenberg-client`:\n```python\nfrom gotenberg_client import GotenbergClient\n\nwith GotenbergClient('http:\u002F\u002F127.0.0.1:3000') as client:\n    with client.chromium.html_to_pdf() as route:\n        route.index(Path('invoice.html'))\n        response = route.run()\n        Path('invoice.pdf').write_bytes(response.content)\n```\n\n**Node.js** — مع `fetch` الأصلي (Node 18+):\n```js\nconst form = new FormData();\nform.append('index.html', new Blob([htmlContent], { type: 'text\u002Fhtml' }), 'index.html');\n\nconst res = await fetch('http:\u002F\u002F127.0.0.1:3000\u002Fforms\u002Fchromium\u002Fconvert\u002Fhtml', {\n  method: 'POST',\n  body: form,\n});\nconst pdf = Buffer.from(await res.arrayBuffer());\nfs.writeFileSync('invoice.pdf', pdf);\n```",{"type":38,"title":117,"body":118},"الإعداد المتقدم","تُمرَّر المعاملات كوسائط لأمر `gotenberg` في `docker-compose.yml` (أو عبر متغيرات بيئة بالبادئة `GOTENBERG_`).\n\n**المهلة**: `--api-timeout=30s` — المدة القصوى لتحويل. زدها (مثلًا `60s`) لمستندات DOCX الطويلة أو الصفحات ذات JavaScript الثقيل.\n\n**التزامن**: `--chromium-max-queue-size=10` — الحد الأقصى للتحويلات في قائمة الانتظار. عند تجاوزه يرد Gotenberg بـ `503` بدلًا من التراكم في الذاكرة.\n\n**تسجيل الأحداث**: يسجّل Gotenberg بصيغة JSON على stdout — `docker compose logs gotenberg` يمنحك تفاصيل كل تحويل.\n\n**تعطيل LibreOffice** (إذا احتجت Chromium فقط، توفيرًا في RAM):\n```yaml\ncommand:\n  - gotenberg\n  - --libreoffice-disable-listener=true\n```",{"type":120,"body":121},"tip","للبنى عالية الحجم، شغّل عدة نسخ من Gotenberg خلف موازن حمل nginx (`upstream`): تحتفظ كل نسخة بعمالها من Chromium، وتتوسع أفقيًا دون حالة مشتركة.",{"type":38,"title":123,"body":124},"تشخيص الأخطاء الشائعة","**مهلة Chromium — `context deadline exceeded`**: يتجاوز تحويل HTML المهلة المضبوطة. الأسباب الشائعة: JavaScript بطيء، موارد خارجية (CDN، خطوط Google Fonts) غير متاحة من الخادم، أو DOM ضخم جدًا. الحل: زد `--api-timeout`، استضف أصولك محليًا وألحقها كحقول multipart.\n\n**المنفذ 3000 مشغول**: تطبيق آخر يستمع على 3000. عدّل التعيين في `docker-compose.yml`: `\"127.0.0.1:3001:3000\"` وحدّث الرابط URL في استدعاءاتك.\n\n**الملف كبير جدًا — `413 Request Entity Too Large`**: يقطع nginx الطلب قبل Gotenberg. زد `client_max_body_size` في كتلة nginx (مثلًا `100M` لملفات XLSX الكبيرة).\n\n**نفاد الذاكرة — `OOMKilled`**: يقتل Docker الحاوية عندما يتجاوز Chromium RAM المتاحة. تحقق بـ `docker inspect gotenberg | grep OOMKilled`. الحلول: أضف RAM لـ VPS، قلّل التزامن (`--chromium-max-queue-size=3`), أو عطّل JavaScript إذا لم يحتجه HTML.\n\n**خطأ LibreOffice — ملف تالف أو صيغة غير معترف بها**: بعض ملفات DOCX من أدوات طرف ثالث غير متوافقة مع معيار OOXML. تحقق أولًا أن الملف يفتح بدون أخطاء في LibreOffice Desktop. يعطيك ترويسة سجل Gotenberg رسالة LibreOffice الدقيقة (`docker compose logs gotenberg --tail 50`).",{"type":38,"title":126,"body":127},"التكامل مع تطبيقك","Gotenberg محايد للغة — أي عميل HTTP يعمل. توجد مكتبات لـ PHP و‎Node.js وPython وGo وغيرها. لـ Laravel توجد حزمة رسمية تُغلّف الواجهة API. في Node.js يمكنك استدعاؤها بـ `axios` أو `fetch` الأصلية بإرسال كائن `FormData` مع محتوى HTML أو الملف. راجع قسم التكامل المتقدم أعلاه لأمثلة كود جاهزة بكل لغة.","انشر Gotenberg على VPS Cloud من ServOrbit في دقائق","مع VPS Cloud من ServOrbit تحصل على Docker مُهيأ مسبقًا وRAM قابلة للتوسع — القاعدة الصحيحة لـ Gotenberg للتعامل مع تصيير Chromium وتحويل LibreOffice بدون تنازع على الموارد.","أطلق VPS الخاص بي","\u002Fapplications\u002Fالتطوير\u002Fgotenberg",[133,158],{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":142,"views":143,"isPinned":19,"noindex":19,"publishedAt":144,"updatedAt":145,"category":146,"categories":152,"featuredImage":30,"bgImage":31,"posterImage":154,"relatedSolution":155},178,"استضافة-stirling-pdf-على-vps-أكثر-من-50-عملية-بلا-سحابة",{"fr":137,"en":138,"ar":135,"es":139},"self-host-stirling-pdf-vps","self-host-stirling-pdf-on-a-vps-50-pdf-operations-no-cloud","alojar-stirling-pdf-en-un-vps","استضافة Stirling PDF على VPS: أكثر من 50 عملية بلا سحابة","استضف Stirling PDF ذاتيًا على خادم VPS — تطبيق PDF رقم 1 على GitHub (87 ألف نجمة، MIT). دمج وتقسيم وضغط وتحويل وOCR وأكثر من 50 عملية. بلا رفع سحابي، بلا اشتراك.",5,0,"2026-07-13T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":147,"name":148,"slug":149,"color":150,"icon":151},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[153],{"id":147,"name":148,"slug":149,"color":150,"icon":151},"\u002Fblog\u002Fcovers\u002Fself-host-stirling-pdf-vps-poster.svg",{"categorySlug":156,"appSlug":157},"التعاون-والإنتاجية","stirling-pdf",{"id":159,"slug":160,"slugs":161,"title":165,"excerpt":166,"readTime":167,"views":18,"isPinned":19,"noindex":19,"publishedAt":168,"updatedAt":169,"category":170,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":179},61,"استضافة-appwrite-على-خادم-vps",{"fr":162,"en":163,"ar":160,"es":164},"heberger-appwrite-vps","hosting-appwrite-on-a-vps","alojar-appwrite-en-un-vps","استضافة Appwrite على خادم VPS: دليل شامل للاستضافة الذاتية","انشر Appwrite على VPS الخاص بك باستخدام Docker: المكدس الكامل، وTraefik SSL، والنسخ الاحتياطية، والتصلب، ومقارنة Supabase.",10,"2026-04-20T00:00:00+00:00","2026-09-19T02:00:43+00:00",{"id":171,"name":172,"slug":173,"color":174,"icon":175},6,"قواعد البيانات","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[177],{"id":171,"name":172,"slug":173,"color":174,"icon":175},"\u002Fblog\u002Fcovers\u002Fheberger-appwrite-vps-poster.svg",{"categorySlug":180,"appSlug":181},"قواعد-البيانات","appwrite",true,1794270221275]