Το Ιστολόγιό μου // Ψηφιακό Αρχείο

Σκέψεις, έργα και τεχνικές σημειώσεις

Εμφάνιση αναρτήσεων με ετικέτα: #md-blog Εμφάνιση όλων ×

Αρχικά, η εγκατάσταση του blog μου είχε σχεδιαστεί ως ένα αμιγώς IPv6 project μέσω WireGuard, καθώς το όλο σύστημα φιλοξενείται σε έναν οικιακό διακομιστή (παρεμπιπτόντως, μπορείτε να βρείτε δωρεάν διευθύνσεις IPv6 στο route64.org). Για να αυξήσω την προσβασιμότητα, πρόσθεσα τώρα έναν εξωτερικό IPv4 proxy (ευχαριστώ τον @Larvitz).

Ωστόσο, προέκυψαν αμέσως προβλήματα SSL: Καθώς αρχικά τόσο η εγγραφή A όσο και η AAAA περνούσαν μέσα από τον proxy, η επικύρωση του Let's Encrypt στον διακομιστή μου απέτυχε.

Η λύση: Το „IPv6-Hack“

Η λύση ήταν να κατευθύνω την εγγραφή AAAA ρητά απευθείας στην WireGuard IP του διακομιστή μου, αντί να την περάσω και αυτήν μέσω του proxy.

  • Domain: blog.burningboard.org
  • A-Record (Proxy): 194.28.98.217
  • AAAA-Record (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Μέσω αυτής της απευθείας εγγραφής AAAA στην WireGuard IP μου, το Let’s Encrypt συνεχίζει να προσεγγίζει τον διακομιστή μου απευθείας μέσω IPv6 (καθώς η εγγραφή AAAA έχει προτεραιότητα από προεπιλογή) και εκδίδει το πιστοποιητικό SSL. Η κίνηση IPv4 προωθείται σε εμένα κρυπτογραφημένη από τον proxy.

Η τελική διαμόρφωση

Για να λειτουργήσει ομαλά η επικοινωνία, έπρεπε να προσαρμόσουμε τους διακομιστές Caddy:

1. Στον διακομιστή μου (NixOS, blog.nix)

Για να φτάνουν σωστά οι πραγματικές IP των επισκεπτών και να μην αντικαθίστανται από την IP του proxy, αυτός πρέπει να επισημανθεί ως αξιόπιστος:

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

2. Στον εξωτερικό proxy (Caddy)

Για να επικοινωνεί ο proxy σωστά με τον διακομιστή μου μέσω HTTPS, πρέπει να στέλνει το hostname (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
    }
}

Το blog είναι πλέον προσβάσιμο μέσω IPv4 και IPv6, με ασφαλή κρυπτογράφηση, και η οικιακή μου IP παραμένει ιδιωτική! 🚀

Το πιο σημαντικό πρώτα: Τα συνηθισμένα αρχεία Markdown παραμένουν η βάση – είμαι απλώς μεγάλος θαυμαστής αυτής της απλής λύσης. Αλλά κάτω από το καπό, έχουν αλλάξει πολλά:

Έκανα μερικές αλλαγές στο setup:

📂 MD-Files: Η δομή του blog παραμένει απλή, βασισμένη στο Markdown.

🌍 Πιο παγκόσμιο από ποτέ: Το blog μου υποστηρίζει πλέον μεταφράσεις σε 43 γλώσσες. Ναι, συμπεριλαμβανομένων των Klingon! 🖖 (Qapla'!)

Το σχέδιο ήταν μια πλήρως αυτοματοποιημένη μετάφραση σε πραγματικό χρόνο με βάση την αναγνώριση γλώσσας του προγράμματος περιήγησης. Spoiler: Λειτούργησε μόνο εν μέρει. Διαπιστώνει κανείς ότι: Η τεχνητή νοημοσύνη είναι εντυπωσιακή, αλλά δεν είναι ακόμα ακριβώς "εκεί" που θα θέλαμε.

Η λύση: Τώρα μεταφράζω απλώς κάθε ανάρτηση εκ των προτέρων σε όλες τις καθορισμένες γλώσσες, κάτι που είναι επίσης πολύ καλύτερο για τις μηχανές αναζήτησης (SEO). Εάν η αυτόματη αναγνώριση δεν λειτουργήσει κάποια στιγμή, μπορείτε να ορίσετε χειροκίνητα τη γλώσσα που προτιμάτε μέσω του εικονιδίου της υδρογείου, η οποία στη συνέχεια αποθηκεύεται πολύ απλά μέσω cookie.

Οι μεταφράσεις πραγματοποιούνται πλέον με το Gemini 3 Flash, το οποίο προσφέρει εκπληκτικά καλά αποτελέσματα. Ωστόσο, θα πρέπει να προσέχει κανείς την τεχνητή νοημοσύνη: Στην πρώτη μαζική εκτέλεση, μεταφράστηκαν κατά λάθος και τα tags, κάτι που φυσικά δεν ήταν προγραμματισμένο.

Ο κώδικας παραμένει διαθέσιμος (απλώς στείλτε μου ένα μήνυμα αν ενδιαφέρεστε) 👍 Λάβετε όμως υπόψη ότι το σύστημα απαιτεί πλέον το δικό του Gemini API Key 🔑.

Αποφάσισα χωρίς δισταγμό να μεταφέρω το ιστολόγιό μου από το WriteFreely σε μια δική μου υλοποίηση: το MD-Blog (το MD φυσικά σημαίνει Markdown). Η αφορμή ήταν μια αποτυχημένη ενημέρωση του παλιού συστήματος – τελικά όμως ήταν το τέλειο έναυσμα για να απλοποιήσω τα πάντα ριζικά και να αποκτήσω τον πλήρη έλεγχο του σχεδιασμού.

Ο πυρήνας είναι απλά αρχεία Markdown στον φάκελο data/, τα οποία μετατρέπονται σε σύγχρονο HTML κατά τον χρόνο εκτέλεσης. Το αποτέλεσμα είναι αστραπιαία γρήγορο, λειτουργεί χωρίς βάση δεδομένων και, χάρη στο δικό μου σύστημα σχεδιασμού (συμπεριλαμβανομένου του Dark Mode), φαίνεται τώρα ακριβώς όπως το φαντάστηκα. Ακόμα και ένα σύγχρονο κουμπί κοινοποίησης Mastodon είναι πλέον ενσωματωμένο.

Αν ενδιαφέρεστε για τον κώδικα ή το λιτό στήσιμο, μη διστάσετε να επικοινωνήσετε μαζί μου μέσω του Mastodon!