Blogul meu // Arhivă digitală

Gânduri, proiecte și note tehnice

Afișează postările cu eticheta: #md-blog Afișează tot ×

Inițial, configurația blogului meu a fost planificată ca un proiect pur IPv6 prin WireGuard, deoarece totul rulează pe un server de acasă (apropo, puteți obține adrese IPv6 gratuite de la route64.org). Pentru a îmbunătăți accesibilitatea, am adăugat acum un proxy IPv4 extern (mulțumesc @Larvitz).

Totuși, au apărut imediat probleme SSL: deoarece inițial atât înregistrarea A, cât și AAAA treceau prin proxy, validarea Let's Encrypt pe serverul meu a eșuat.

Soluția: „IPv6-Hack”-ul

Soluția a fost direcționarea explicită a înregistrării AAAA direct către IP-ul WireGuard al serverului meu, în loc să o trec și pe aceasta prin proxy.

  • Domeniu: blog.burningboard.org
  • Înregistrare A (Proxy): 194.28.98.217
  • Înregistrare AAAA (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Prin această înregistrare AAAA directă către IP-ul meu WireGuard, Let’s Encrypt continuă să îmi acceseze serverul direct prin IPv6 (deoarece înregistrarea AAAA este prioritizată implicit) și emite certificatul SSL. Traficul IPv4 este redirecționat către mine de către proxy, fiind criptat.

Configurația finală

Pentru ca procesul de comunicare să funcționeze fără probleme, a trebuit să ajustăm serverele Caddy:

1. Pe serverul meu (NixOS, blog.nix)

Pentru ca IP-urile reale ale vizitatorilor să ajungă corect și să nu fie suprascrise de IP-ul proxy-ului, acesta trebuie marcat ca fiind de încredere:

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

2. Pe proxy-ul extern (Caddy)

Pentru ca proxy-ul să apeleze corect serverul meu prin HTTPS, acesta trebuie să trimită și numele de gazdă (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
    }
}

Blogul este acum accesibil prin IPv4 și IPv6, criptat în siguranță, iar IP-ul meu de acasă rămâne în continuare privat! 🚀

Cel mai important lucru de la început: fișierele Markdown obișnuite rămân baza – sunt pur și simplu un mare fan al acestei soluții simple. Dar sub capotă s-au schimbat multe:

Am făcut câteva modificări la configurare:

📂 Fișiere MD: Structura blogului rămâne simplă, bazată pe Markdown.

🌍 Mai global ca niciodată: Blogul meu suportă acum traduceri în 43 de limbi. Da, inclusiv klingoniana! 🖖 (Qapla'!)

Planul era o traducere în timp real complet automată, bazată pe recunoașterea limbii browserului. Spoiler: a funcționat doar parțial. Se observă: AI-ul este impresionant, dar nu este încă exact „acolo” unde ne-am dori să fie.

Soluția: acum traduc pur și simplu fiecare articol în prealabil în toate limbile stabilite, ceea ce este mult mai bine și pentru motoarele de căutare (SEO). Dacă recunoașterea automată nu funcționează uneori, puteți seta manual limba preferată prin intermediul pictogramei globului pământesc, care va fi apoi salvată simplu printr-un cookie.

Traducerile sunt acum realizate cu Gemini 3 Flash, care oferă rezultate surprinzător de bune. Totuși, trebuie să fii cu ochii pe AI: în prima etapă de procesare în masă, au fost traduse din greșeală și tag-urile, ceea ce, desigur, nu era planificat.

Codul este în continuare disponibil (scrieți-mi pur și simplu un mesaj dacă sunteți interesați) 👍 Rețineți însă că sistemul are nevoie acum de un propriu Gemini API Key 🔑.

Mi-am mutat rapid blogul de la WriteFreely la o soluție proprie: MD-Blog (MD vine, desigur, de la Markdown). Motivul a fost o actualizare eșuată a vechiului sistem – dar, în cele din urmă, a fost impulsul perfect pentru a simplifica totul radical și pentru a obține controlul deplin asupra designului.

Elementul central îl reprezintă fișierele Markdown simple din folderul data/, care sunt convertite în HTML modern în timpul rulării. Rezultatul este extrem de rapid, funcționează fără bază de date și, datorită propriului sistem de design (inclusiv Dark Mode), arată acum exact așa cum mi-am imaginat. Chiar și un buton de partajare Mastodon modern este acum integrat direct.

Dacă sunteți interesați de cod sau de configurarea simplificată, nu ezitați să mă contactați pe Mastodon!