עובדי Push ו-Edge
שתי תצורות Worker תומכות במנגנון ה-Web Push של Code Keeper Bot:
Cloudflare Worker (/worker) – מתאים לדיפלוימנט Edge סרברלס.
Node Service Worker (/push_worker) – תהליך נפרד שרץ לצד הבוט (Render/Docker/Hobby VM).
העמוד מסביר איך לפרוס ולחבר אותם אל ה-WebApp (webapp/push_api.py) בצורה מאובטחת.
Cloudflare Worker (/worker)
קובץ הכניסה:
worker/src/index.js. משתמש ב‑web-pushכדי לשלוח הודעות בשם השרת.נתיב יחיד:
POST /send.אימות: כותרת
Authorization: Bearer <PUSH_DELIVERY_TOKEN>– חייב להיות זהה ל‑ENV ב-WebApp (PUSH_DELIVERY_TOKEN).משתני סביבה חובה ב־Workers KV/Secrets:
PUSH_DELIVERY_TOKEN– אסימון שיתוף בין ה-Worker ל-WebApp.WORKER_VAPID_PUBLIC_KEY/WORKER_VAPID_PRIVATE_KEY– זוג VAPID ייעודי (base64url). אל תשתפו את המפתח הפרטי עם תהליכי Flask.WORKER_VAPID_SUB_EMAIL– מייל לתמיכה (נדרש ע“י ספריית web-push; מומר ל-mailto:אם צריך).
לוגיקה: מוודא JSON תקין, בודק הרשאות, מגבה את האנדפוינט ב-hash לצורך לוגים, ושולח את הפוש. שגיאות 4xx מוחזרות כ־
ok:falseעםstatusכדי לאפשר לשרת למחוק מנויים מתים.פריסה: באמצעות wrangler publish עם קובץ
wrangler.toml. מומלץ להגדיר נתיב זמין רק ב-HTTPS ולחסום GET/PUT לשאר הנתיבים (ה-Worker כבר מחזיר 404/405).
Node Push Worker (/push_worker)
נכתב ב-Express (
index.js) ומאזין ברירת מחדל על127.0.0.1:8080.מיועד לרוץ כחלק מ-
scripts/start_with_worker.shאו כ-Container נפרד. הסקריפט טוען.env.workerכדי למנוע הדלפת VAPID keys לפרוסס הראשי.נתיבים:
GET /healthz– בדיקת חיים (משמשת את סקריפט ה-start להמתין ל-ready).POST /send– API זהה ל-Cloudflare Worker (אותם שדות JSON).
משתני סביבה:
PORT– ברירת מחדל 8080; הסקריפט מגדיר אוטומטיתPUSH_WORKER_PORT.PUSH_DELIVERY_TOKEN– תואם לחלק השרת.WORKER_VAPID_PUBLIC_KEY,WORKER_VAPID_PRIVATE_KEY,WORKER_VAPID_SUB_EMAIL– עדיפות ראשונה; נופל חזרה ל-VAPID_*אם חסר.
אבטחה:
השוואת Bearer מתבצעת ב-constant time בעזרת
crypto.timingSafeEqual.ה-Worker מאזין רק ל־localhost כדי למנוע גישה חיצונית. לפריסה ב-Kubernetes/Compose חשפו רק דרך Service פנימי.
חיבור ל-WebApp (webapp/push_api.py)
כדי להפעיל משלוח דרך אחד ה-Workers:
הגדירו ב-WebApp את המשתנים הבאים:
PUSH_REMOTE_DELIVERY_ENABLED=true PUSH_DELIVERY_URL=https://push-worker.example.com PUSH_DELIVERY_TOKEN=super-secret-token
אם עובדים מול Worker מקומי (באמצעות start_with_worker.sh):
קבעו
PUSH_WORKER_PORT(ברירת מחדל 18080).מלאו את
.env.workerעם המפתחות הייעודיים.הסקריפט ימתין ל-
/healthzעד 6 שניות ויעדכןPUSH_DELIVERY_URLל-http://127.0.0.1:<port>אם לא סופק ערך.
במצב Cloudflare אין צורך בסקריפט – פשוט הציבו את ה-URL של ה-Worker.
בדיקות ועצות
בדיקת אינטגרציה – הריצו
curl -X POST $PUSH_DELIVERY_URL/sendעם Bearer Token כדי לוודא את ה-Worker לפני שמפעילים את ה-WebApp.בדיקת לקוח – השתמשו ב-
POST /api/push/test(נדרש session) כדי לשלוח פוש לדפדפן שלכם ולקבל פלט JSON עם הצלחות/כישלונות.הפרדת מפתחות – הקפידו להשתמש במפתחות VAPID שונים בין הסרבר הראשי לבין ה-Worker. כך ניתן לבטל Worker פגום בלי להחליף את המפתחות של הבוט.
Idempotency – ה-Worker מעביר הלאה את הכותרת
X-Idempotency-Key(אם קיימת). מומלץ להפיק UUID לכול Batch של תזכורות כדי להימנע משכפולים.לוגים – שני ה-Workers מדפיסים hash של ה-endpoint בלבד (12 תווים) כדי שלא דולפים URL מלאים.