دليل النشر

Certimate على VPS: أتمتة شهادات SSL عبر ACME

انشر على VPS Cloud ←

دليل عملي

Certimate على VPS: أتمتة شهادات SSL عبر ACME

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

الشهادة المنتهية تعني موقعًا يعرض تحذيرًا أحمر لكل زائر، وواجهة API لم يعد أي عميل يستدعيها، وصباح اثنين ضائعًا في فهم سبب عدم تشغيل certbot على ذلك الخادم بالذات. Certimate، مدير شهادات مفتوح المصدر برخصة MIT، يركّز الدورة كاملة في مكان واحد: يحصّل الشهادات عبر ACME، وينشرها على خوادمك، ويجدّدها قبل انتهائها، وينبّهك عند أي فشل. يثبّته هذا الدليل باستخدام Docker Compose على خادم VPS، ويستبدل كلمة مرور المصنع، وينشره عبر HTTPS خلف nginx، ثم يبني أول مسار DNS-01 ونشرًا عبر SSH.

المحتويات· لماذا تجمع شهاداتك في مكان واحد1/12
  1. 01لماذا تجمع شهاداتك في مكان واحد
  2. 02ما يقدّمه Certimate
  3. 03Certimate وcertbot وNginx Proxy Manager
  4. 04المتطلبات
  5. 05تثبيت Certimate باستخدام Docker Compose
  6. 06لا تترك كلمة مرور المصنع مفعّلة أبدًا
  7. 07نشر اللوحة عبر HTTPS خلف nginx
  8. 08أول مسار: شهادة wildcard عبر DNS-01
  9. 09النشر عبر SSH على خوادم nginx
  10. 10تجديد مجدول وتنبيهات
  11. 11الأمان والنسخ الاحتياطي
  12. 12Certimate بنقرة واحدة على ServOrbit

لماذا تجمع شهاداتك في مكان واحد

يتقن certbot أمرًا واحدًا: تجديد شهادة الخادم الذي يعمل عليه. وما إن تدير عدة خوادم أو شهادة wildcard مشتركة أو مواقع عملاء، حتى يصبح كل جهاز موعدًا نهائيًا تراقبه على حدة، ولا يُكتشف الفشل الصامت إلا حين يعرض المتصفح تحذيره.

وفوق ذلك، تقصر مدة صلاحية الشهادات العامة عامًا بعد عام، ما يضاعف مرات التجديد. إن جمع الإصدار والنشر والمراقبة في مكان واحد، مع سجل وتنبيهات، هو الطريقة الأكثر أمانًا كي لا تنتهي صلاحية أي شهادة بعد اليوم.

ما يقدّمه Certimate

  • مسارات عمل مرئية — الطلب والنشر والتنبيه متسلسلة في مسار واحد، مجدول للتجديد.
  • DNS-01 وHTTP-01 — شهادات wildcard ومتعددة النطاقات عبر DNS-01 لدى أكثر من 70 مزوّدًا، منها Cloudflare وOVHcloud وHetzner.
  • عدة سلطات — Let's Encrypt وZeroSSL وGoogle Trust Services وSSL.com؛ بمفاتيح RSA أو ECC.
  • أكثر من 160 وجهة نشر — SSH وcPanel وNginx Proxy Manager وProxmox VE وKubernetes وشبكات CDN والخدمات السحابية.
  • صيغ PEM وPFX وJKS — لـ nginx أو Apache أو IIS أو تطبيق Java.
  • تنبيهات — البريد الإلكتروني أو Telegram أو Slack أو Discord أو Matrix أو webhook عند كل فشل وقبل انتهاء الصلاحية.

Certimate وcertbot وNginx Proxy Manager

مرّر الجدول أفقيًا

CertimatecertbotNginx Proxy Manager
واجهة ويبنعم، مسارات مرئيةلا، سطر الأوامرنعم
عدة خوادمنعم، نشر عبر SSH وAPIلا، واحد لكل خادملا، مضيفاته فقط
Wildcard عبر DNS-01نعم، أكثر من 70 مزوّدًانعم، عبر إضافاتنعم
تنبيهات الفشلنعم، متعددة القنواتلا، تحتاج إلى سكربتلا
وكيل عكسيلالانعم، هذا دوره
سجل التنفيذنعمسجل محليجزئي

المتطلبات

يكفي خادم VPS بنظام Ubuntu 24.04 وذاكرة 512 ميغابايت مع Docker مثبّت: يستهلك Certimate نحو عشرين ميغابايت. جهّز نطاقًا فرعيًا للوحة (مثل certs.example.com) يشير إلى الخادم، وnginx كوكيل عكسي. وللمسارات، احتفظ برمز API من مزوّد DNS ووصول SSH إلى الخوادم التي ستستقبل الشهادات.

تثبيت Certimate باستخدام Docker Compose

  1. تجهيز المجلد وكلمة المرور

    أنشئ مجلد التطبيق وملف .env يحمل كلمة مرور المسؤول مولّدة عشوائيًا.

    mkdir -p /opt/certimate && cd /opt/certimate
    printf 'ADMIN_PASSWORD=%s\n' "$(openssl rand -hex 16)" > .env
    chmod 600 .env
  2. كتابة ملف compose

    أنشئ compose.yaml. في أول تشغيل فقط، يطبّق الأمر ADMIN_PASSWORD على حساب المصنع قبل تشغيل الخادم؛ ويمنع الملف العلامة لاحقًا الكتابة فوق كلمة مرور غُيّرت من الواجهة. يُنشر المنفذ على الواجهة المحلية فقط: لا يصل إليه إلا nginx.

    services:
      certimate:
        image: certimate/certimate:v0.4.36
        restart: unless-stopped
        ports:
          - "127.0.0.1:8109:8090"
        environment:
          ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD requis}
        entrypoint: ["sh", "-c"]
        command:
          - >-
            if [ ! -f /app/pb_data/.admin-seeded ]; then
            ./certimate superuser upsert [email protected] "$$ADMIN_PASSWORD" && touch /app/pb_data/.admin-seeded || exit 1;
            fi;
            exec ./certimate serve --http 0.0.0.0:8090
        volumes:
          - certimate-data:/app/pb_data
    volumes:
      certimate-data: {}
  3. التشغيل والتحقق

    شغّل الحزمة. يطبّق Certimate ترحيلاته عند البدء، ثم يجب أن يستجيب فحص الصحة.

    docker compose up -d
    docker compose ps
    curl -fsS http://127.0.0.1:8109/api/health

