1 puan yazan GN⁺ 2025-03-03 | 1 yorum | WhatsApp'ta paylaş
  • Firefox'tan LibreWolf'a geçtikten sonra tarayıcı senkronizasyon verilerini doğrudan kendim işletmek istedim; çeşitli depoları ve Docker yapılandırmalarını inceledikten sonra çalışan bir sunucu kurdum
  • Mozilla'nın mevcut syncserver çözümü hepsi bir arada bir yapı sunsa da bakımının durdurulduğuna dair uyarı vardı; bu yüzden Rust tabanlı syncstorage-rs daha gerçekçi bir seçenek oldu
  • Resmî Docker süreci grpcio, protobuf, mozilla-rust-sdk kopyalama adımları nedeniyle karmaşıktı ve takip etmesi zordu; topluluğun hazırladığı syncstorage-rs-docker yapılandırması fiilî dağıtım temeli oldu
  • Nihai kurulumda docker-compose.yaml ile MariaDB 10.6.13 ve firefox_syncserver ayağa kaldırılıyor, Caddy ise firefox_syncserver:8000 adresine reverse proxy yapıyor
  • DB kalıcı verisi, yetersiz depolama alanı ve Docker sürecini deneme-yanılma ile çözmek başlıca engellerdi; Docker veya DB işletimine alışık değilseniz kurulum zorluk seviyesi yüksek

syncserver'dan syncstorage-rs'ye geçme nedeni

  • Firefox'tan LibreWolf'a geçtikten sonra Firefox Sync sunucusunu kendim self-host etmeye başladım
  • İlk bulduğum Mozilla syncserver, self-hosting için hepsi bir arada bir paketti
    • Kimlik doğrulama için tokenserver ve depolama için syncstorage bileşenlerini birlikte içeriyordu
    • Derleme geçmişinde “failed” etiketi vardı
    • Depoda artık bakım yapılmadığı ve Rust tabanlı yeni projeye geçilmesi gerektiği uyarısı yer alıyordu
  • Sonrasında syncstorage-rs tercih edildi
    • Mevcut projenin modern bir Rust tabanlı sürümü
    • Hazır kullanılabilecek bir Docker imajı yoktu
    • Belgelerde Docker ile çalıştırma yöntemi vardı ama yapılandırma akışı karmaşıktı
  • Resmî Docker belgelerinde takıldığım birkaç nokta oldu
    • grpcio ve protobuf sürümlerinin, google-cloud-rust-raw tarafından kullanılan sürümlerle eşleştirilmesi isteniyordu
    • mozilla-rust-sdk içeriğinin en üst kök dizine elle kopyalanması gerekiyordu
    • Depoyu, Dockerfile'ı, Makefile'ı ve CircleCI workflow'unu kontrol etmeme rağmen sonraki adımlar net değildi
  • syncstorage-rs-docker daha basit bir Docker yapılandırması sunuyor
    • Açıklamasında, özgün belgelerde sorun yaşadıktan sonra kendi altyapıları için Docker konteyneri oluşturdukları belirtiliyordu
    • Gerçek sunucu kurulumunu bu yapılandırmayı temel alarak yaptım

Docker Compose ve Caddy ile tamamlanan dağıtım yapısı

  • docker-compose.yaml içine MariaDB ve Firefox Sync sunucusu servisleri eklendi
    • firefox_mariadb, linuxserver/mariadb:10.6.13 imajını kullanıyor
    • DB veri volume'ü /data/ffsync/dbdata:/config olarak ayarlanıyor
    • firefox_syncserver, /root/ffsync içindeki Dockerfile'dan build ediliyor ve 8000:8000 portunu açıyor
    • Başlıca ortam değişkenleri arasında SYNC_URL, SYNC_CAPACITY, SYNC_MASTER_SECRET, METRICS_HASH_SECRET, SYNC_SYNCSTORAGE_DATABASE_URL, SYNC_TOKENSERVER_DATABASE_URL yer alıyor
  • DB parolasında "/|%" gibi özel karakterlerden kaçınmak iyi olabilir
    • Kurulum sırasında sorun çıkarabiliyordu
  • Testler sırasında build süresini kısaltmak için Docker Compose'a BUILDKIT_INLINE_CACHE argümanı eklendi
  • DB başlatma işlemi, depo klonlandıktan sonra Dockerfile ve initdb.sh dosyasının sunucuya kopyalanıp kısmen düzenlenmesiyle yapıldı
    • MariaDB konteynerini çalıştırma: docker-compose up -d firefox_mariadb
    • Başlatma betiğini çalıştırma: chmod +x initdb.sh ./initdb.sh
    • Tüm stack'i çalıştırma: docker-compose up -d
  • Caddy reverse proxy, yeni Sync sunucusuna işaret edecek şekilde yapılandırıldı
    • Örnek yapılandırmada mydomain:443 adresinden reverse_proxy firefox_syncserver:8000 hedefine bağlanıyor
    • DNS girdileri güncellendikten sonra Caddy yeniden başlatıldı ve Sync sunucusu çalıştı

