1 poin oleh GN⁺ 2025-03-03 | 1 komentar | Bagikan ke WhatsApp
  • Setelah berpindah dari Firefox ke LibreWolf, penulis ingin mengelola sendiri data sinkronisasi browser dan, setelah meninjau beberapa repositori serta konfigurasi Docker, berhasil membuat server yang berfungsi
  • syncserver lama dari Mozilla adalah konfigurasi all-in-one, tetapi ada peringatan bahwa pemeliharaannya telah dihentikan, sehingga syncstorage-rs berbasis Rust menjadi pilihan yang lebih realistis
  • Prosedur Docker resmi sulit diikuti karena proses penyalinan grpcio, protobuf, dan mozilla-rust-sdk cukup rumit, sehingga konfigurasi komunitas syncstorage-rs-docker menjadi dasar deployment yang benar-benar dipakai
  • Konfigurasi akhirnya menggunakan docker-compose.yaml untuk menjalankan MariaDB 10.6.13 dan firefox_syncserver, dengan Caddy bertindak sebagai reverse proxy ke firefox_syncserver:8000
  • Kendala utama adalah data DB persisten, kekurangan ruang penyimpanan, dan eksperimen pada prosedur Docker; jika tidak terbiasa dengan Docker atau pengelolaan DB, tingkat kesulitan konfigurasinya cukup tinggi

Alasan berpindah dari syncserver ke syncstorage-rs

  • Setelah beralih dari Firefox ke LibreWolf, penulis mulai menyiapkan server Firefox Sync yang di-self-host
  • Yang pertama ditemukan adalah Mozilla syncserver, sebuah paket all-in-one untuk self-hosting
    • Mencakup tokenserver untuk autentikasi dan syncstorage untuk penyimpanan
    • Riwayat build memiliki tag “failed”
    • Repositorinya menampilkan peringatan bahwa proyek ini tidak lagi dipelihara dan menyarankan pindah ke proyek baru berbasis Rust
  • Setelah itu, pilihan jatuh pada syncstorage-rs
    • Ini adalah versi berbasis Rust yang lebih modern dari proyek sebelumnya
    • Tidak ada image Docker siap pakai
    • Dokumentasinya menjelaskan cara menjalankan dengan Docker, tetapi alur konfigurasinya rumit
  • Ada beberapa titik yang menghambat di dokumentasi Docker resmi
    • Ada petunjuk untuk menyamakan versi grpcio dan protobuf dengan versi yang dipakai google-cloud-rust-raw
    • Isi mozilla-rust-sdk harus disalin manual ke direktori root tingkat atas
    • Bahkan setelah memeriksa repositori, Dockerfile, Makefile, dan workflow CircleCI, langkah berikutnya tetap tidak jelas
  • syncstorage-rs-docker menyediakan konfigurasi Docker yang lebih sederhana
    • Dijelaskan bahwa setelah mengalami masalah dengan dokumentasi asli, pembuatnya membuat kontainer Docker untuk infrastruktur mereka sendiri
    • Dengan dasar konfigurasi ini, pengaturan server nyata kemudian dilakukan

Konfigurasi deployment dengan Docker Compose dan Caddy

  • docker-compose.yaml menambahkan layanan MariaDB dan server Firefox Sync
    • firefox_mariadb menggunakan image linuxserver/mariadb:10.6.13
    • Volume data DB diatur ke /data/ffsync/dbdata:/config
    • firefox_syncserver membangun Dockerfile dari /root/ffsync dan mengekspos port 8000:8000
    • Variabel environment utama mencakup SYNC_URL, SYNC_CAPACITY, SYNC_MASTER_SECRET, METRICS_HASH_SECRET, SYNC_SYNCSTORAGE_DATABASE_URL, dan SYNC_TOKENSERVER_DATABASE_URL
  • Untuk kata sandi DB, sebaiknya hindari karakter khusus seperti "/|%"
    • Ini bisa menimbulkan masalah selama proses konfigurasi
  • Untuk mengurangi waktu build saat pengujian, argumen BUILDKIT_INLINE_CACHE ditambahkan ke Docker Compose
  • Inisialisasi DB dilakukan dengan meng-clone repositori, lalu menyalin Dockerfile dan initdb.sh ke server serta melakukan beberapa modifikasi
    • Menjalankan kontainer MariaDB: docker-compose up -d firefox_mariadb
    • Menjalankan skrip inisialisasi: chmod +x initdb.sh ./initdb.sh
    • Menjalankan seluruh stack: docker-compose up -d
  • Reverse proxy Caddy dikonfigurasi agar mengarah ke server Sync yang baru
    • Contoh konfigurasinya menghubungkan mydomain:443 ke reverse_proxy firefox_syncserver:8000
    • Setelah memperbarui entri DNS, Caddy di-restart dan server Sync pun berjalan