لا تترك كلمة مرور المصنع مفعّلة أبدًا

تأتي الصورة بحساب [email protected] وكلمة المرور 1234567890، وهي موثّقة في ملف README للمشروع. لوحة مكشوفة بهذه البيانات تمنح أي شخص رموز DNS ومفاتيح SSH الخاصة بك. يستبدلها الأمر أعلاه قبل أن يبدأ الخادم بالاستماع أصلًا؛ وإذا شغّلت الصورة بطريقة أخرى، فغيّرها قبل نشر النطاق.

نشر اللوحة عبر HTTPS خلف nginx

أضف كتلة خادم توجّه الطلبات إلى الواجهة المحلية. للبدء، استخدم شهادة حصّلتها مرة واحدة بـ certbot؛ ثم يستطيع Certimate تجديد شهادته كبقية الشهادات.

server {
    listen 443 ssl;
    server_name certs.example.com;
    # ssl_certificate / ssl_certificate_key: current certificate
    location / {
        proxy_pass http://127.0.0.1:8109;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

افتح https://certs.example.com، وسجّل الدخول بـ [email protected] وكلمة المرور الموجودة في ملف .env، ثم غيّر البريد الإلكتروني وكلمة المرور من إعدادات الحساب.

أول مسار: شهادة wildcard عبر DNS-01

في الوصول، أنشئ وصولًا إلى Cloudflare (أو OVHcloud أو Hetzner…) برمز API مقصور على صلاحية تعديل DNS للمنطقة المعنية. في مسارات العمل، أنشئ مسارًا: عقدة طلب تضم example.com و*.example.com، وتحدي DNS-01، وسلطة Let's Encrypt، ومفتاح ECC.

شغّل المسار يدويًا: يضيف Certimate سجل TXT، وينتظر انتشاره، ويحصّل الشهادة ويحفظها في الشهادات مع تاريخ انتهائها. لا يحتاج تحدي DNS-01 إلى أي منفذ مفتوح على الخوادم المستهدفة، وهو الوحيد الذي يسمح بشهادة wildcard.

النشر عبر SSH على خوادم nginx

على كل خادم مستهدف، أنشئ حسابًا مخصصًا لا يستطيع إلا الكتابة في مجلد الشهادات وإعادة تحميل nginx:

useradd -m -s /bin/bash certdeploy
install -d -o certdeploy -m 750 /etc/ssl/certimate
echo 'certdeploy ALL=(root) NOPASSWD: /usr/sbin/nginx -t, /usr/bin/systemctl reload nginx' > /etc/sudoers.d/certdeploy

في Certimate، أضف وصول SSH بالمفتاح إلى هذا الحساب، ثم عقدة نشر SSH بعد الطلب: المساران /etc/ssl/certimate/example.com.pem و.key، والأمر sudo nginx -t && sudo systemctl reload nginx. وجّه ssl_certificate وssl_certificate_key في مضيفاتك الافتراضية إلى هذه الملفات.

تجديد مجدول وتنبيهات

فعّل المشغّل المجدول للمسار (تشغيل واحد يوميًا يكفي: لا يجدّد Certimate إلا عند اقتراب الانتهاء) وأضف عقدة تنبيه إلى Telegram أو Slack أو البريد الإلكتروني. يحتفظ كل تنفيذ بسجله: عند الفشل تعرف إن كان تحدي DNS أو السلطة أو النشر هو ما تعطّل، وتعرف ذلك قبل انتهاء الصلاحية.

الأمان والنسخ الاحتياطي

تحتوي قاعدة بيانات Certimate على رموز DNS ومفاتيح SSH والمفاتيح الخاصة: تعامل مع اللوحة كخزنة. كلمة مرور قوية، وHTTPS فقط، ورموز وحسابات SSH بأدنى الصلاحيات. انسخ وحدة التخزين احتياطيًا بانتظام، وشفّر الأرشيف قبل نسخه خارج الخادم:

cd /opt/certimate
docker compose stop
docker run --rm -v certimate_certimate-data:/data -v "$PWD":/backup alpine \
  tar czf /backup/certimate-$(date +%F).tar.gz -C /data .
docker compose start

Certimate بنقرة واحدة على ServOrbit

من المتجر في مساحة العميل، يُثبَّت Certimate على خادم VPS بنظام Ubuntu 24.04 بنقرة واحدة: الحاوية الرسمية، وكلمة مرور المسؤول مولّدة ومطبّقة قبل أول تشغيل، ووحدة تخزين البيانات، والوكيل العكسي nginx عبر HTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم. تظهر كلمة المرور في مساحة العميل على صفحة التطبيق.

شهاداتك تتجدد دون أن تفكر فيها

يكفي خادم VPS من ServOrbit بنظام Ubuntu 24.04 وذاكرة 512 ميغابايت لتشغيل Certimate. تثبيت بنقرة واحدة من المتجر، وكلمة مرور المسؤول مولّدة لك، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم.

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

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

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