1 पॉइंट द्वारा GN⁺ 2025-03-03 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Firefox से LibreWolf पर जाने के बाद ब्राउज़र sync डेटा को खुद होस्ट करने की कोशिश की गई, और कई repositories व Docker configurations की जाँच के बाद एक काम करने वाला सर्वर बनाया गया
  • Mozilla का पुराना syncserver all-in-one configuration देता है, लेकिन maintenance बंद होने की चेतावनी होने के कारण Rust-आधारित syncstorage-rs अधिक व्यावहारिक विकल्प बना
  • आधिकारिक Docker प्रक्रिया में grpcio, protobuf, mozilla-rust-sdk कॉपी करने की प्रक्रिया जटिल थी, इसलिए उसे फॉलो करना मुश्किल था; कम्युनिटी का syncstorage-rs-docker setup वास्तविक deployment का आधार बना
  • अंतिम configuration में docker-compose.yaml के जरिए MariaDB 10.6.13 और firefox_syncserver चलाए गए, और Caddy ने firefox_syncserver:8000 पर reverse proxy किया
  • DB persistent data, storage की कमी, और Docker प्रक्रिया पर कई प्रयोग मुख्य बाधाएँ रहीं; Docker या DB operations का अनुभव न हो तो setup की कठिनाई काफी अधिक है

syncserver से syncstorage-rs पर जाने की वजह

  • Firefox से LibreWolf में जाने के बाद, Firefox Sync सर्वर को खुद self-host करने का काम शुरू किया गया
  • सबसे पहले मिला Mozilla syncserver, जो self-hosting के लिए all-in-one package था
    • इसमें authentication के लिए tokenserver और storage के लिए syncstorage साथ में शामिल थे
    • build history में “failed” टैग था
    • repository में चेतावनी दी गई थी कि इसका अब maintenance नहीं हो रहा है और Rust-आधारित नए project पर जाना चाहिए
  • इसके बाद syncstorage-rs चुना गया
    • यह पुराने project का आधुनिक Rust-आधारित version है
    • इस्तेमाल के लिए तैयार Docker image उपलब्ध नहीं थी
    • documentation में Docker चलाने का तरीका था, लेकिन configuration flow जटिल था
  • आधिकारिक Docker documentation में कई जगह अड़चनें आईं
    • grpcio और protobuf versions को google-cloud-rust-raw द्वारा इस्तेमाल किए जाने वाले versions से मिलाने का निर्देश था
    • mozilla-rust-sdk की contents को manually top-level root directory में कॉपी करना पड़ता था
    • repository, Dockerfile, Makefile, और CircleCI workflow देखने के बाद भी अगला चरण साफ़ नहीं था
  • syncstorage-rs-docker ने अधिक सरल Docker configuration दी
    • इसमें बताया गया था कि मूल documentation में समस्या आने के बाद अपनी infrastructure के लिए Docker container बनाया गया
    • इसी configuration के आधार पर असली server setup आगे बढ़ाया गया

Docker Compose और Caddy से पूरा किया गया deployment setup

  • docker-compose.yaml में MariaDB और Firefox Sync सर्वर services जोड़ी गईं
    • firefox_mariadb ने linuxserver/mariadb:10.6.13 image का उपयोग किया
    • DB data volume /data/ffsync/dbdata:/config पर सेट किया गया
    • firefox_syncserver ने /root/ffsync के Dockerfile को build किया और 8000:8000 port expose किया
    • मुख्य environment variables में SYNC_URL, SYNC_CAPACITY, SYNC_MASTER_SECRET, METRICS_HASH_SECRET, SYNC_SYNCSTORAGE_DATABASE_URL, SYNC_TOKENSERVER_DATABASE_URL शामिल थे
  • DB password में "/|%" जैसे special characters से बचना बेहतर है
    • setup के दौरान इससे समस्या आ सकती थी
  • testing के दौरान build time घटाने के लिए BUILDKIT_INLINE_CACHE argument को Docker Compose में जोड़ा गया
  • DB initialization repository clone करने के बाद Dockerfile और initdb.sh को server पर कॉपी करके, कुछ बदलावों के साथ किया गया
    • MariaDB container चलाना: docker-compose up -d firefox_mariadb
    • initialization script चलाना: chmod +x initdb.sh ./initdb.sh
    • पूरा stack चलाना: docker-compose up -d
  • Caddy reverse proxy को नए Sync सर्वर की ओर point करने के लिए configure किया गया
    • configuration example में mydomain:443 से reverse_proxy firefox_syncserver:8000 पर connection किया गया
    • DNS entry अपडेट करने के बाद Caddy को restart किया गया और Sync सर्वर काम करने लगा

