Self-hosted Dropbox বিকল্প: Nextcloud, Seafile ও Syncthing
Nextcloud, Seafile, Syncthing ও object storage তুলনা করুন: sync topology, ছোট VPS-এ প্রকৃত খরচ এবং কেন sync কখনও backup নয়, তা জানুন।
কোন self-hosted Dropbox বিকল্পটি চালানো উচিত?
চারটি self-hosted Dropbox বিকল্প বিবেচনা করার মতো: Nextcloud, Seafile, Syncthing এবং তার ওপর client ব্যবহার করে object storage। এগুলো পরস্পরের বিকল্প নয়। অন্যদের ফাইল পাঠাতে হলে Nextcloud একটি পরিবার বা ছোট দলের জন্য উপযোগী। খুব বেশি সংখ্যক ছোট ফাইল sync করতে হলে Seafile উপযোগী, বিশেষ করে disk-এ data কীভাবে সংরক্ষিত হয় তার চেয়ে sync speed বেশি গুরুত্বপূর্ণ হলে। একজন ব্যক্তি নিজের device-গুলোর মধ্যে sync করবেন এবং বাইরের কারও link-এর প্রয়োজন হবে না—এমন ক্ষেত্রে Syncthing উপযোগী। archive-এর জন্য object storage উপযোগী, যেখানে সস্তায় bytes সংরক্ষণ করা হয় এবং খুব কমই খোলা হয়।
Feature তুলনা করার আগে sync কীভাবে কাজ করে তা নির্ধারণ করুন। Feature list দেখতে প্রায় একই রকম। Topology—অর্থাৎ কোন machine-এ সেই copy থাকে, যার সঙ্গে অন্য সব machine-এর copy মিলতে হয়—ছয় মাস পরও আপনি ব্যবস্থাটি নিয়ে সন্তুষ্ট থাকবেন কি না, তা নির্ধারণ করে।
সিঙ্ক টপোলজি: একটি কেন্দ্রীয় authoritative server, নাকি server ছাড়া peer
এখানে দুটি নকশা বিবেচনায় আছে। পরবর্তী আলোচনার বেশির ভাগই নির্ভর করে আপনি কোনটি বেছে নেন তার ওপর।
একটি authoritative server। Nextcloud, Seafile এবং object storage এই পদ্ধতিতে কাজ করে। একটি মেশিন, সাধারণত একটি VPS (virtual private server), মূল কপি সংরক্ষণ করে। প্রতিটি ডিভাইস সেই মেশিনের সঙ্গে যোগাযোগ করে। আপনার laptop এক মাস বন্ধ থাকলেও পরে চালু হয়ে নিজে থেকেই পরিবর্তনগুলো গ্রহণ করতে পারে। 6 GB খালি জায়গা থাকা একটি phone কেবল একটি subset রাখতে পারে, আর server-এ সব ফাইল থাকতে পারে। একটি browser দিয়ে ফাইল দেখা যায়। এ কারণেই share link তৈরি করা সম্ভব।
Server ছাড়া peer। Syncthing এই পদ্ধতিতে কাজ করে। ডিভাইসগুলো নিজেদের মধ্যে একে অপরকে খুঁজে বের করে এবং encrypted connection-এর মাধ্যমে সরাসরি file list বিনিময় করে। কোনো কপিই authoritative নয়। যে ডিভাইসগুলোতে কোনো file থাকে, file-টি শুধু সেখানেই থাকে। কোনো পরিবর্তন এক ডিভাইস থেকে অন্য ডিভাইসে যেতে হলে একই সময়ে উভয় ডিভাইস online থাকতে হবে। কাউকে দেওয়ার মতো কোনো URL থাকে না, কারণ কোনো মেশিন page serve করছে না।
এর ফলে চারটি বিষয় দেখা দেয়। ব্যবহারকারীরা সাধারণত পরে এগুলোর মুখোমুখি হন।
- যে ব্যক্তি software install করবেন না, তাকে কোনো file পাঠাতে হলে authoritative server প্রয়োজন। একটি link হলো URL, আর URL-এর জন্য একটি process-এর port-এ listening করা প্রয়োজন।
- আপনার নিয়ন্ত্রণে নেই এমন কোনো মেশিন থেকে, যেমন work laptop থেকে, ফাইল ব্যবহার করতে authoritative server প্রয়োজন।
- কোনো device কয়েক সপ্তাহ বন্ধ থাকলে, সেটি চালু হওয়ার পর server থেকে পরিবর্তনগুলো গ্রহণ করে। Peer setup-এ অন্য কোনো device-এ ওই data থাকতে হবে এবং সেটিকেও online থাকতে হবে। এ কারণেই অনেক Syncthing user একটি VPS-এ always-on peer হিসেবে একটি instance চালান।
- Storage ব্যবহারের হিসাব আলাদা। একটি authoritative server একটি পূর্ণ কপি রাখে, এর সঙ্গে প্রতিটি device স্থানীয়ভাবে যতটুকু রাখে তা যোগ হয়। একই folder ভাগ করে নেওয়া চারটি peer চারটি পূর্ণ কপি রাখে, কারণ প্রতিটি peer পুরো folder-টি সংরক্ষণ করে।
Nextcloud: ব্যবহারকারী, group এবং public link
Nextcloud একটি PHP web application। এটি একটি data directory-র অধীনে সাধারণ file হিসেবে আপনার file সংরক্ষণ করে এবং একটি database-এ সেগুলোর তথ্য রাখে। আপনি কোনো folder কোনো user, কোনো group অথবা password ও expiry date-সহ public link হিসেবে share করতে পারেন। Version history ডিফল্টভাবে চালু থাকে এবং deleted file প্রথমে trash bin-এ যায়। Desktop client Linux, macOS এবং Windows সমর্থন করে, আর iOS ও Android app-গুলো official। Dropbox ছাড়ার কারণ যদি হয় যে অন্যদের আপনার file গ্রহণ করতে হবে, তাহলে এটিই বাস্তবসম্মত সমাধান।
এর বিনিময়ে system-এর একাধিক component পরিচালনা করতে হয়। একটি সাধারণ install-এ web server, PHP-FPM (PHP process manager), MariaDB বা PostgreSQL-এর মতো database এবং file locking-এর জন্য Redis চলে। একটি background job cron বা systemd timer থেকে প্রতি পাঁচ মিনিটে চলে। 1 GB VPS-এ এটি চালু হবে, কিন্তু একটি বড় upload বা দীর্ঘ occ maintenance command চললে out-of-memory killer process বন্ধ করে দিতে পারে। কয়েকজন user-এর জন্য 2 GB-কে সর্বনিম্ন ধরুন। আরও app চালু করলে 4 GB প্রয়োজন হবে বলে ধরে নিন। আরেকটি বিষয় হলো upgrade: app-store app-গুলো নির্দিষ্ট core release-এর জন্য তৈরি হয়। তাই upgrade করার আগে আপনি যে app-গুলোর ওপর নির্ভর করেন সেগুলো পরবর্তী major version সমর্থন করে কি না যাচাই করুন।
একটি account-এ কয়েক লক্ষ ছোট file থাকলে Nextcloud ধীর হয়ে যায়। কারণ প্রতিটি file file cache table-এ একটি row এবং disk-এ একটি বাস্তব file হিসেবে থাকে। Desktop client-ও সেগুলো একবারে একটি করে পড়ে। বাড়ির ব্যবহারের পরিসরে এই সমস্যা সাধারণত দেখা যায় না। Sizing, TLS (transport layer security) এবং backup সম্পর্কে TLS ও backup-সহ Docker ভিত্তিক Nextcloud install-এ আলোচনা করা হয়েছে। সিদ্ধান্ত নেওয়ার পরে পরবর্তী ধাপ হিসেবে সেটিই দেখুন।
পরিধি সম্পর্কে একটি সতর্কতা মনে রাখুন। Nextcloud আপনার calendar, contacts, notes এবং photo library-ও পরিচালনা করতে পারে। আপনি চালু করা প্রতিটি app অতিরিক্ত background কাজ যোগ করে এবং upgrade আটকে দেওয়ার আরেকটি সম্ভাব্য কারণ তৈরি করে। আসল সমস্যা যদি photo হয়, তাহলে dedicated tool সেগুলো আরও ভালোভাবে পরিচালনা করে: দেখুন self-hosted Google Photos replacement হিসেবে Immich। আসল সমস্যা যদি document ও wiki হয়, তাহলে file server-এ একের পর এক app যোগ না করে self-hosted Notion alternatives দেখুন। Browser-এ ওই document edit করার জন্য আবার আলাদা server লাগে; এটি Nextcloud app নয়। তাই 2 GB সর্বনিম্ন memory এখনও যথেষ্ট ধরে নেওয়ার আগে OnlyOffice ও Collabora-এর তুলনা দেখুন।
Seafile: খুব বেশি সংখ্যক ছোট ফাইলের জন্য তৈরি
Seafile প্রতিটি ফাইলকে block-এ ভাগ করে এবং content hash দিয়ে শনাক্ত করা একটি internal object store-এ সংরক্ষণ করে। Git তার object-এর জন্য একই ধারণা ব্যবহার করে। Sync ও sharing-এর একক folder tree নয়, library। Client প্রতিটি ফাইলের জন্য আলাদা request পাঠানোর বদলে block এবং একটি commit upload করে। তাই 100,000টি ছোট ফাইলের একটি directory sync করতে per-file protocol-এর তুলনায় অনেক কম সময় লাগে। একই block একবারই সংরক্ষিত হয়। ফলে বড় একটি ফাইলের দ্বিতীয় copy-এর জন্য প্রায় কোনো অতিরিক্ত storage লাগে না।
এর বিনিময়ে server-এ আপনার ফাইলগুলো আর সাধারণ file হিসেবে থাকে না। Storage directory খুললে hexadecimal নামের object file দেখতে পাবেন। Data বের করতে Seafile client অথবা Seafile-এর নিজস্ব export ও fsck tool ব্যবহার করতে হবে। Backup এখনও কাজ করে, কারণ object-গুলো সাধারণ file। কিন্তু cp দিয়ে একটি নির্দিষ্ট spreadsheet restore করতে পারবেন না। এটি গ্রহণযোগ্য কি না এখনই সিদ্ধান্ত নিন। পরে মানুষ সাধারণত এই বৈশিষ্ট্যটির জন্য অনুতপ্ত হয়।
Seafile একটি community edition এবং একটি paid professional edition প্রকাশ করে। দুটির পার্থক্য release অনুযায়ী পরিবর্তিত হয়। তাই নির্দিষ্ট কোনো feature-এর ওপর team-এর পরিকল্পনা করার আগে তাদের site-এ বর্তমান terms পড়ুন। Official desktop ও mobile client রয়েছে। Encrypted library client-এ encryption করা হয়। তাই server এমন ciphertext সংরক্ষণ করে যা সে পড়তে পারে না। Passphrase হারালে library আর পড়া যাবে না, আপনার পক্ষেও নয়। Browser-এ encrypted library খুললে সেই passphrase web session-কে দিতে হয়। তাই এই নিশ্চয়তার শক্তিশালী সংস্করণ desktop ও mobile client-এর ক্ষেত্রেই প্রযোজ্য।
Resource cost Nextcloud-এর কাছাকাছি। আপনাকে একটি database, একটি memory cache এবং দুটি application process চালাতে হবে। তাই 2 GB-ই আবার বাস্তবসম্মত ন্যূনতম পরিমাণ।
Syncthing: লগ ইন করার কিছু নেই
Syncthing একটি single Go binary। এটি folder পর্যবেক্ষণ করে, discovery server বা relay-এর মাধ্যমে peer খুঁজে বের করে এবং device-গুলোর মধ্যে সরাসরি sync করে। যাদের সঙ্গে sync করবেন, তাদের জন্য কোনো account বা login page নেই। ID-এর মাধ্যমে দুটি device pair করে উভয় পাশে folder গ্রহণ করুন। এখানে থাকা অন্য যেকোনো বিকল্পের তুলনায় এটি চালানোতে সবচেয়ে কম কাজ লাগে, কারণ চালানোর মতো উপাদানও খুব কম।
এর বিনিময়ে sharing-এর পুরো সুবিধাটি বাদ দিতে হয়। এর entry হলো Device pairing only, no links। কোনো client, accountant বা আত্মীয়কে link দিতে পারবেন না। Mobile সমর্থনও আরেকটি সীমাবদ্ধতা: Android app, no official iOS। প্রকল্পটির নিজস্ব FAQ-তে বিষয়টি সরাসরি বলা হয়েছে: "There are no plans by the current Syncthing team to officially support iOS in the foreseeable future", কারণ iOS background processing এতটাই সীমিত করে যে নির্ভরযোগ্য sync করা কঠিন। iOS ব্যবহারকারীদের third-party app ব্যবহার করতে হয়।
Resource ব্যবহার কম, তবে একটি বিষয় জানা দরকার। Syncthing sync করা প্রতিটি file-এর জন্য একটি index entry রাখে। তাই memory ব্যবহার এবং প্রথম scan মোট size-এর পরিবর্তে file-এর সংখ্যার সঙ্গে বাড়ে। প্রথমবার বড় folder hash করার সময় কিছুক্ষণ CPU ব্যবহার বেশি থাকবে, পরে তা স্থিতিশীল হবে। সবচেয়ে ছোট VPS plan-এও এটি স্বাচ্ছন্দ্যে চলে।
Conflict হলে উভয় পাশের file রাখা হয়। দুটি device একে অপরের সঙ্গে সংযোগহীন থাকা অবস্থায় একই file পরিবর্তন করলে Syncthing একটি copy-এর নাম বদলে সেটিকে অন্যটির পাশে রাখে। ফলে notes.sync-conflict-20260802-141530-K7MB3QT.md-এর মতো file দেখতে পাবেন। কোনো data হারায় না। তবে কোনো data merge-ও হয় না; আপনাকেই হাতে resolve করতে হবে।
ক্লায়েন্টসহ object storage: সস্তা bytes, sync folder নয়
Object storage বলতে S3 (simple storage service)-compatible bucket বোঝায়। এটি MinIO ব্যবহার করে self-hosted হতে পারে, অথবা কোনো provider-এর কাছ থেকে ভাড়া নেওয়া হতে পারে। আপনি একটি tool ব্যবহার করে এতে প্রবেশ করেন: command line থেকে rclone, অথবা এমন desktop client দিয়ে যা bucket-কে drive হিসেবে দেখায়। Sharing-এর জন্য presigned URL ব্যবহার করা হয়। এটি এমন একটি link, যার মধ্যে নিজস্ব expiry time থাকে। Versioning হলো bucket-এর একটি setting: Bucket versioning, off by default। তাই bucket তৈরি করার সময় এটি চালু করুন, কারণ আগে upload করা object-গুলোর ক্ষেত্রে এটি প্রযোজ্য হয় না।
Bucket-কে sync folder হিসেবে ব্যবহার করলেই সমস্যা শুরু হয়। ডিফল্টভাবে কোনো কিছু আপনার Documents directory monitor করে না। rclone bisync two-way sync করে, এবং rclone-এর নিজস্ব documentation-এ এর জন্য প্রয়োজনীয় সতর্কতার কথা সরাসরি বলা আছে। Object storage যে কাজটি খুব ভালোভাবে করে, তা হলো backend storage হিসেবে থাকা: backup target হিসেবে, অথবা কোনো application-এর পেছনের storage layer হিসেবে। MinIO দিয়ে self-hosted S3-compatible object storage-এ server side নিয়ে আলোচনা করা হয়েছে।
এখানে resource cost কিছুটা ভিন্ন। MinIO একটি binary, এবং idle অবস্থায় খুব কম resource ব্যবহার করে। প্রকৃত খরচ হলো disk। VPS-এর ক্ষেত্রে এর অর্থ হলো gigabyte অনুযায়ী ভাড়া নেওয়া একটি block volume, এর সঙ্গে object upload ও download করার সময় ব্যবহৃত bandwidth। এই দুটির কোনোটি free -h-এ দেখা যায় না। তাই archive-এর আকার নির্ধারণের আগে VPS-এর প্রকৃত মাসিক খরচ পড়ুন।
শেয়ারিং, মোবাইল ক্লায়েন্ট ও ভার্সনিংয়ের তুলনা
The data behind this chart
[
{
"tool": "Nextcloud",
"sharing": "Public links, users and groups",
"mobile": "Official iOS and Android apps",
"versioning": "On by default, plus trash"
},
{
"tool": "Seafile",
"sharing": "Public links with password and expiry",
"mobile": "Official iOS and Android apps",
"versioning": "Library history and snapshots"
},
{
"tool": "Syncthing",
"sharing": "Device pairing only, no links",
"mobile": "Android app, no official iOS",
"versioning": "Optional per folder, off by default"
},
{
"tool": "Object storage",
"sharing": "Presigned URLs you generate",
"mobile": "Third party clients only",
"versioning": "Bucket versioning, off by default"
}
]সব 4টি অপশন একটি বিষয়ের ভিত্তিতে আলাদা হয়। এর মধ্যে তিনটি এমন কাউকে ফাইল দিতে পারে, যার কাছে শুধু একটি browser আছে। একটি অপশন কেবল আপনার আগে থেকেই মালিকানাধীন device-এর সঙ্গে কাজ করে। Seafile-এর versioning entry, Library history and snapshots, সম্পর্কে একটি বিষয় মনে রাখা দরকার: history প্রতি library অনুযায়ী সংরক্ষিত হয়। তাই কোনো library মুছে ফেললে তার history-ও মুছে যায়।
আবার আপনার ডেটা বের করে নেওয়া
এখন exit cost যাচাই করা সহজ, পরে তা আবিষ্কার করা ব্যয়বহুল। তাই কোনো প্রতিশ্রুতিতে যাওয়ার আগে এটি যাচাই করুন।
Nextcloud বাস্তব directory-তে বাস্তব file সংরক্ষণ করে। তাই data directory-এর একটি tar নিলেই আপনার document পাওয়া যাবে, এমনকি application আর কখনও start না হলেও। Syncthing প্রতিটি peer-এ একই কাজ করে। এই তালিকায় এটিই সবচেয়ে শক্তিশালী exit ব্যবস্থা। File-গুলো প্রতিটি device-এই সরাসরি সংরক্ষিত থাকে। Seafile-এর object store-এর block-গুলোকে আবার file-এ রূপান্তর করতে Seafile অথবা এর export tool প্রয়োজন। Object storage-এর জন্য rclone বা সমতুল্য tool প্রয়োজন। এটি একটি command-এর মাধ্যমেই করা যায়।
সিঙ্ক ব্যাকআপ নয়, এবং এই পার্থক্যের কারণেই মানুষ ডেটা হারায়
এখানে ব্যবহৃত প্রতিটি tool মেশিনগুলোর মধ্যে পরিবর্তন কপি করে। কোনো ফাইল মুছে ফেলাও একটি পরিবর্তন। আপনার laptop থেকে কোনো folder সরালে client server-কে জানায়, server সেটি প্রয়োগ করে, এবং অন্য প্রতিটি device থেকেও সেটি সরিয়ে ফেলে। Ransomware একই পথ ব্যবহার করে: এটি স্থানীয়ভাবে file encrypt করে, client modified file শনাক্ত করে, এবং encrypted version upload করে। Sync সঠিকভাবেই কাজ করেছে। আপনার data তবুও হারিয়ে গেছে।
Trash bin এবং version history এই সমস্যার প্রভাব কমায়। কিন্তু এগুলোর মেয়াদও শেষ হয়, যে account ভুলটি করেছে সেটিই এগুলো খালি করতে পারে, এবং live copy যে disk-এ থাকে এগুলোও সেই disk-এই থাকে। কোনো volume নষ্ট হলে file এবং তাদের history একসঙ্গেই হারিয়ে যায়।
Backup হলো আলাদা hardware-এ রাখা একটি পৃথক copy, যা নির্ধারিত সময়সূচি অনুযায়ী নেওয়া হয় এবং যেটি অন্তত একবার restore করে যাচাই করা হয়েছে। একই run-এ database এবং file—দুটিই backup করুন। Database ছাড়া Nextcloud data directory restore করলে এমন একটি instance পাওয়া যায়, যা ওই file-গুলোর অস্তিত্ব জানে না। এরপর occ files:scan চালালে file পুনরুদ্ধার হয়, কিন্তু ওই table-গুলোতে থাকা share এবং version history হারিয়ে যায়। VPS থেকে নির্ধারিত সময়সূচির restic backup-এ এই encrypted ও deduplicated পদ্ধতি ব্যাখ্যা করা হয়েছে। সেখানে restore পরীক্ষা করার পদ্ধতিও আছে, শুধু backup আছে ধরে নেওয়ার পরিবর্তে।
আমি যা বেছে নেব
এই লেখা পড়ছেন এমন অধিকাংশ মানুষের জন্য Nextcloud। Dropbox ছাড়ার পরে অনেকেই যে সুবিধাটি সবচেয়ে বেশি অনুভব করেন, তা হলো এমন কাউকে একটি link দেওয়া, যে কখনো কোনো কিছু install করবে না, এবং ফোনে একটি file খোলা। Nextcloud official client এবং কোনো paid tier ছাড়াই এই দুটিই করতে পারে। এর জন্য 2 GB RAM ব্যবহার করা যুক্তিসঙ্গত।
আমি দুটি ব্যতিক্রম রাখি। folder-টি যদি সবসময় শুধু আপনার হয় এবং কেবল আপনার মালিকানাধীন hardware-এই থাকে, তাহলে Syncthing চালান। এতে patch করার মতো কোনো server এবং সুরক্ষিত রাখার মতো কোনো web login থাকে না। কয়েক লক্ষ file থাকা কোনো working directory sync করলে Seafile চালান। এর বিনিময়ে opaque storage মেনে নিলে গতি পাবেন। আপনি যেটিই বেছে নিন, Object storage সেটির নিচে backup target হিসেবে ব্যবহার করুন; sync tool হিসেবে তার সামনে রাখবেন না।
FAQ
Syncthing কি আমার laptop-এর backup হিসেবে কাজ করে?
না। Syncthing device-গুলোর মধ্যে পরিবর্তন কপি করে। কোনো file মুছে ফেলাও একটি পরিবর্তন। তাই ভুল করে মুছে ফেলা file কয়েক সেকেন্ডের মধ্যে সব paired device থেকে অদৃশ্য হয়ে যায়। Per-folder file versioning সহায়ক। প্রতিটি folder-এ এটি enable না করা পর্যন্ত বন্ধ থাকে। আলাদা hardware-এ নিয়মিত schedule অনুযায়ী প্রকৃত backup রাখুন। restore কাজ করছে কি না নিশ্চিত হতে অন্তত একবার সেই backup থেকে restore করুন।
একই VPS-এ Nextcloud এবং Syncthing চালানো যাবে কি?
হ্যাঁ। তারা আলাদা port-এ listen করে এবং একে অপরের সঙ্গে conflict করে না। Syncthing folder-কে Nextcloud-এর data directory-তে point করবেন না। Nextcloud database-এ প্রতিটি file track করে। তাই এর অধীন disk-এ থাকা নতুন file occ files:scan চালানো পর্যন্ত অদৃশ্য থাকে। এর অধীন থেকে মুছে ফেলা file-এর জন্য database-এ এমন row থেকে যায়, যা কোনো কিছুর দিকে নির্দেশ করে না। Syncthing-এর জন্য আলাদা directory দিন। অথবা সেই directory-কে Nextcloud-এ external storage হিসেবে attach করুন, যাতে Nextcloud সেটি পরীক্ষা করতে জানে।
যার কোনো account নেই, তার সঙ্গে link share করতে কোনটি ব্যবহার করা যায়?
Nextcloud এবং Seafile উভয়ই public link তৈরি করতে পারে। এতে optional password এবং expiry date দেওয়া যায়। Object storage এমন একটি presigned URL দেয়, যা নির্ধারিত সময় পার হলে নিজে থেকেই কাজ করা বন্ধ করে। এখানে Syncthing-এর কোনো সমাধান নেই। এর sharing model হলো device pairing। তাই অন্য ব্যক্তিকে Syncthing install করতে হবে, আপনাকে একটি device ID দিতে হবে এবং folder গ্রহণ করতে হবে।
Server-এর কত disk প্রয়োজন?
Server of record-এর জন্য shared data-এর সম্পূর্ণ size-এর পাশাপাশি version history, trash এবং চলমান upload-এর জন্য working space রাখুন। Version history-এর প্রয়োজনীয়তা অনেকে কম হিসাব করেন। প্রতিদিন পরিবর্তিত হওয়া 2 GB file-এর প্রতিটি version সংরক্ষণ করলে দ্রুত অনেক space লাগে। তাই শুরুতেই retention policy নির্ধারণ করুন। Data আলাদা volume-এ রাখলে এই বৃদ্ধি root filesystem-এর বাইরে থাকে। Disk full হলে তখন শুধু একটি upload নয়, পুরো server বন্ধ হয়ে যেতে পারে।