Blogum // Dijital Arşiv

Düşünceler, projeler ve teknik notlar

Başlangıçta blog kurulumum, her şey bir ev sunucusunda (homeserver) çalıştığı için WireGuard üzerinden saf bir IPv6 projesi olarak planlanmıştı (bu arada ücretsiz IPv6 adreslerini route64.org adresinden alabilirsiniz). Erişilebilirliği artırmak için şimdi harici bir IPv4 proxy ekledim (Teşekkürler @Larvitz).

Ancak bu durum hemen SSL sorunlarına yol açtı: Başlangıçta hem A hem de AAAA kayıtları proxy üzerinden geçtiği için sunucumdaki Let's Encrypt doğrulaması başarısız oldu.

Çözüm: „IPv6-Hack“

Çözüm, AAAA kaydını proxy üzerinden yönlendirmek yerine doğrudan sunucumun WireGuard IP'sine yönlendirmekti.

  • Alan Adı: blog.burningboard.org
  • A-Kaydı (Proxy): 194.28.98.217
  • AAAA-Kaydı (Sunucu): 2a11:6c7:f05:a8::2 (WireGuard)

WireGuard IP'me yönlendirilmiş bu doğrudan AAAA kaydı sayesinde Let’s Encrypt, sunucuma doğrudan IPv6 üzerinden ulaşmaya devam ediyor (çünkü AAAA kaydı varsayılan olarak önceliklidir) ve SSL sertifikasını düzenliyor. IPv4 trafiği ise proxy tarafından şifrelenmiş olarak bana iletiliyor.

Final Yapılandırma

İletişimin sorunsuz çalışması için Caddy sunucularını uyarlamamız gerekti:

1. Kendi sunucumda (NixOS, blog.nix)

Gerçek ziyaretçi IP'lerinin doğru şekilde ulaşması ve proxy IP'si ile üzerine yazılmaması için, proxy'nin güvenilir olarak işaretlenmesi gerekir:

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

2. Harici proxy üzerinde (Caddy)

Proxy'nin sunucumla HTTPS üzerinden doğru şekilde iletişim kurabilmesi için ana makine adını (SNI) göndermesi gerekir:

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 artık hem IPv4 hem de IPv6 üzerinden erişilebilir, güvenli bir şekilde şifrelenmiş durumda ve ev IP'm buna rağmen gizli kalıyor! 🚀

Öncelikle en önemli konu: Alışılagelmiş Markdown dosyaları temel olmaya devam ediyor – bu basit çözümün büyük bir hayranıyım. Ancak kaputun altında çok şey değişti:

Kurulum üzerinde epey uğraştım:

📂 MD Dosyaları: Blog yapısı Markdown tabanlı ve basit kalmaya devam ediyor.