setup के दौरान आई बाधाएँ और लगा समय

  • सबसे बड़ी समस्या MariaDB persistent data थी, और container restart के समय ज़रूरत पड़ने पर पुराने data को हटाना पड़ता था
  • Docker images और intermediate files बड़े होते गए, जिससे server storage कम पड़ गई
  • सही प्रक्रिया खोजने तक Docker configuration पर कई बार प्रयोग करना पड़ा
  • अपना Firefox Sync सर्वर चलाना Docker या DB management का अनुभव न होने पर आसान काम नहीं है, लेकिन syncstorage-rs-docker जैसे community प्रयासों की वजह से setup संभव हुआ
  • पूरे setup में लगभग 2 घंटे लगे

1 टिप्पणियां

 
GN⁺ 2025-03-03
Hacker News की राय
  • यह setup अभी भी authentication, email, account metadata जैसी कुछ आसपास की services के लिए Mozilla infrastructure पर निर्भर करता है
    https://github.com/dan-r/syncstorage-rs-docker/blob/main/app...
    फिर भी यह एक अच्छा शुरुआती बिंदु है, और अगर आप account migration का जोखिम उठा सकते हैं, तो बाद में उन हिस्सों को जोड़ सकते हैं। सभी components को पूरी तरह self-host करना भी संभव है, लेकिन उसमें थोड़ा ज़्यादा काम लगता है। पिछली बार जब मैंने इसे setup किया था, उसकी तुलना में documentation और developer experience बेहतर लगते हैं
    https://github.com/mozilla/fxa
    https://mozilla.github.io/ecosystem-platform/tutorials/devel...
    https://mozilla-services.readthedocs.io/en/latest/howtos/run...

    • पहले लगता था कि Firefox iOS में कोई अलग FxA/Sync server इस्तेमाल करने के लिए setting की जा सकती थी, लेकिन ढूंढने पर लगता है वह setting गायब हो गई है
      Firefox for iOS 9.0 या उससे ऊपर में instructions थे कि settings में जाकर version number को 5 बार tap करें, “Advance Account Settings” में content-server URL डालें, और “Use Custom Account Service” चालू करें
      https://mozilla-services.readthedocs.io/en/latest/howtos/run...
    • शायद कभी पूरा stack setup के लिए shell script के साथ एक ही Docker container में आ सके
    • समझ नहीं आता कि email Mozilla infrastructure पर क्यों निर्भर करता है
    • बीच का step हटाकर सीधे Google ही इस्तेमाल कर लो
  • Garuda Linux काफी समय से FireDragon browser के लिए अपना Firefox Sync server चला रहा है
    defaultPref("identity.sync.tokenserver.uri", "https://ffsync.garudalinux.org/token/1.0/sync/1.5";); // --> FIREDRAGON CONFIG
    हालांकि लगता है वे Rust version के बजाय पुराना sync server चला रहे हैं
    [1] https://firedragon.garudalinux.org/
    [2] https://gitlab.com/garuda-linux/infra-nix/-/blob/main/docker...

  • मेरा self-hosting अनुभव भी यहां लिख रखा है
    https://kyzer.me.uk/syncserver/
    संभव तो है, लेकिन सच में बहुत उबाऊ और मेहनत वाला काम है। पुराना version छोड़ दिया गया था और Python 2 में लिखा होने के कारण पूरी तरह outdated था, लेकिन वह कहीं बेहतर था
    Docker या Python की ज़रूरत नहीं है, लेकिन फिलहाल MySQL चाहिए। एक volunteer इसे पुराने version की तरह default रूप से SQLite support देने पर काम कर रहा है, लेकिन main contributors self-hosting को आसान बनाने के बजाय किसी कंपनी की नकल करते हुए metrics collection और नए metrics framework लाने को जायज़ ठहराने वाले लेख लिखने की तरफ ज़्यादा लगते हैं

  • https://github.com/canvas-ai/canvas-browser-extensions भी देखना या follow करना अच्छा रहेगा
    यह Chrome/Firefox browser tabs को LMDB और Roaring bitmap index से चलने वाले self-hosted virtual directory tree में sync करने की कोशिश करने वाला tool है। पीछे मुड़कर देखें तो शुरुआत से ही rxdb या pouchdb इस्तेमाल करना चाहिए था और सिर्फ bitmap maintain करना चाहिए था, लेकिन आखिरकार वहीं जाना है
    आप जिस काम पर लगे हैं उसके हिसाब से universe://travel/2024/03/barcelona जैसा नया context path बनाते हैं, settings के हिसाब से current tabs को save करके close करते हैं, और फिर Airbnb search जैसे नए work tabs उस context में जोड़ते हैं। आपका spouse भी वही context खोलकर साथ काम कर सकता है, और अगर auto-sync चालू हो तो यह एक-दूसरे के tabs close करने जैसे तरीके से भी काम कर सकता है
    server component अभी फिर से लिखा जा रहा है, और यहीं मेरा amateurism दिखता है। दो users वाले आधार पर पूरी API, backend और modules को एक साथ rewrite करना शुरू करके existing functionality को irrecoverably तोड़ देने जैसी बेवकूफी भी संभव है। आजकल के tools, जैसे Cursor और Claude 3.7, हों तो idea की सबसे बड़ी constraint आखिर समय ही है

  • authentication तक खुद host करते हुए कुछ समय तक ऐसे इस्तेमाल किया, लेकिन आखिरकार मुझे लगा कि Mozilla उन बेहद कम कंपनियों में से है जिन पर मैं अपना data भरोसे से छोड़ सकता हूं। हो सकता है वह भरोसा गलत हो। sync server setup अपेक्षाकृत सरल है, जबकि authentication server कहीं ज़्यादा जटिल है, इसलिए public hosted service इस्तेमाल करने की तुलना में मुझे यह उतना worth नहीं लगा

    • Mozilla ने “terms of use” वाले हंगामे से बची-खुची goodwill भी लगभग जला दी। फिर भी privacy का सम्मान करने वाला fork LibreWolf मौजूद है
    • अगर Mozilla खुद को advertising company के रूप में rebrand करता है, और उसकी funding का अधिकांश हिस्सा—और शायद दिशा भी—Google से आती है, तो उस भरोसे पर कम से कम सवाल तो करना चाहिए
    • यह आकलन बहुत जल्दी पुरानी बात बन गया
  • धन्यवाद। यही वह इकलौता हिस्सा था जो मुझे LibreWolf पर जाने से रोक रहा था
    अभी समर्थित database engine सिर्फ MySQL और Spanner लगते हैं, लेकिन SQLite और Postgres support पर भी काम चल रहा है[1]। अगर यह जल्दी merge हो जाए, तो पूरे sync store को एक ही SQLite file के रूप में backup करना काफी आसान हो जाएगा। हालांकि multi-user instance हो तो parallel updates support बेहतर होने की वजह से Postgres में store करना शायद बेहतर होगा
    खुद आज़माने के बाद जोड़ा: Firefox(LibreWolf) को self-hosting URL इस्तेमाल करने के लिए ठीक-ठीक कैसे मजबूर किया जा सकता है? क्या कोई about:config setting है?
    1: https://github.com/mozilla-services/syncstorage-rs/issues/49...

    • docs(https://github.com/mozilla-services/syncstorage-rs?tab=readm...) देखने पर लगता है कि सिर्फ about:config variable बदलना काफी है
      Firefox में about:config पर जाकर identity.sync.tokenserver.uri को http://localhost:5000/1.0/sync/1.5 में बदलना है। बेशक URL को अपने environment के हिसाब से बदलना होगा
    • LibreWolf भी Mozilla sync server इस्तेमाल कर सकता है। sync इस्तेमाल करने के लिए self-hosting जरूरी नहीं है
  • अगर Firefox Sync end-to-end encrypted है, तो privacy के लिहाज़ से इसका फायदा क्या है, यह जानना चाहूंगा
    https://support.mozilla.org/en-US/kb/sync

    • जहां तक मुझे पता है, login page और JavaScript code अब भी internet के जरिए serve होते हैं, और encryption key सिर्फ password से derive होती है। पूरे browser data जैसी sensitive चीज़ के लिए यह अच्छा design नहीं है
  • Firefox Sync जैसा ही एक विकल्प Floccus है। अगर सिर्फ bookmarks और tabs sync करने हों, तो इसकी setup आसान लगती है
    https://floccus.org/

  • अच्छा होगा अगर LibreWolf और Waterfox यह साफ करें कि उन्होंने flow बदलकर Mozilla Sync Server इस्तेमाल करना शुरू किया है, और इसे नीचे की तरह optional बना दें
    sync करने के लिए नीचे दिए options में से एक चुनें:
    [x] Custom Sync Server: ___________
    [ ] Mozilla Sync

    • LibreWolf में यह optional है, और अगर कोई “Firefox Sync” checkbox दबाकर यह सोचता है कि वह Firefox Sync नहीं बल्कि कोई और sync है, तो किसी भी UI change से मदद करना मुश्किल है
    • Sync असल में बेहद over-engineered blob store भर है। जब 1.5 आया था, तब मैंने एक alternative Accounts+Sync server implement किया था: https://gitlab.com/drdaeman/firesync/
      वह लंबे समय से छोड़ा हुआ है और code बस एक खराब proof of concept है, लेकिन इसका मतलब है कि मैं इस विषय पर कुछ हद तक आधारभूत राय दे सकता हूं
      technical users के लिए मुझे लगता है कि Firefox forks का Sync की जगह S3 या WebDAV जैसी ज्यादा standard चीज़ों पर जाना सबसे अच्छा होगा। अगर मेरी याद सही है, तो Sync में ऐसी कोई capability नहीं है जिसे वे protocols उतने ही अच्छे, बल्कि बेहतर तरीके से handle न कर सकें। क्योंकि वे असल में कुछ हद तक interoperable standards हैं
      अच्छा होता अगर Mozilla भी ऐसा करता, लेकिन लगता है कि उनका in-house development preference बहुत मजबूत है, इसलिए उम्मीद करना मुश्किल है। उस प्रवृत्ति की वजह से Rust आया, यह मुझे बहुत खुशी देता है, लेकिन Sync लगभग ऐसी बेकार चीज़ है जिसे शुरू से बनाना ही नहीं चाहिए था
    • record के लिए बता दूं, Firefox Sync काफी लंबे समय तक ठीक इसी तरह था
      https://blog.mozilla.org/services/2011/03/22/get-syncing-wit...
      शुरुआती सवालों में से एक यह था कि Custom Sync Server इस्तेमाल करना है या नहीं, और यह “Custom Sync Server” WebDAV server जैसी simple चीज़ भी हो सकता था। अगर आपके पास public HTTP server था, तो वह लगभग पहले से supported होता था या बहुत कम dependencies जोड़नी पड़ती थीं। और login key से अलग end-to-end encryption key भी पूछी जाती थी
  • self-hosting में सफलता मिलना बधाई की बात है। लेकिन solution जरूरत से ज्यादा complex लगता है। बहुत कम data sync करने के लिए database server और Docker तक खड़ा करना जरूरी नहीं होना चाहिए। ideally SQLite इस्तेमाल हो और standalone executable sync server implementation हो तो अच्छा होगा

    • theory में सिर्फ जरूरी endpoints implement करने वाला simple sync server बनाया जा सकता है। ऐसी guide official Mozilla-maintained sync server चलाती है, और वह स्वाभाविक रूप से homelab के minimal implementation के लिए नहीं, बल्कि करोड़ों users को serve करने के standard पर बना है
      कोई https://github.com/mozilla-services/syncstorage-rs को fork करके extra चीज़ें हटा सकता है, और auxiliary database तथा Google Cloud based architecture के बिना फिर से implement कर सकता है। हालांकि बहुत से कामों की तरह, पहले पर्याप्त interest और free time वाले लोगों को जुटाकर development करना होगा
    • सही है, लेकिन फिर भी self-hosting संभव है, सिर्फ यही बात मायने रखती है। कई browsers में तो यह भी नहीं होता
    • एक open merge request है
      https://github.com/mozilla-services/syncstorage-rs/issues/49...