دليل النشر

استضافة Reactive Resume على VPS: أنشئ سيرك الذاتية وشاركها

انشر على VPS Cloud ←

دليل عملي

استضافة Reactive Resume على VPS: أنشئ سيرك الذاتية وشاركها

الاستضافة الذاتية7 دقائق للقراءةعدد الخطوات: 6

‏Reactive Resume منشئ سير ذاتية مفتوح المصدر (MIT) يتجاوز 42 000 نجمة على ‏GitHub. منذ الإصدار 5.1.0 يُولِّد ملفات PDF مباشرةً في المتصفح دون أي خدمة طباعة على الخادم. النتيجة: حاويتان خفيفتان تكفيان لتشغيل نسخة كاملة، وخادم ‏VPS بذاكرة 1 جيجابايت يستوعب الأداة دون تنازلات.

المحتويات· لماذا استضافة منشئ CV ذاتيًا1/9
  1. 01لماذا استضافة منشئ CV ذاتيًا
  2. 02ما تحصل عليه مع Reactive Resume المستضاف ذاتيًا
  3. 03المتطلبات الأساسية
  4. 04انشر Reactive Resume على خادم VPS الخاص بك
  5. 05أهم تغيير في الإصدار 5.1.0: تصدير PDF بلا خادم طباعة
  6. 06حافظ على سرية مفتاح التوثيق
  7. 07استخدام REST API لأتمتة التصدير
  8. 08النسخ الاحتياطي وقابلية نقل البيانات
  9. 09استكشاف الأخطاء الشائعة وإصلاحها

لماذا استضافة منشئ CV ذاتيًا

تُجوِّل أدوات ‏SaaS لبناء السيرة الذاتية تاريخ مسيرتك المهنية وتُقيِّد الوصول إلى القوالب أو تفرض رسومًا على تنزيل ‏PDF. الاستضافة الذاتية لـ ‏Reactive Resume تعكس هذا النموذج: سيرك الذاتية وصورك وتصديراتك تبقى في حجم ‏Docker على ‏VPS الخاص بك، قابلة للتصدير عبر واجهة المستخدم أو ‏REST API، ومشاركتها تحت نطاقك الخاص. بلا حدود للقوالب، بلا علامات مائية، بلا اشتراك مُلزِم.

تمنحك الاستضافة الذاتية أيضًا سيطرةً كاملة على البيانات الحساسة التي تتضمنها السيرة الذاتية — معلومات الاتصال الشخصية وتاريخ العمل والمهارات. لا تعبر هذه البيانات عبر طرف ثالث ولا تُخزَّن لديه.

ما تحصل عليه مع Reactive Resume المستضاف ذاتيًا

  • محرِّر مرئي بالسحب والإفلات في المتصفح — بلا تطبيق للتثبيت، يعمل على أي جهاز.
  • مكتبة قوالب احترافية متوافقة مع أنظمة ATS — تخطيطات متعددة لقطاعات ومستويات خبرة مختلفة.
  • ‏تصدير PDF من جانب المتصفح بالكامل منذ الإصدار 5.1.0 — بلا ‏Chrome أو ‏Puppeteer أو ‏Browserless على الخادم.
  • رابط عام للسيرة الذاتية — شارك ملفك على رابط مقروء يُحدَّث فوريًا.
  • عدة سير ذاتية لكل حساب — اشتق نسخًا حسب المنصب أو اللغة دون تكرار العمل.
  • ‏REST API — أنشئ السير الذاتية وصدِّرها برمجيًا للتكامل مع أدوات الموارد البشرية.
  • تخزين محلي — تُكتب الملفات المرفوعة (الصور الشخصية وصور الأعمال) في وحدة تخزين ‏Docker دون حاجة إلى ‏S3.
  • ‏توثيق OAuth اختياري — صِّل حساب ‏GitHub أو ‏Google بإضافة مفاتيح ‏API المقابلة إلى الإعدادات.

المتطلبات الأساسية

خادم ‏ServOrbit VPS بنظام ‏Ubuntu 24.04 وذاكرة لا تقل عن 1 جيجابايت. يستهلك تطبيق ‏Node.js نحو 300 ميجابايت أثناء الخمول، ويضيف ‏PostgreSQL 16 من 100 إلى 200 ميجابايت — ويكفي خادم بذاكرة 1 جيجابايت للاستخدام الشخصي أو لفريق صغير.

