
ستون حاوية على خادم واحد
صندوق معادن عارية واحد يشغل عشرات إلى مئات حاويات Hoody. يجعل KSM و BTRFS dedup التكلفة الإضافية قريبة من الصفر.
Hoody Cron يحمل الجدول. Hoody Exec يحمل منطق التجديد. الأحد الساعة 04:00، curl يُطلَق، certbot يعمل، الحزمة الجديدة تُرسَل بـ PATCH إلى البروكسي، وإعادة التحميل يُقرّ بها. لا جلسة شِل، لا مفتاح في ~/.ssh، ولا مُضيف عبور بينك وبين الشهادة.
# weekly · Sunday 04:00 0 4 * * 0 bash /scripts/renew.shأسبوعياً · POSTed مرة · يعمل بنفسه إلى الأبد
لا مفتاح SSH · لا مُضيف عبور · الجدول صفّ في JSON API
أنبوب التجديد بأكمله نقطتا نهاية وجدول من خمسة حقول. Cron يُحفّز Exec. Exec يستدعي ACME ويُرسل PATCH للبروكسي. التأكيد يعود رمز 200.
POST /users/me/entries بجدول "0 4 * * 0" وأمر "curl /scripts/certs/renew". خدمة cron تكتبه في crontab المستخدم وتبدأ التتبّع. فعلت هذا مرة، من أي مكان عبر HTTPS.
الأحد 04:00، cron يُجري curl لرابط exec. Exec يُولّد السكربت، يتحدث مع نقطة نهاية ACME التابعة لـ Let's Encrypt، يُحقّق تحدّي http-01، ويكتب الحزمة المُجدَّدة إلى /files. لا عقدة تُسجّل دخولها، لا حاجة لجلسة.
السكربت يُرسل PATCH للشهادة الجديدة والمفتاح إلى نقطة نهاية حزمة بروكسي Hoody. البروكسي يُعيد تحميلاً ساخناً — لا إعادة تشغيل — والمصافحة TLS التالية تُقدّم الشهادة الجديدة. الدورة كلها أقلّ من دقيقة.
كل خطوة استدعاء HTTP يمكنك إعادة تشغيله من تيرمنال — `curl --dry-run` إن أردت تنقيحه، `curl -i` إن أردت الرؤوس. الأنبوب لا يعتمد على جلسة مُسجَّل بها في أي نقطة.
على اليسار، مُدخل cron الذي يُجدوِل المهمة. على اليمين، سكربت exec الذي يُؤدّي العمل. كلاهما قابل للوصول عبر HTTP — كلاهما قابل للتدقيق، كلاهما قابل لإعادة التشغيل من أي حاسوب محمول أو هاتف.
# register the weekly renewal curl -X POST \ https://cron.containers.hoody.com/users/me/entries \ -H "Content-Type: application/json" \ -d '[ "schedule":"0 4 * * 0", "command":"curl -fsS https://exec.containers.hoody.com/scripts/certs/renew", "comment":"weekly TLS renewal", "enabled":true ]' # response HTTP/1.1 201 Created { "id":"7a92", "schedule":"0 4 * * 0", "enabled":true }
// scripts/certs/renew.ts // @mode serverless // @timeout 120000 const domains = ["your-app.com", "api.your-app.com", ...]; for (const d of domains) { const cert = await acme.order(d); await fetch("/api/v1/proxy/cert/bundle", { method: "PATCH", body: JSON.stringify({ d, cert }) }); } return { "renewed": domains.length };
رابطان، صباح أحد واحد، صفر SSH. مُدخل cron بيانات — أرسل POST مرة وهو موجود حتى تحذفه. سكربت exec ملف — غيّره عبر API والتشغيل التالي يلتقط المنطق الجديد. لا شيء في هذه الحلقة يحتاج إلى شخص على آلة.
نفس النتيجة — شهادة مُجدَّدة كل أسبوع — مع ثلاث خصائص لم يملكها الإعداد القديم.
المصادقة رمز URL، لا مفتاح SSH. دوّره عبر API ويتوقّف الرمز القديم عن العمل في كل مكان دفعة واحدة. لا تمرير وكيل، لا حصن، ولا ملف مفتاح نسيت أنك نسخته إلى صندوق CI قبل ثلاث سنوات.
كل تشغيل صفّ في سجل cron وسطر طلب في سجل exec. ابحث بـ grep عمّن أطلقه، ومتى، وأي شهادة، وأي رمز استجابة. الـ200 من البروكسي هو الإيصال بأن إعادة التحميل وصلت.
أعد تشغيل التجديد من حاسوبك المحمول بـ `curl /scripts/certs/renew?dry_run=true`. شاهد الاستجابة، أصلح السكربت عبر exec write API، أعد المحاولة. الحلقة كلها تحدث عبر HTTPS — نفس الأنبوب الذي يستخدمه جدول الإنتاج.
أرقام من النشر، لا قياسات معيارية. الشكل هو ما يهمّ: قطع متحرّكة قليلة جداً، كلها تتحدث HTTP.
الإعداد POST. التجديد GET على جدول. التنقيح curl. لا توجد جلسة شِل في الأنبوب في أي نقطة — مفتاحك الخاص لا يحتاج أبداً أن يكون على الصندوق.
مُدخل cron واحد لجدولة التشغيل. مسار exec واحد يُشغّل السكربت. الرابط الثالث — PATCH لحزمة البروكسي — يعيش داخل السكربت ويُعيد تحميل الشهادة.
التعبير القياسي من خمسة حقول "0 4 * * 0" — الأحد 04:00. أو `@weekly` إن لم يهمّك أي يوم. خدمة cron تقبل الاثنين، إضافةً إلى الانتهاء التلقائي للتجديدات لمرة واحدة.
خدمة Cron: تعابير من خمسة حقول وماكرو (`@hourly`, `@daily`, `@weekly`, `@monthly`, `@yearly`)، عزل لكل مستخدم، expires_at اختياري. Exec: عوازل V8، وقت تشغيل Bun، تعليقات سحرية للوضع/المهلة/CORS. تدفّق ACME يُعالَج في سكربتك — Hoody لا يُشغّل certbot لك، يُشغّل كودك على جدول.
التجديد curl على جدول — لا جلسة شِل، لا مفتاح، ولا مُضيف عبور.
الطرق القياسية للحفاظ على TLS صالحاً في الإنتاج. كل واحدة تريد إمّا جلسة شِل، أو خدمة مستوى تحكّم، أو الاثنتين. زوج cron-plus-exec لا يريد أيّاً منهما.
توقّف عن تسجيل الدخول لتجديد الشهادات. أرسل POST للجدول مرة. وشاهد البروكسي يُعيد تحميل نفسه كل صباح أحد.