میرا بلاگ // ڈیجیٹل آرکائیو

خیالات، منصوبے اور تکنیکی نوٹس

اس ٹیگ کے ساتھ اندراجات دکھائیں: #md-blog سب دکھائیں ×

اصل میں میرا بلاگ سیٹ اپ وائر گارڈ (WireGuard) کے ذریعے خالص IPv6 پروجیکٹ کے طور پر ڈیزائن کیا گیا تھا، کیونکہ یہ سب ایک ہوم سرور پر چل رہا ہے (ویسے، آپ route64.org سے مفت IPv6 ایڈریس حاصل کر سکتے ہیں)۔ رسائی کو بہتر بنانے کے لیے، میں نے اب ایک بیرونی IPv4 پراکسی شامل کی ہے (شکریہ @Larvitz

تاہم، اس دوران فوری طور پر SSL کے مسائل پیدا ہوئے: چونکہ اصل میں A اور AAAA دونوں ریکارڈز پراکسی کے ذریعے چل رہے تھے، اس لیے میرے سرور پر Let's Encrypt کی تصدیق (validation) ناکام ہو گئی۔

حل: "IPv6 ہیک"

اس کا حل یہ تھا کہ AAAA ریکارڈ کو پراکسی کے ذریعے گزارنے کے بجائے براہ راست اپنے سرور کے وائر گارڈ آئی پی (WireGuard IP) پر سیٹ کیا جائے۔

  • ڈومین: blog.burningboard.org
  • A-Record (پراکسی): 194.28.98.217
  • AAAA-Record (سرور): 2a11:6c7:f05:a8::2 (وائر گارڈ)

میری وائر گارڈ آئی پی پر اس براہ راست AAAA ریکارڈ کے ذریعے، Let’s Encrypt اب بھی IPv6 کے ذریعے براہ راست میرے سرور تک پہنچ جاتا ہے (کیونکہ AAAA ریکارڈ کو ڈیفالٹ کے طور پر ترجیح دی جاتی ہے) اور SSL سرٹیفکیٹ جاری کر دیتا ہے۔ IPv4 ٹریفک پراکسی کے ذریعے انکرپٹ ہو کر مجھ تک پہنچتی ہے۔

حتمی کنفیگریشن

اس بات کو یقینی بنانے کے لیے کہ مواصلت بغیر کسی رکاوٹ کے ہو، ہمیں کیڈی (Caddy) سرورز میں ترمیم کرنی پڑی:

1. میرے سرور پر (NixOS, blog.nix)

تاکہ آنے والے صارفین کے اصل آئی پی ایڈریس درست طریقے سے موصول ہوں اور پراکسی کے آئی پی سے تبدیل نہ ہوں، اسے قابلِ اعتماد (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 دونوں پر دستیاب ہے، محفوظ طریقے سے انکرپٹڈ ہے اور میرا ہوم آئی پی اب بھی پرائیویٹ ہے! 🚀

سب سے اہم بات: معمول کی Markdown فائلیں ہی بنیاد رہیں گی – میں اس سادہ حل کا بہت بڑا مداح ہوں۔ لیکن پسِ پردہ بہت کچھ بدل گیا ہے:

میں نے سیٹ اپ میں کچھ تبدیلیاں کی ہیں:

📂 MD-Files: بلاگ کا ڈھانچہ سادہ طور پر مارک ڈاؤن کی بنیاد پر ہی رہے گا۔

🌍 پہلے سے کہیں زیادہ عالمی: میرا بلاگ اب 43 زبانوں میں ترجمے کو سپورٹ کرتا ہے۔ جی ہاں، کلنگون (Klingon) سمیت! 🖖 (Qapla'!)

منصوبہ براؤزر کی زبان کی شناخت کی بنیاد پر مکمل طور پر خودکار ریئل ٹائم ترجمہ کرنے کا تھا۔ اسپوائلر: یہ صرف جزوی طور پر کام کر سکا۔ یہ بات واضح ہے: اے آئی متاثر کن ہے، لیکن ابھی وہاں تک نہیں پہنچی جہاں ہم اسے دیکھنا چاہتے ہیں۔

حل: اب میں ہر پوسٹ کا پہلے سے ہی تمام مقررہ زبانوں میں ترجمہ کر دیتا ہوں، جو سرچ انجن (SEO) کے لیے بھی بہت بہتر ہے۔ اگر خودکار شناخت کام نہ کرے، تو آپ گلوب آئیکن کے ذریعے اپنی پسندیدہ زبان دستی طور پر منتخب کر سکتے ہیں، جو کوکی (Cookie) کے ذریعے آسانی سے محفوظ ہو جائے گی۔

اب ترجمے Gemini 3 Flash کے ذریعے کیے جا رہے ہیں، جو حیرت انگیز طور پر اچھے نتائج فراہم کر رہا ہے۔ تاہم، اے آئی کی نگرانی کرنا ضروری ہے: پہلے بلک راؤنڈ میں غلطی سے ٹیگز کا بھی ترجمہ کر دیا گیا تھا، جو ظاہر ہے کہ منصوبہ بندی کا حصہ نہیں تھا۔

کوڈ اب بھی دستیاب ہے (اگر آپ دلچسپی رکھتے ہیں تو مجھے میسج کریں) 👍 لیکن یاد رکھیں کہ اب سسٹم کو اپنی Gemini API Key 🔑 کی ضرورت ہوگی۔

میں نے اچانک اپنے بلاگ کو WriteFreely سے اپنی تیار کردہ ایپلیکیشن پر منتقل کر دیا ہے: MD-Blog (ظاہر ہے کہ MD کا مطلب Markdown ہے)۔ اس کی وجہ پرانے سسٹم کی ایک ناکام اپ ڈیٹ تھی – لیکن آخر کار یہ سب کچھ بنیادی طور پر سادہ بنانے اور ڈیزائن پر مکمل کنٹرول حاصل کرنے کے لیے ایک بہترین موقع ثابت ہوا۔

اس کا مرکزی حصہ data/ فولڈر میں موجود سادہ مارک ڈاؤن فائلیں ہیں، جو رن ٹائم (runtime) کے دوران جدید HTML میں تبدیل ہو جاتی ہیں۔ اس کا نتیجہ بجلی کی طرح تیز ہے، یہ کسی ڈیٹا بیس کے بغیر کام کرتا ہے اور اپنے ڈیزائن سسٹم (بشمول ڈارک موڈ) کی بدولت اب بالکل ویسا ہی نظر آتا ہے جیسا میں نے سوچا تھا۔ یہاں تک کہ اب ایک جدید Mastodon-Share-Button بھی اس میں شامل ہے۔

اگر آپ کوڈ یا اس سادہ سیٹ اپ میں دلچسپی رکھتے ہیں، تو بلا جھجھک Mastodon پر مجھ سے رابطہ کریں!