Kurulum sırasında karşılaşılan sorunlar ve harcanan süre

  • En büyük sorun MariaDB kalıcı verisi oldu; konteyner yeniden başlatıldığında gerekirse eski verilerin silinmesi gerekiyordu
  • Docker imajları ve ara dosyalar büyüdükçe sunucudaki depolama alanı yetersiz kaldı
  • Doğru süreci bulmak için Docker yapılandırması üzerinde birkaç kez deneme yapmak gerekti
  • Kendi Firefox Sync sunucusunu kurmak, Docker veya DB yönetimine aşina değilseniz kolayca biten bir iş değil; ancak syncstorage-rs-docker gibi topluluk çalışmaları sayesinde mümkün oldu
  • Tüm kurulum yaklaşık 2 saat sürdü

1 yorum

 
GN⁺ 2025-03-03
Hacker News yorumları
  • Bu kurulum da kimlik doğrulama, e-posta, hesap meta verileri gibi birkaç çevresel hizmet için hâlâ Mozilla altyapısına bağımlı
    https://github.com/dan-r/syncstorage-rs-docker/blob/main/app...
    Yine de iyi bir başlangıç noktası; hesap migrasyonunu göze alabiliyorsanız bu parçaları sonradan ekleyebilirsiniz. Tüm bileşenleri tamamen self-host etmek de mümkün, ama biraz daha fazla uğraş istiyor. En son kurduğum zamana kıyasla dokümantasyon ve geliştirici deneyimi iyileşmiş görünüyor
    https://github.com/mozilla/fxa
    https://mozilla.github.io/ecosystem-platform/tutorials/devel...
    https://mozilla-services.readthedocs.io/en/latest/howtos/run...

    • Eskiden Firefox iOS'ta farklı bir FxA/Sync sunucusu kullanacak şekilde ayar yapılabiliyordu diye hatırlıyorum; bakınca o ayar kaybolmuş gibi görünüyor
      Firefox for iOS 9.0 ve üzeri için ayarlara gidip sürüm numarasına 5 kez dokunmak, “Advance Account Settings” bölümünde content-server URL'sini girmek ve “Use Custom Account Service” seçeneğini açmak gerektiği yazıyordu
      https://mozilla-services.readthedocs.io/en/latest/howtos/run...
    • Bir gün tüm stack, kurulum için bir shell script ile birlikte tek bir Docker container içine girebilir
    • E-postanın neden Mozilla altyapısına bağımlı olduğunu merak ediyorum
    • Aradaki adımı kaldırıp doğrudan Google kullanın gitsin
  • Garuda Linux, FireDragon tarayıcısı için kendi Firefox Sync sunucusunu epey uzun süredir işletiyor
    defaultPref("identity.sync.tokenserver.uri", "https://ffsync.garudalinux.org/token/1.0/sync/1.5";); // --> FIREDRAGON CONFIG
    Ancak Rust sürümü değil, eski senkronizasyon sunucusunu çalıştırıyor gibi görünüyor
    [1] https://firedragon.garudalinux.org/
    [2] https://gitlab.com/garuda-linux/infra-nix/-/blob/main/docker...

  • Kendi self-hosting deneyimimi de burada derledim
    https://kyzer.me.uk/syncserver/
    Mümkün ama gerçekten sıkıcı ve zahmetli bir iş. Önceki sürüm terk edilmişti ve Python 2 ile yazıldığı için tamamen eskimişti, ama çok daha iyiydi
    Docker da Python da gerekmiyor, fakat şu anda MySQL gerekiyor. Bir gönüllü, eski sürümde olduğu gibi varsayılan olarak SQLite desteği sunması için çalışıyor; ancak ana katkı verenler, self-hosting'i kolaylaştırmaktan çok, şirket gibi davranıp metrik toplamayı ve yeni metrik framework'leri devreye almayı meşrulaştıran yazılar yazmaya daha yakın görünüyor

  • https://github.com/canvas-ai/canvas-browser-extensions projesine de bakmak ya da takip etmek iyi olabilir
    Chrome/Firefox tarayıcı sekmelerini, LMDB ve Roaring bitmap indeksleriyle çalışan self-hosted sanal bir dizin ağacına senkronize etmeye yarayan bir araç. Geriye dönüp bakınca en baştan rxdb veya pouchdb kullanıp yalnızca bitmap'i korumalıydım; ama sonunda o yöne gideceğim
    Yaptığınız işe göre universe://travel/2024/03/barcelona gibi yeni bir bağlam yolu oluşturup, ayara bağlı olarak mevcut sekmeyi kaydedip kapatıyor; ardından Airbnb araması gibi yeni iş sekmelerini o bağlama ekleyen bir akış. Eşiniz de aynı bağlamı açıp birlikte çalışabilir; otomatik senkronizasyon açıksa birbirinizin sekmelerini kapatır gibi de işleyebilir
    Sunucu bileşeni şu anda yeniden yazılıyor; amatörlüğümün ortaya çıktığı yer de burası. 2 kullanıcılı bir temelde, tüm API'yi, backend'i ve modülleri aynı anda yeniden yazmaya başlayıp mevcut işlevleri geri döndürülemez biçimde bozmak gibi aptalca bir şey bile mümkün. Günümüz araçlarıyla, örneğin Cursor ve Claude 3.7 ile, fikirlerin en büyük sınırı nihayetinde zaman oluyor

  • Kimlik doğrulamayı da kendim host ederek bir süre böyle kullandım; ama sonunda Mozilla'nın verilerimi emanet edebileceğim çok az şirketten biri olduğunu düşünmeye başladım. Bu güven yanlış da olabilir. Senkronizasyon sunucusunu kurmak nispeten basitken kimlik doğrulama sunucusu çok daha karmaşık; herkese açık bir hosting hizmeti kullanmakla kıyaslayınca buna pek değmediğini düşünüyorum

    • Mozilla, “terms of use” karmaşasıyla kalan sempatisinin de neredeyse tamamını yakıp bitirdi. Yine de gizliliğe saygılı bir fork olarak LibreWolf var
    • Mozilla kendini bir reklam şirketi olarak yeniden markalıyorsa ve parasının çoğunu, muhtemelen yönünü de Google'dan alıyorsa, o güveni en azından sorgulamak gerekir
    • Bu değerlendirme çok hızlı biçimde eskimiş bir söz hâline geldi
  • Teşekkürler. LibreWolf’a geçmemi engelleyen tek şey buydu.
    Şu anda desteklenen veritabanı motorları yalnızca MySQL ve Spanner gibi görünüyor, ancak SQLite ve Postgres desteği üzerinde de çalışılıyor[1]. Hızla birleştirilirse, tüm sync depolamasını tek bir SQLite dosyası olarak yedeklemek çok daha kolay olacak gibi. Ancak çok kullanıcılı bir instance söz konusuysa, paralel güncelleme desteği daha iyi olan Postgres’te tutmak daha mantıklı olabilir.
    Denedikten sonra ekleme: Firefox’un (LibreWolf) self-hosted URL kullanmasını tam olarak nasıl zorlayabiliriz? Bir about:config ayarı var mı?
    1: https://github.com/mozilla-services/syncstorage-rs/issues/49...

  • Firefox Sync uçtan uca şifreliyse, gizlilik açısından avantajının ne olduğunu merak ediyorum.
    https://support.mozilla.org/en-US/kb/sync

    • Bildiğim kadarıyla oturum açma sayfası ve JavaScript kodu hâlâ internet üzerinden sunuluyor ve şifreleme anahtarı yalnızca paroladan türetiliyor. Tüm tarayıcı verileri gibi hassas bir şey için iyi bir tasarım değil.
  • Firefox Sync’e benzer olarak Floccus var. Yalnızca yer imleri ve sekme senkronizasyonu gerekiyorsa kurulumu basit görünüyor.
    https://floccus.org/

  • LibreWolf ve Waterfox’un akışı değiştirip Mozilla Sync Server kullandığını netleştirseler ve aşağıdaki gibi isteğe bağlı hâle getirseler iyi olurdu:
    Senkronizasyon için aşağıdaki seçeneklerden birini seçin:
    [x] Custom Sync Server: ___________
    [ ] Mozilla Sync

    • LibreWolf’ta bu isteğe bağlı ve “Firefox Sync” adlı bir onay kutusuna basıp bunun Firefox Sync olmayan başka bir senkronizasyon olduğunu düşünüyorsanız, hiçbir UI değişikliğinin yardımcı olması zor.
    • Sync aslında korkunç derecede aşırı tasarlanmış bir blob deposundan ibaret. 1.5 çıktığında alternatif Accounts+Sync sunucusu uygulamıştım: https://gitlab.com/drdaeman/firesync/
      Uzun süredir bakımsız ve kod berbat bir kavram kanıtından ibaret, ama yine de bu konuda az da olsa dayanaklı bir değerlendirme yapabileceğim anlamına geliyor.
      Teknik kullanıcılar için Firefox fork’larının Sync yerine S3 veya WebDAV gibi daha standart bir şeye geçmesinin en iyisi olduğunu düşünüyorum. Yanlış hatırlamıyorsam Sync’te bu protokollerin aynı şekilde, hatta daha iyi yapamayacağı hiçbir özellik yok. Çünkü onlar gerçekten bir ölçüde birlikte çalışabilir standartlar.
      Mozilla da bunu yapsa iyi olurdu, ama kurum içi geliştirme eğilimi fazla güçlü göründüğünden bunu beklemek zor. Bu eğilim sayesinde Rust’ın ortaya çıkmış olmasına çok seviniyorum, ama Sync en başta yapılmaması gereken çöpe yakın bir şey.
    • Kayıtlara geçmesi için söyleyeyim: Firefox Sync oldukça uzun süre tam olarak bu şekildeydi.
      https://blog.mozilla.org/services/2011/03/22/get-syncing-wit...
      İlk sorulardan biri Custom Sync Server kullanıp kullanmayacağınızdı ve bu “Custom Sync Server” WebDAV sunucusu kadar basit bir şey bile olabiliyordu. Herkese açık bir HTTP sunucunuz varsa, büyük ihtimalle zaten destekliyordu ya da çok az bağımlılık eklemek yeterliydi. Ayrıca oturum açma anahtarından ayrı olarak uçtan uca şifreleme anahtarı da soruluyordu.
  • Self-hosting’i başarmış olmanız tebrik edilecek bir şey. Yine de çözüm gereğinden fazla karmaşık görünüyor. Çok az miktarda veriyi senkronize etmek için bir veritabanı sunucusu ve Docker kurmak gerekmemeli. İdeal olarak SQLite kullanan, tek başına çalıştırılabilir bir sync sunucusu uygulaması olsa iyi olurdu.

    • Teoride yalnızca gerekli endpoint’leri uygulayan basit bir sync sunucusu yapılabilir. Bu tür rehberler resmi Mozilla bakımındaki sync sunucusunu çalıştırıyor; bu da doğal olarak bir homelab için asgari uygulama değil, milyonlarca kullanıcıya hizmet verme standardına göre tasarlanmış durumda.
      Birileri https://github.com/mozilla-services/syncstorage-rs reposunu fork’layıp ek bileşenleri ayıklayarak, yardımcı veritabanları ve Google Cloud tabanlı mimari olmadan yeniden uygulayabilir. Ancak birçok işte olduğu gibi, önce yeterli ilgiye ve boş zamana sahip insanları bir araya getirip geliştirmek gerekir.
    • Doğru, ama yine de self-hosting’in mümkün olması bile anlamlı. Birçok tarayıcıda bu bile yok.
    • Açık bir merge request var.
      https://github.com/mozilla-services/syncstorage-rs/issues/49...