مجانين: الشبكة التي عاشت أطول من منصتها

مجانين شبكة عربية للصحة النفسية والاجتماعية: مقالات، واستشارات، وملفات أطباء، وتصنيفات، يقرؤها من اليمين إلى اليسار أناس يبحثون عن مساعدة. عاش محتواها أطول من منصتين. الموقع العام كان يعمل على ASP القديم بعناوين .asp فهرستها محركات البحث لسنوات؛ ولوحة الإدارة على Angular 10 فوق API مولّد بـ JHipster؛ وبينهما نشر على Heroku لا يريد أحد الاستمرار في دفع ثمنه. إعادة البناء في 2026 نقلت الشبكة كلها إلى Next.js 15 للموقع العام وواجهتي الأطباء والإدارة، و API بـ Java 21 و Quarkus 3 فوق MySQL 8.4، ونشر واحد بـ Docker Compose خلف Caddy على VPS، مع بقاء كل عنوان قديم يعمل.

العميل

مجانين، اسم يحمله الموقع عن قصد، شبكة للصحة النفسية والاجتماعية: مقالات مطوّلة، ودليل استشارات والأطباء خلفها، وتصنيفات تتيح للقارئ العثور على نوع المساعدة الصحيح. كانت تنشر منذ ما قبل الموقع الحالي، والقيمة في الأرشيف.

ما وجدناه

ثلاث منصات في عمل واحد. الموقع العام ASP قديم بعناوين .asp مفهرسة منذ سنوات. ولوحة الإدارة تطبيق Angular 10 فوق API بـ Java مولّد بـ JHipster، 37 Commit بين 2021 و 2022، وتطبيق Heroku في المنتصف. لم يكن أحد يستطيع تغيير الموقع العام بأمان، وإطار لوحة الإدارة متأخر إصدارين رئيسيين. المحتوى، والروابط التي تشير إليه، هما الأصل؛ وكل ما حولهما عبء.

القرار

احتفظ بنموذج البيانات والبيانات. واستبدل الواجهات. الكيانات المهمة، المقالات والمحتوى والتصنيفات والاستشارات وأنواعها، انتقلت كما هي إلى API بـ Java 21 و Quarkus 3 مع Flyway، فوصل الأرشيف سليماً. وأُعيد بناء الموقع العام وواجهة الأطباء ولوحة الإدارة على Next.js 15، من اليمين إلى اليسار من عنصر الجذر، والقراءات المجهولة في الـ API تخدم المقالات والاستشارات والأطباء والتصنيفات.

العناوين

عناوين موقع النشر هي روابطه الواردة. كل مسار .asp قديم، بما فيه صفحات المحتوى والاستشارات، يُعاد توجيهه في Middleware الخاص بـ Next.js إلى موطنه الجديد، و Scripts تنظيف الروابط في مجلد النقل تعيد كتابة الروابط التي تركتها المنصة القديمة داخل المحتوى نفسه. ويبقى المضيف القديم يعمل تسعين يوماً بعد الانتقال حتى لا يختفي ما فات.

التشغيل

نشر واحد بـ Docker Compose على VPS: ملف الـ API، و MySQL 8.4 مستعادة من النسخة المؤرشفة، و Caddy يصدر TLS تلقائياً. Cron يومي يكتب النسخ الاحتياطية خارج الحاويات، والصحة في نقطة إدارة، والأسرار تُنسخ من ملف مثال ولا تُرفع إلى الـ Repository أبداً. الدليل أحد عشر خطوة مرقّمة يستطيع المالك قراءتها: ابنِ، واضبط، وشغّل، واستعد، وتحقق من كل نوع صفحة، واخفض TTL قبل يوم، وحوّل، وأبقِ المضيف القديم، وأوقف Heroku، وجدول النسخ الاحتياطي.

ما لا يُدّعى

إعادة البناء هندسة، وتُكتب هندسةً. لا نتيجة زيارات أو ترتيب تُدّعى لمجانين؛ ونقطة الفحص مقابل خط الأساس المؤرشف لم تُغلق. ما يمكن قوله أن الأرشيف على منصة مصانة، والعناوين تعمل، والمالك يستطيع النشر.

المزايا الرئيسية

  • نموذج المحتوى محفوظ: المقالات والاستشارات والأطباء والتصنيفات وأنواع الاستشارات، نُقلت بتاريخها
  • موقع عام على Next.js 15 App Router، من اليمين إلى اليسار من عنصر الجذر، بقراءات مجهولة للمقالات والاستشارات والأطباء والتصنيفات
  • REST API بـ Java 21 و Quarkus 3 مع Hibernate Panache و Flyway وحماية JWT و Cache و OpenAPI وصحة ومقاييس بـ Micrometer
  • روابط .asp القديمة، بما فيها صفحات المحتوى والاستشارات، تُعاد توجيهها في الـ Middleware لتبقى سنوات من الروابط الواردة تعمل
  • استعادة قاعدة البيانات من النسخة المؤرشفة مع Scripts لتنظيف الروابط التي تركتها المنصة القديمة داخل المحتوى
  • Docker Compose مع TLS تلقائي عبر Caddy على VPS، ونسخة MySQL يومية بـ Cron، وأسرار خارج الـ Repository
  • دليل انتقال مكتوب: عرض الـ Staging للمالك، وخفض TTL للـ DNS قبل يوم، وإبقاء المضيف القديم 90 يوماً، وإيقاف تطبيق Heroku

الأثر على العمل

يستطيع مالك الشبكة الاستمرار في النشر على منصة مصانة، وعلى Hosting يكلف ما يكلفه أي VPS، من دون خسارة العناوين التي يعرفها القراء ومحركات البحث أصلاً. النقل يُروى هنا قصةً هندسية لأنه كان كذلك: لا رقم زيارات أو ترتيب يُدّعى، ونافذة القياس مقابل خط الأساس المؤرشف لم تُغلق بعد.

أرسل الـ Domain. نشخّص قبل أن نسعّر.

عالق على منصة لا يمكن صيانتها لكن روابطها ما زالت تحمل العمل؟ أرسل الـ Domain. تصلك نتائج الـ Crawling وجرد الروابط وجواب صريح عمّا إذا كان النقل يستحق.

لا قوائم بريدية. ردّ واحد مكتوب، من شخص حقيقي.

تفضّل الحديث مباشرة؟ راسلنا على WhatsApp