הבלוג שלי // ארכיון דיגיטלי

מחשבות, פרויקטים והערות טכניות

הצג פוסטים עם תגית: #md-blog הצג הכל ×

במקור, הגדרת הבלוג שלי תוכננה כפרויקט IPv6 בלבד דרך WireGuard, מכיוון שהכל פועל על שרת ביתי (אגב, ניתן לקבל כתובות IPv6 בחינם ב-route64.org). כדי לשפר את הזמינות, הוספתי כעת פרוקסי IPv4 חיצוני (תודה ל-@Larvitz).

עם זאת, מיד צצו בעיות SSL: מכיוון שבמקור גם רשומת ה-A וגם רשומת ה-AAAA עברו דרך הפרוקסי, אימות ה-Let's Encrypt בשרת שלי נכשל.

הפתרון: ה-„IPv6-Hack“

הפתרון היה לכוון את רשומת ה-AAAA באופן מפורש ישירות לכתובת ה-WireGuard של השרת שלי, במקום להעביר אותה גם כן דרך הפרוקסי.

  • דומיין: blog.burningboard.org
  • רשומת A (פרוקסי): 194.28.98.217
  • רשומת AAAA (שרת): 2a11:6c7:f05:a8::2 (WireGuard)

באמצעות רשומת ה-AAAA הישירה הזו לכתובת ה-WireGuard שלי, Let’s Encrypt ממשיך להגיע לשרת שלי ישירות דרך IPv6 (מכיוון שרשומת AAAA מקבלת עדיפות כברירת מחדל) ומנפיק את תעודת ה-SSL. תעבורת ה-IPv4 מועברת אליי מהפרוקסי כשהיא מוצפנת.

הקונפיגורציה הסופית

כדי שהתקשורת תעבוד בצורה חלקה, היינו צריכים להתאים את שרתי ה-Caddy:

1. בשרת שלי (NixOS, blog.nix)

כדי שכתובות ה-IP האמיתיות של המבקרים יגיעו בצורה נכונה ולא יידרסו על ידי כתובת ה-IP של הפרוקסי, יש לסמן אותו כנאמן (trusted):

services.caddy.globalConfig = ''
  servers {
      trusted_proxies static 2a06:9801:1c:1000::10
  }
'';

2. בפרוקסי החיצוני (Caddy)

כדי שהפרוקסי יפנה לשרת שלי בצורה נכונה דרך HTTPS, עליו לשלוח את שם המארח (SNI):

reverse_proxy [https://[2a11:6c7:f05:a8::2]:443](https://[2a11:6c7:f05:a8::2]:443) {
    header_up Host {host}
    transport http {
        tls_server_name blog.burningboard.org
    }
}

הבלוג זמין כעת דרך IPv4 ו-IPv6, מוצפן בצורה מאובטחת, וכתובת ה-IP הביתית שלי נשארת פרטית! 🚀

הדבר החשוב ביותר קודם כל: קבצי ה-Markdown המוכרים נשארים הבסיס – אני פשוט מעריץ גדול של הפתרון הפשוט הזה. אבל מתחת למכסה המנוע, הרבה דברים השתנו:

שיניתי כמה דברים בהגדרות (Setup):

📂 קבצי MD: מבנה הבלוג נשאר פשוט ומבוסס על Markdown.

🌍 גלובלי יותר מאי פעם: הבלוג שלי תומך כעת בתרגומים ל-43 שפות. כן, כולל קלינגונית! 🖖 (!Qapla)

התכנון היה תרגום אוטומטי לחלוטין בזמן אמת המבוסס על זיהוי שפת הדפדפן. ספוילר: זה עבד רק באופן חלקי. אפשר לראות שה-AI מרשימה, אבל היא עדיין לא לגמרי "שם", איפה שהיינו רוצים שהיא תהיה.

הפתרון: אני פשוט מתרגם כעת כל פוסט מראש לכל השפות שהוגדרו, מה שגם הרבה יותר טוב לקידום אתרים (SEO). אם הזיהוי האוטומטי לא עובד, תוכלו להגדיר את השפה המועדפת עליכם ידנית דרך אייקון הגלובוס, והיא תישמר בפשטות באמצעות Cookie.

התרגומים מבוצעים כעת באמצעות Gemini 3 Flash, שמספק תוצאות טובות להפליא. עם זאת, כדאי לפקוח עין על ה-AI: בסבב התרגום המסיבי הראשון, גם התגיות תורגמו בטעות, מה שכמובן לא היה מתוכנן.

הקוד עדיין זמין (פשוט שלחו לי הודעה אם אתם מעוניינים) 👍 שימו לב שהמערכת דורשת כעת מפתח API של Gemini משלה 🔑.

החלטתי להעביר את הבלוג שלי מ-WriteFreely לפיתוח עצמי: MD-Blog (ה-MD מייצג כמובן את Markdown). הטריגר היה עדכון שנכשל במערכת הישנה – אבל בסופו של דבר זו הייתה הדחיפה המושלמת לפשט הכל באופן רדיקלי ולהשיג שליטה מלאה על העיצוב.

לב המערכת הוא קבצי Markdown פשוטים בתיקיית data/, שמתורגמים בזמן ריצה ל-HTML מודרני. התוצאה מהירה במיוחד, פועלת ללא מסד נתונים, ובזכות מערכת עיצוב עצמאית (כולל מצב כהה) היא נראית עכשיו בדיוק כפי שדמיינתי. אפילו כפתור שיתוף למסטודון מודרני כבר כלול בפנים.

אם אתם מעוניינים בקוד או בהגדרה (Setup) הרזה, אתם מוזמנים ליצור איתי קשר דרך מסטודון!