Firefox Sync सर्वर self-hosting
(blog.diego.dev)- 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औरprotobufversions को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.13image का उपयोग किया- DB data volume
/data/ffsync/dbdata:/configपर सेट किया गया firefox_syncserverने/root/ffsyncके Dockerfile को build किया और8000:8000port 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_CACHEargument को 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
- MariaDB container चलाना:
- Caddy reverse proxy को नए Sync सर्वर की ओर point करने के लिए configure किया गया
- configuration example में
mydomain:443सेreverse_proxy firefox_syncserver:8000पर connection किया गया - DNS entry अपडेट करने के बाद Caddy को restart किया गया और Sync सर्वर काम करने लगा
- configuration example में
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 टिप्पणियां
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 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...
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 नहीं लगा
धन्यवाद। यही वह इकलौता हिस्सा था जो मुझे 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:configsetting है?1: https://github.com/mozilla-services/syncstorage-rs/issues/49...
about:configvariable बदलना काफी हैFirefox में
about:configपर जाकरidentity.sync.tokenserver.uriको http://localhost:5000/1.0/sync/1.5 में बदलना है। बेशक URL को अपने environment के हिसाब से बदलना होगाअगर Firefox Sync end-to-end encrypted है, तो privacy के लिहाज़ से इसका फायदा क्या है, यह जानना चाहूंगा
https://support.mozilla.org/en-US/kb/sync
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वह लंबे समय से छोड़ा हुआ है और 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 लगभग ऐसी बेकार चीज़ है जिसे शुरू से बनाना ही नहीं चाहिए था
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 हो तो अच्छा होगा
कोई https://github.com/mozilla-services/syncstorage-rs को fork करके extra चीज़ें हटा सकता है, और auxiliary database तथा Google Cloud based architecture के बिना फिर से implement कर सकता है। हालांकि बहुत से कामों की तरह, पहले पर्याप्त interest और free time वाले लोगों को जुटाकर development करना होगा
https://github.com/mozilla-services/syncstorage-rs/issues/49...