لماذا تجمع شهاداتك في مكان واحد
يتقن 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
مرّر الجدول أفقيًا
| Certimate | certbot | Nginx 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
تجهيز المجلد وكلمة المرور
أنشئ مجلد التطبيق وملف
.envيحمل كلمة مرور المسؤول مولّدة عشوائيًا.mkdir -p /opt/certimate && cd /opt/certimate printf 'ADMIN_PASSWORD=%s\n' "$(openssl rand -hex 16)" > .env chmod 600 .envكتابة ملف 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: {}التشغيل والتحقق
شغّل الحزمة. يطبّق 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 startCertimate بنقرة واحدة على ServOrbit
من المتجر في مساحة العميل، يُثبَّت Certimate على خادم VPS بنظام Ubuntu 24.04 بنقرة واحدة: الحاوية الرسمية، وكلمة مرور المسؤول مولّدة ومطبّقة قبل أول تشغيل، ووحدة تخزين البيانات، والوكيل العكسي nginx عبر HTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم. تظهر كلمة المرور في مساحة العميل على صفحة التطبيق.