‏يُثبِّت ‏AWX كلًا من ‏Docker و‏Docker Compose تلقائيًا عند النشر. اسم النطاق مطلوب: يثبِّت ‏Reactive Resume رابط المصادقة (APP_URL) عند أول تشغيل ولا يمكنه العمل خلف عنوان ‏IP وحده.

إن كنت تنوي تفعيل التحقق من الحساب عبر البريد الإلكتروني، فيُنصح بتوفير خادم ‏SMTP صادر. بدونه يظهر رابط التحقق في سجلات ‏Docker — مناسب للاستخدام الفردي، وأقل ملاءمةً عند فتح الوصول لمستخدمين آخرين.

انشر Reactive Resume على خادم VPS الخاص بك

  1. اختر النطاق النهائي قبل النشر

    ‏يُثبِّت ‏Reactive Resume ‏APP_URL في رموز المصادقة وردود ‏OAuth عند أول تشغيل. تغيير النطاق لاحقًا يُبطل جميع الجلسات ويستلزم حذف وحدة تخزين ‏PostgreSQL. أنشئ سجل ‏DNS من النوع ‏A — مثلًا cv.yourdomain.com — وانتظر الانتشار قبل النشر.

  2. نشر بنقرة واحدة من سوق ServOrbit

    افتح لوحة تحكم ‏ServOrbit، اذهب إلى سوق التطبيقات ← ‏Reactive Resume، أدخل نطاقك وانقر نشر. يُثبِّت ‏AWX ‏Docker ويولِّد سرًّا عشوائيًا ويضبط ‏nginx مع ‏TLS ‏Let's Encrypt ويشغِّل الحاويتين في أقل من دقيقتين.

  3. أنشئ حسابك وتحقق من بريدك

    انتقل إلى ‏https://cv.yourdomain.com وانقر ‏Sign Up لإنشاء حسابك. بدون ‏SMTP يظهر رابط التحقق في سجلات ‏Docker: docker compose logs reactive-resume | grep verify. انقر الرابط لتفعيل حسابك.

  4. أنشئ سيرتك الذاتية الأولى

    انقر على + لإنشاء سيرة ذاتية جديدة. اختر قالبًا وأملأ أقسامك (الملخص والخبرة والتعليم والمهارات) في اللوحة اليسرى وشاهد النتيجة في الوقت الفعلي على اليمين. انقر تنزيل لتصدير ‏PDF — التصيير من جانب المتصفح فورًا بلا انتظار.

  5. شارك سيرتك الذاتية علنًا

    في إعدادات السيرة الذاتية، فعِّل ‏CV public. يولِّد ‏Reactive Resume رابطًا قابلًا للمشاركة — https://cv.yourdomain.com/r/your-name — يخدم دائمًا أحدث نسخة. شارك هذا الرابط في طلبات التوظيف بدلًا من إرفاق ‏PDF ثابت تحتاج إلى إعادة إرساله عند كل تحديث.

  6. ضبط توثيق OAuth (اختياري)

    للسماح بتسجيل الدخول عبر ‏GitHub أو ‏Google، أضف متغيرات البيئة المقابلة إلى إعدادات النشر: GITHUB_CLIENT_ID وGITHUB_CLIENT_SECRET وGOOGLE_CLIENT_ID وGOOGLE_CLIENT_SECRET. أعد تشغيل الحاويات بعد ذلك بـ docker compose restart. تظهر أزرار الدخول الاجتماعي تلقائيًا على صفحة تسجيل الدخول بمجرد توفر المتغيرات.

أهم تغيير في الإصدار 5.1.0: تصدير PDF بلا خادم طباعة

حتى الإصدار 5.0 كان ‏Reactive Resume يعتمد على ‏Browserless أو ‏Chromium بلا واجهة لتوليد ملفات ‏PDF على الخادم، أي 700 ميجابايت إلى 1 جيجابايت إضافية من الذاكرة وتبعية يجب صيانتها. منذ الإصدار 5.1.0 يتولّى @react-pdf/renderer التوليد، وهي مكتبة ‏JavaScript تعمل مباشرة في متصفح المستخدم. لا يرى الخادم سوى طلب حفظ المستند — بلا ‏Chrome، بلا ‏Puppeteer، بلا خدمة طباعة على البنية التحتية. وهذا ما يُعيد الحد الأدنى للتشغيل إلى حاويتين خفيفتين.

حافظ على سرية مفتاح التوثيق