🌍 Hiç olmadığı kadar küresel: Blogum artık 43 dilde çeviriyi destekliyor. Evet, Klingonca dahil! 🖖 (Qapla'!)

Planım, tarayıcı dil algılamasına dayalı tam otomatik, gerçek zamanlı bir çeviriydi. Spoiler: Sadece kısmen işe yaradı. Şunu fark ediyorsunuz: Yapay zeka etkileyici ama henüz tam olarak olmasını istediğimiz "noktada" değil.

Çözüm: Artık her yazıyı önceden belirlenen tüm dillere çeviriyorum; bu, arama motorları (SEO) için de çok daha iyi. Otomatik algılama bazen çalışmazsa, dünya simgesi üzerinden tercih ettiğiniz dili manuel olarak seçebilirsiniz; bu seçim bir çerez (cookie) aracılığıyla kolayca kaydedilir.

Çeviriler artık şaşırtıcı derecede iyi sonuçlar veren Gemini 3 Flash ile yapılıyor. Ancak yapay zekayı yakından takip etmek gerekiyor: İlk toplu işlemde etiketler (tags) de yanlışlıkla çevrildi, ki bu tabii ki planlanmamıştı.

Kod hala mevcut (ilgilenirseniz bana mesaj atmanız yeterli) 👍 Ancak sistemin artık kendine ait bir Gemini API anahtarına 🔑 ihtiyaç duyduğunu unutmayın.

Blogumu kısa süre önce WriteFreely'den kendi geliştirdiğim bir sisteme taşıdım: MD-Blog (MD, tahmin edebileceğiniz gibi Markdown anlamına geliyor). Tetikleyici sebep, eski sistemin başarısız olan bir güncellemesiydi; ancak sonuçta bu, her şeyi kökten basitleştirmek ve tasarım üzerinde tam kontrol sahibi olmak için mükemmel bir itici güç oldu.

Sistemin kalbinde, çalışma zamanında (runtime) modern HTML'e dönüştürülen data/ klasöründeki basit Markdown dosyaları yer alıyor. Sonuç ise yıldırım hızında, veritabanı gerektirmiyor ve kendi tasarım sistemim (karanlık mod dahil) sayesinde tam da hayal ettiğim gibi görünüyor. Hatta modern bir Mastodon paylaş butonu da artık doğrudan sisteme entegre edilmiş durumda.

Kodla veya bu yalın kurulumla ilgileniyorsanız, Mastodon üzerinden benimle iletişime geçmekten çekinmeyin!

Aslında #Winboat'un arkasındaki fikir harika, ancak uygulama şu an için hala biraz kararsız görünüyor. Yıl başındaki kurulumdan bu yana sistem çalışıyordu, fakat bugün yazılım tamamen hizmet vermeyi durdurdu.

İmaj aniden yetersiz bellek (RAM) hatası verdi. Sorunu manuel olarak gidermeye çalıştım, ancak bu durum maalesef sistemi tamamen kullanılamaz hale getirdi. Hata ayıklama için daha fazla zaman harcamak yerine, doğrudan Winboat'un teknik temelini oluşturan Dockurr Windows imajına geçiş yaptım.

Fehlermeldung

1. Hazırlık

Podman kullandığım için öncelikle ana sistemimde (host) gerekli dizinleri oluşturdum. Bu sayede konteynerin yeniden oluşturulması gerekirse veri bütünlüğü korunmuş olur:

mkdir -p $HOME/Windows/System
mkdir -p $HOME/Windows/Shared

2. Başlatma Komutu

Önemli Not: -e USERNAME ve -e PASSWORD değişkenlerindeki yer tutucuları kendi kişisel erişim bilgilerinizle değiştirin.

podman run -d \
  --name windows \
  -p 8006:8006 \
  --device=/dev/kvm \
  --cap-add NET_ADMIN \
  -e RAM_SIZE="8G" \
  -e USERNAME="Carsten" \
  -e PASSWORD="1234" \
  -e LANGUAGE="German" \
  -v $HOME/Windows/System:/storage:Z \
  -v $HOME/Windows/Shared:/shared:Z \
  --stop-timeout 120 \
  dockurr/windows

Konteyner aktif hale gelir gelmez, Windows örneğine doğrudan tarayıcınız üzerinden erişebilirsiniz:

http://127.0.0.1:8006

Laufender Container

3. Özet

Yukarıdaki komutu sadece bir kez çalıştırmam yetti. Günlük kullanımda Windows ortamı artık bu kısa komutlarla oldukça rahat bir şekilde yönetilebiliyor:

  • Başlatma: podman start windows
  • Durdurma: podman stop windows (veya doğrudan Windows içinden kapatın)
  • Durum kontrolü: podman ps -a

Faydalı Bağlantılar:

Özellikle #NixOS'u daha yakından tanımak için kendi blogumu kurdum. Şaşırtıcı bir şekilde her şey oldukça sorunsuz ilerledi.

WriteFreely bu iş için gerçekten çok uygun: minimalist, hızlı kuruluyor ve gereksiz yüklerden arınmış. Sadece işe koyulmak ve bu sırada bir şeyler öğrenmek için mükemmel. Yapılandırması ise oldukça anlaşılır. Birkaç seçenek belirlendi, dizin hazırlandı, önüne bir reverse proxy eklendi — ve bitti.

İşte bunun için kullandığım güncel NixOS yapılandırmam:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # ActivityPub anahtar üretimi için düzeltme: Federasyon openssl gerektirir
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Veri dizininin doğru izinlerle otomatik olarak oluşturulması
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

Temelde hepsi bu kadar. NixOS, bu tür hizmetleri temiz bir şekilde yapılandırmayı ve yeniden üretilebilir tutmayı gerçekten kolaylaştırıyor.