Kendala saat konfigurasi dan waktu yang dibutuhkan

  • Masalah terbesar adalah data persisten MariaDB, dan saat kontainer di-restart, data lama kadang perlu dihapus
  • Image Docker dan file perantara membesar sehingga ruang penyimpanan server habis
  • Perlu mencoba konfigurasi Docker berkali-kali untuk menemukan prosedur yang benar
  • Server Firefox Sync self-hosted tidak mudah diselesaikan jika tidak terbiasa dengan Docker atau pengelolaan DB, tetapi berkat hasil kerja komunitas seperti syncstorage-rs-docker, pengaturannya tetap memungkinkan
  • Seluruh konfigurasi memakan waktu sekitar 2 jam

1 komentar

 
GN⁺ 2025-03-03
Opini Hacker News
  • Konfigurasi ini juga masih bergantung pada infrastruktur Mozilla untuk beberapa layanan pendukung seperti autentikasi, email, dan metadata akun
    https://github.com/dan-r/syncstorage-rs-docker/blob/main/app...
    Meski begitu, ini titik awal yang bagus, dan jika Anda siap menanggung migrasi akun, bagian-bagian itu bisa ditambahkan nanti. Menjalankan semua komponen sepenuhnya secara self-hosting juga memungkinkan, tetapi butuh sedikit lebih banyak usaha. Dibandingkan terakhir kali saya menyiapkannya dulu, dokumentasi dan pengalaman developernya tampaknya sudah membaik
    https://github.com/mozilla/fxa
    https://mozilla.github.io/ecosystem-platform/tutorials/devel...
    https://mozilla-services.readthedocs.io/en/latest/howtos/run...

    • Dulu sepertinya Firefox iOS bisa dikonfigurasi untuk memakai server FxA/Sync lain, tetapi setelah saya cari, pengaturan itu tampaknya sudah hilang
      Untuk Firefox for iOS 9.0 ke atas, instruksinya adalah masuk ke pengaturan, mengetuk nomor versi 5 kali, memasukkan URL content-server di “Advance Account Settings”, lalu menyalakan “Use Custom Account Service”
      https://mozilla-services.readthedocs.io/en/latest/howtos/run...
    • Suatu saat seluruh stack mungkin bisa dimasukkan ke dalam satu container Docker bersama skrip shell untuk setup
    • Saya penasaran kenapa email bergantung pada infrastruktur Mozilla
    • Hilangkan saja langkah perantaranya dan langsung pakai Google
  • Garuda Linux sudah cukup lama mengoperasikan server Firefox Sync sendiri untuk browser FireDragon
    defaultPref("identity.sync.tokenserver.uri", "https://ffsync.garudalinux.org/token/1.0/sync/1.5";); // --> FIREDRAGON CONFIG
    Namun tampaknya mereka menjalankan server sinkronisasi lama, bukan versi Rust
    [1] https://firedragon.garudalinux.org/
    [2] https://gitlab.com/garuda-linux/infra-nix/-/blob/main/docker...

  • Pengalaman self-hosting saya juga saya rangkum di sini
    https://kyzer.me.uk/syncserver/
    Bisa dilakukan, tetapi benar-benar pekerjaan yang membosankan dan melelahkan. Versi sebelumnya sudah ditinggalkan dan ditulis dengan Python 2 sehingga sepenuhnya usang, tetapi jauh lebih baik
    Tidak perlu Docker maupun Python, tetapi sekarang membutuhkan MySQL. Ada relawan yang sedang mengerjakan agar SQLite kembali didukung secara default seperti versi lama, tetapi para kontributor utama tampaknya lebih condong meniru perusahaan dan menulis justifikasi untuk pengumpulan metrik serta pengenalan framework metrik baru, ketimbang membuat self-hosting lebih mudah

  • https://github.com/canvas-ai/canvas-browser-extensions juga layak dilihat atau diikuti
    Ini adalah alat yang mencoba menyinkronkan tab browser Chrome/Firefox ke pohon direktori virtual self-hosted yang digerakkan oleh LMDB dan indeks bitmap Roaring. Jika dipikir ulang, sejak awal seharusnya saya memakai rxdb atau pouchdb dan hanya mempertahankan bitmap, tetapi pada akhirnya memang akan menuju ke sana
    Alurnya adalah membuat path konteks baru seperti universe://travel/2024/03/barcelona sesuai pekerjaan yang sedang dilakukan, lalu, bergantung pada pengaturan, setelah tab saat ini disimpan dan ditutup, tab pekerjaan baru seperti pencarian Airbnb ditambahkan ke konteks tersebut. Pasangan Anda juga bisa membuka konteks yang sama dan bekerja bersama, dan jika sinkronisasi otomatis aktif, bisa juga berperilaku seperti saling menutup tab satu sama lain
    Komponen server saat ini sedang ditulis ulang, dan di situlah amatirisme saya terlihat. Dengan basis hanya 2 pengguna, saya bisa melakukan hal bodoh seperti memulai penulisan ulang seluruh API, backend, dan modul sekaligus hingga merusak fitur yang ada dan tidak bisa dipulihkan. Dengan alat-alat masa kini, misalnya Cursor dan Claude 3.7, batas terbesar bagi ide pada akhirnya adalah waktu

  • Saya pernah memakainya seperti itu untuk sementara waktu, bahkan dengan meng-host autentikasi sendiri, tetapi akhirnya saya berpikir Mozilla adalah salah satu dari sedikit perusahaan yang nyaris masih bisa saya percayai untuk menyimpan data saya. Bisa saja kepercayaan itu keliru. Setup server sinkronisasi relatif sederhana, sedangkan server autentikasi jauh lebih kompleks, jadi menurut saya nilainya tidak sebanding dibanding memakai layanan hosting publik

    • Mozilla nyaris membakar habis sisa goodwill dengan keributan “terms of use”. Namun masih ada LibreWolf sebagai fork yang menghormati privasi
    • Jika Mozilla merebrand dirinya sebagai perusahaan iklan, dan menerima sebagian besar pendanaannya—dan mungkin juga arahannya—dari Google, maka kepercayaan itu setidaknya perlu dipertanyakan
    • Penilaian itu menjadi ucapan yang sangat cepat usang
  • Terima kasih. Ini satu-satunya hal yang menghalangi saya pindah ke LibreWolf
    Sepertinya engine database yang saat ini didukung hanya MySQL dan Spanner, tetapi dukungan untuk SQLite dan Postgres juga sedang dikerjakan[1]. Kalau cepat digabung, tampaknya akan jauh lebih mudah mencadangkan seluruh penyimpanan sinkronisasi sebagai satu file SQLite. Namun, untuk instance multi-pengguna, sepertinya lebih baik menyimpannya di Postgres, yang dukungan pembaruan paralelnya lebih baik
    Tambahan setelah mencoba sendiri: bagaimana tepatnya memaksa Firefox(LibreWolf) memakai URL self-hosted? Apakah ada pengaturan about:config?
    1: https://github.com/mozilla-services/syncstorage-rs/issues/49...

  • Kalau Firefox Sync terenkripsi ujung-ke-ujung, saya penasaran apa manfaatnya dari sisi perlindungan privasi
    https://support.mozilla.org/en-US/kb/sync

    • Setahu saya, halaman login dan kode JavaScript tetap disajikan lewat internet, dan kunci enkripsi hanya diturunkan dari kata sandi. Itu bukan desain yang bagus untuk sesuatu yang sensitif seperti seluruh data browser
  • Ada Floccus yang mirip dengan Firefox Sync. Kalau hanya perlu sinkronisasi bookmark dan tab, penyiapannya terlihat sederhana
    https://floccus.org/

  • Akan bagus jika LibreWolf dan Waterfox memperjelas bahwa mereka membalik alurnya dan memakai Mozilla Sync Server, lalu menjadikannya opsional seperti di bawah ini
    Untuk sinkronisasi, pilih salah satu opsi berikut:
    [x] Custom Sync Server: ___________
    [ ] Mozilla Sync

    • LibreWolf memang opsional, dan kalau seseorang menekan kotak centang bernama “Firefox Sync” lalu mengira itu sinkronisasi lain yang bukan Firefox Sync, rasanya perubahan UI apa pun sulit membantu
    • Sync sebenarnya cuma penyimpanan blob yang sangat over-engineered. Saat 1.5 keluar, saya pernah mengimplementasikan server Accounts+Sync alternatif: https://gitlab.com/drdaeman/firesync/
      Sudah lama terbengkalai dan kodenya hanya proof of concept yang buruk, tetapi setidaknya itu berarti saya bisa menilai topik ini dengan sedikit dasar
      Untuk pengguna teknis, menurut saya yang terbaik adalah fork Firefox mengganti Sync dengan sesuatu yang lebih standar seperti S3 atau WebDAV. Kalau ingatan saya benar, tidak ada fitur di Sync yang tidak bisa ditangani sama baiknya, bahkan lebih baik, oleh protokol-protokol itu. Karena yang itu benar-benar standar yang sampai batas tertentu interoperabel
      Akan bagus jika Mozilla juga melakukan itu, tetapi mereka tampaknya terlalu kuat menyukai pengembangan sendiri, jadi sulit berharap. Saya sangat senang kecenderungan itu melahirkan Rust, tetapi Sync nyaris seperti sampah yang seharusnya tidak pernah dibuat sejak awal
    • Sebagai catatan, Firefox Sync cukup lama berjalan persis seperti itu
      https://blog.mozilla.org/services/2011/03/22/get-syncing-wit...
      Salah satu pertanyaan awalnya adalah apakah ingin memakai Custom Sync Server, dan “Custom Sync Server” ini bisa sesederhana server WebDAV. Kalau Anda punya server HTTP publik, hampir pasti sudah mendukungnya atau hanya perlu menambahkan sedikit dependensi. Dan selain kunci login, ia juga menanyakan kunci enkripsi ujung-ke-ujung
  • Selamat karena berhasil self-hosting. Namun solusinya terlihat lebih rumit dari yang perlu. Seharusnya tidak perlu menjalankan server database dan Docker hanya untuk menyinkronkan data yang sangat sedikit. Idealnya ada implementasi server sinkronisasi yang bisa berjalan mandiri dan memakai SQLite

    • Secara teori, bisa saja membuat server sinkronisasi sederhana yang hanya mengimplementasikan endpoint yang diperlukan. Panduan seperti ini menjalankan server sinkronisasi resmi yang dikelola Mozilla, yang tentu saja dibuat untuk standar melayani jutaan pengguna, bukan implementasi minimal untuk homelab
      Seseorang bisa mem-fork https://github.com/mozilla-services/syncstorage-rs, membuang perlengkapan tambahannya, lalu mengimplementasikannya ulang tanpa database pendukung dan arsitektur berbasis Google Cloud. Namun seperti banyak pekerjaan lainnya, pertama-tama perlu mengumpulkan orang-orang yang cukup berminat dan punya waktu luang untuk mengembangkannya
    • Benar, tetapi fakta bahwa self-hosting memungkinkan saja sudah berarti. Banyak browser bahkan tidak menyediakan itu
    • Ada permintaan merge yang masih terbuka
      https://github.com/mozilla-services/syncstorage-rs/issues/49...