يولِّد نشر ‏ServOrbit تلقائيًا قيمةً عشوائية لـ SECRET_KEY. لا تعد استخدام قيمة متوقعة أو تشاركها بين نسخ متعددة. إن اشتبهت في اختراقها، أعد توليدها وأعد تشغيل الحاويات: ستُبطَل جميع الجلسات النشطة ويُجبَر المستخدمون على تسجيل الدخول مجددًا — وهذا هو السلوك المتوقع.

استخدام REST API لأتمتة التصدير

يكشف ‏Reactive Resume واجهة ‏REST API كاملة على المسار /api/v3. يمكنك إنشاء السير الذاتية وتحديثها وتشغيل تصدير ‏PDF برمجيًا — مفيد لدمج توليد السير الذاتية في سير عمل الموارد البشرية أو في مسار تقديم طلبات آلي.

للمصادقة، احصل على رمز ‏JWT عبر POST /api/v3/auth/login ببيانات اعتمادك، ثم مرِّر الرمز في الترويسة Authorization: Bearer <token> مع كل طلب.

مثال — استرداد قائمة سيرك الذاتية:

curl -s -H "Authorization: Bearer <your-token>" \
  https://cv.yourdomain.com/api/v3/resume | jq '.[].title'

تتوفر الوثائق الكاملة لواجهة ‏API في المستودع الرسمي.

النسخ الاحتياطي وقابلية نقل البيانات

وحدتا تخزين ‏Docker تحملان الخدمة بأكملها: reactive_resume_db لقاعدة ‏PostgreSQL (الحسابات والسير الذاتية والإعدادات) وreactive_resume_data للملفات المرفوعة (الصور الشخصية وصور الأعمال). أبسط نسخة احتياطية:

docker run --rm \
  -v reactive_resume_db:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/db.tar.gz /data

وللتصدير المباشر بصيغة ‏SQL: docker exec db pg_dump -U postgres postgres > backup.sql

تستعيد الخدمة بتركيب الوحدة على حاوية ‏PostgreSQL جديدة مضبوطة على الرابط العام نفسه. جدوِل هذه النسخ الاحتياطية بواسطة ‏cron يومي أو استخدم خدمة لقطات وحدة التخزين من ‏VPS الخاص بك للتغطية التلقائية.

استكشاف الأخطاء الشائعة وإصلاحها

APP_URL غير صحيح بعد تغيير النطاق. العَرَض: فشل ردود ‏OAuth أو يشير رابط التحقق إلى النطاق القديم. الحل: عدِّل APP_URL في الإعدادات، ثم احذف وحدة تخزين ‏PostgreSQL (docker volume rm reactive_resume_db) وأعد التشغيل. ستُفقَد جميع البيانات — خطِّط لهذه الخطوة قبل إنشاء حسابات في بيئة الإنتاج.

حاوية التطبيق تُعيد التشغيل باستمرار. تحقق من السجلات بـ docker compose logs reactive-resume. أكثر الأخطاء شيوعًا رفض اتصال ‏PostgreSQL (Connection refused to db:5432): تبدأ حاوية التطبيق قبل أن يكون ‏PostgreSQL جاهزًا. انتظر 30 ثانية وأعد تشغيل docker compose up -d.

ملف PDF بتخطيط غير صحيح. تصيير ‏PDF يتم من جانب المتصفح بواسطة @react-pdf/renderer ويعتمد على محرك عرض متصفحك. إن بدا الناتج منزاحًا، جرِّب متصفحًا مختلفًا (‏Chrome أو ‏Firefox حديث). المتصفحات القديمة أو الإضافات التي تعدِّل الخطوط قد تؤثر في التصيير.

خطأ secretOrPrivateKey must have a value عند البدء. متغير SECRET_KEY مفقود من الإعدادات. أضفه بقيمة عشوائية من 32 محرفًا على الأقل: openssl rand -hex 32 يولِّد قيمة مناسبة.

رابط السيرة الذاتية العام يُرجع 404. تحقق من أن السيرة الذاتية مُعلَّمة كعامة في إعداداتها. إن كان كذلك، تحقق من إعداد ‏nginx: يجب أن يُوكِّل بلوك location /r/ إلى واجهة ‏Next.js الأمامية لا إلى ‏API.

انشر Reactive Resume على خادمك الخاص

استضف Reactive Resume ذاتيًا على VPS ServOrbit — مفتوح المصدر، بلا اشتراك، جميع بيانات CV الخاصة بك على بنيتك التحتية.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة