VPS-এ ফাইল sync-এর জন্য Syncthing নাকি Nextcloud?
Syncthing peer-to-peer, তাই server-এ কেন্দ্রীয় copy থাকে না। Nextcloud account ও link-সহ server। VPS-এ আপনার প্রয়োজন অনুযায়ী কোনটি নেবেন, জানুন।
Syncthing বনাম Nextcloud: যে পার্থক্যটি সিদ্ধান্ত নির্ধারণ করে
Syncthing বনাম Nextcloud-এর মূল পার্থক্য একটি কাঠামোগত বিষয়ের ওপর নির্ভর করে, এবং বাকি সবকিছু সেখান থেকেই আসে। Syncthing peer-to-peer। প্রতিটি device-এ সম্পূর্ণ folder থাকে, এবং কোনো copy-ই authoritative নয়। Nextcloud একটি server। একটি machine-এ files থাকে, user account-গুলো সেগুলোর সামনে access control প্রদান করে, এবং client-গুলো সেখান থেকে copy download করে।
এই কারণে Syncthing-এ share link বা আপনার documents-এর web view নেই। পরিবেশন করার মতো কোনো কেন্দ্রীয় copy নেই, তাই browser-এর অনুরোধ পূরণ করার মতোও কিছু নেই। Nextcloud দুটিই প্রদান করে। এর জন্য PHP runtime, database server, web server এবং TLS (transport layer security)-এর জন্য একটি reverse proxy প্রয়োজন।
সম্পৃক্ত প্রতিটি device আপনার নিজের হলে Syncthing বেছে নিন। কোনো browser বা অন্য ব্যক্তির files-এ access প্রয়োজন হলে Nextcloud বেছে নিন।
প্রতিটি নকশায় VPS আসলে কী কাজ করছে
Nextcloud চালানো একটি VPS আপনার ডেটার মূল সংরক্ষণস্থল। আপনার laptop-এ থাকা স্থানীয় কপি মুছে ফেললেও ফাইলটি server-এ থাকবে, কারণ server-ই শুরু থেকেই মূল কপি ছিল।
Syncthing চালানো একটি VPS ভিন্ন কাজ করে: এটি সবসময় চালু থাকা একটি peer। একই সময়ে online থাকা দুটি device-এর মধ্যে Syncthing সরাসরি data transfer করে। দুটি laptop কখনো একই সময়ে চালু না থাকলে, যতক্ষণই অপেক্ষা করুন না কেন, তারা কখনো sync করতে পারবে না। এমন একটি VPS-এ তৃতীয় peer যোগ করুন, যা কখনো বন্ধ হয় না; তাহলে সমস্যাটি আর থাকে না। Laptop A 09:00-এ data পাঠায়, Laptop B 22:00-এ data গ্রহণ করে, আর মাঝের সময়ে VPS folder-টি ধরে রাখে।
এটি সত্যিই কার্যকর একটি ভূমিকা, এবং এটি "Dropbox replacement"-এর চেয়ে সীমিত দাবি। Syncthing কখনো client-কে পাঠানোর মতো একটি link দেবে না। এটিই যদি আপনার প্রয়োজন হয়, তাহলে এখানে থামুন এবং self-hosted Dropbox বিকল্পগুলোর সংক্ষিপ্ত তালিকা পড়ুন।
ছোট VPS-এ প্রতিটির খরচ
Syncthing একটি মাত্র Go binary। এটি একটি socket-এ listen করে, local database-এ আপনার file-এর index সংরক্ষণ করে, এবং এটিই সম্পূর্ণ stack। Version 2.0 থেকে সেই index-এর জন্য LevelDB-এর পরিবর্তে SQLite ব্যবহৃত হয়। তাই 1.x install থেকে upgrade করলে প্রথমবার চালুর সময় একবার migration চলে। অনেক বড় folder set হলে এই migration সম্পন্ন হতে দীর্ঘ সময় লাগতে পারে। এটি শেষ হওয়া পর্যন্ত অপেক্ষা করুন। আর কিছু install করতে হয় না এবং আর কিছু patch করতে হয় না।
Nextcloud-এর জন্য আরও উপাদান লাগে। August 2026 অনুযায়ী, Nextcloud 35 PHP 8.3 থেকে 8.5 পর্যন্ত version support করে; এর পেছনে MariaDB অথবা PostgreSQL থাকে, এবং Apache 2.4 অথবা php-fpm সহ nginx-এর মাধ্যমে এটি serve করা হয়। Admin manual-এ "a minimum of 512MB RAM per process" সুপারিশ করা হয়েছে। php-fpm একই সময়ে একাধিক worker process চালায়।
1 GB VPS-এ Syncthing স্বচ্ছন্দে চলে, কিন্তু Nextcloud-এর জন্য resource সীমিত থাকে। এর অর্থ Nextcloud ভুল পছন্দ নয়। এর অর্থ হলো এটি বড় ধরনের commitment, কারণ একটি component-এর বদলে চারটি component নিয়মিত current রাখতে হবে। Docker, TLS এবং backup নিয়ে VPS-এ Nextcloud-এর guide-এ বর্ণিত container পদ্ধতিতে এই অতিরিক্ত ভার সামলানো সবচেয়ে সহজ। এর সঙ্গে browser-based document editing যোগ করলে প্রয়োজনীয় resource আরও বাড়ে। 2 থেকে 4 GB-এর box-এর ক্ষেত্রে OnlyOffice এবং Collabora-এর comparison-এ এই বিষয়টি বিশদে দেখানো হয়েছে।
VPS-এ Syncthing ইনস্টল করুন
Ubuntu-এর সঙ্গে একটি syncthing package থাকে, কিন্তু সেটি upstream release-এর তুলনায় অনেক পুরোনো। প্রকল্পটির নিজস্ব repository ব্যবহার করুন।
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing
syncthing --versionsyncthing --version-এর output-এ syncthing v2 দিয়ে শুরু হওয়া একটি line দেখা উচিত। সেখানে v1 থাকলে apt এখনও distribution package-কে অগ্রাধিকার দিচ্ছে। Upstream repository-কে তার উপরে pin করে আবার install করুন।
printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.prefএটি একটি সাধারণ user account-এর অধীনে system service হিসেবে চালান, যাতে কেউ login না করলেও boot-এর সময় service শুরু হয়।
sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.servicesystemctl status-এর output হওয়া উচিত active (running)। Configuration এবং index file /home/youruser/.local/state/syncthing-এ তৈরি হবে, আর configuration file হলো config.xml। Syncthing 1.27-এর আগে তৈরি করা installation-গুলোতে এগুলো ~/.config/syncthing-এ থাকে। তাই machine-গুলোর মধ্যে কিছু copy করার আগে উভয় path পরীক্ষা করুন।
এরপর port খুলুন। Syncthing sync protocol-এর জন্য 22000/TCP, QUIC transport-এর জন্য 22000/UDP এবং local discovery-এর জন্য 21027/UDP ব্যবহার করে। Discovery broadcast এবং multicast ব্যবহার করে, যা Internet পার হতে পারে না। তাই VPS-এ শুধু প্রথম দুটি port প্রয়োজন।
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw statusufw status-এ উভয় rule দেখা উচিত। এটি Status: inactive print করলে ufw কোনো traffic filter করছে না, এবং শুধু আপনার provider-এর network firewall কার্যকর রয়েছে। সেই panel-ও পরীক্ষা করুন, কারণ অধিকাংশ host-এ এটি আলাদা control হিসেবে থাকে। Service চলমান থাকা অবস্থায় কোনো remote device Disconnected-এ আটকে থাকলে সাধারণত এই দুটি firewall-এর একটির rule এখনও বন্ধ থাকে।
Syncthing GUI প্রকাশ না করেই অ্যাক্সেস করুন
ওয়েব GUI (graphical user interface) ডিফল্টভাবে 127.0.0.1:8384-এ listening করে, তাই এটি শুধু সার্ভার থেকেই উত্তর দেয়। এই ডিফল্ট আচরণটি সুরক্ষামূলক, কারণ GUI-তে একটি API (application programming interface) key থাকে, যা সার্ভারের প্রতিটি folder path পরিবর্তন করতে পারে।
প্রথম পদক্ষেপ হিসেবে এটিকে সবার জন্য খুলবেন না। কোনো network address-এ bind করলে কী সুবিধা পাওয়া যায়, সে বিষয়ে documentation স্পষ্ট: "আপনার কম্পিউটারের LAN address নির্দিষ্ট করলেও access শুধু আপনার local network-এর device-গুলোর মধ্যে সীমাবদ্ধ থাকবে না!" এর বদলে আপনার laptop থেকে SSH-এর মাধ্যমে port forward করুন।
ssh -L 8384:127.0.0.1:8384 youruser@your.vps.exampleSSH session চালু থাকা অবস্থায় আপনার local browser-এ http://127.0.0.1:8384 খুলুন। SSH session শেষ হলে tunnel-টিও বন্ধ হয়ে যায়, তাই পরে কোনো কিছু listening অবস্থায় থাকে না।
যদি GUI-তে সরাসরি পৌঁছানো আবশ্যক হয়, আগে credentials সেট করুন। সার্ভারে কোনো browser নেই, তাই command line থেকে এটি করুন।
sudo systemctl stop syncthing@youruser.service
sudo -H -u youruser syncthing generate --gui-user=admin --gui-password=-
sudo systemctl start syncthing@youruser.service-H গুরুত্বপূর্ণ, কারণ এটি না থাকলে sudo root-এর home directory ব্যবহার করে এবং আপনি ভুল config.xml সম্পাদনা করবেন। Password value হিসেবে একটি single dash দিলে syncthing generate standard input থেকে password পড়ে। এতে password shell history-তে থাকে না এবং file-এ লেখার আগে value-টি hash করা হয়। Login করতে পারার পর GUI settings-এ HTTPS চালু করুন।
Syncthing কীভাবে আপনার ভুল ছড়িয়ে দেয়
Syncthing FAQ-তেই backup সম্পর্কে উত্তর দেওয়া হয়েছে: "Syncthing ভালো backup application নয়, কারণ আপনার ফাইলের সব পরিবর্তন (পরিবর্তন, মুছে ফেলা ইত্যাদি) আপনার সব device-এ ছড়িয়ে দেওয়া হবে।"
আপনার laptop-এ ভুল করে একটি folder মুছে ফেললে Syncthing পরিকল্পনা অনুযায়ী কাজ করে। এটি কয়েক সেকেন্ডের মধ্যে সব জায়গা থেকে ওই folder মুছে দেয়। Sync-এর অর্থ হলো সম্মতি, আর সেই সম্মতির মধ্যে কোনো file আর নেই—এতে সম্মত হওয়াও অন্তর্ভুক্ত।
File versioning হলো এর প্রতিকার, এবং আপনি চালু না করলে এটি বন্ধ থাকে। Documentation-এ বলা আছে, versioning-এর default হলো "'no file versioning'—অর্থাৎ file-এর পুরোনো copy রাখা হয় না।" প্রতিটি folder-এর জন্য 4টি strategy আছে। Trash Can কোনো remote change-এর কারণে মুছে ফেলা বা প্রতিস্থাপিত প্রতিটি file-এর 1টি copy রাখে। Simple প্রতিটি file-এর জন্য নির্দিষ্ট সংখ্যক পুরোনো version রাখে। Staggered পুরোনো হওয়ার সঙ্গে সঙ্গে history কমিয়ে রাখে: 1 দিনের জন্য hourly copy, 1 মাসের জন্য daily copy ইত্যাদি। External প্রতিটি সিদ্ধান্ত আপনার লেখা command-এর ওপর ছেড়ে দেয়। পুরোনো copy shared folder-এর ভেতরের একটি .stversions directory-তে যায়।
VPS peer-এ Staggered সেট করুন এবং laptop-গুলোতে versioning বন্ধ রাখুন। তাহলে সবসময় চালু থাকা peer-টি history সংরক্ষণ করবে, আর laptop-গুলোতে অতিরিক্ত data জমবে না।
Nextcloud এই কাজটি ভালোভাবে সামলায়, কিন্তু এটিও backup নয়। মুছে ফেলা file trash bin-এ যায় এবং Versions app edit-এর ইতিহাস রাখে, তবে disk ভরে গেলে দুটিই স্বয়ংক্রিয়ভাবে ছাঁটাই হয়। আপনার laptop-এর কোনো process যদি file encrypt করে, Syncthing সেই encrypted version-গুলো sync করে পাঠাবে, আর ভালো copy-গুলো নিজস্ব schedule অনুযায়ী স্বয়ংক্রিয়ভাবে মুছে যাবে।
দুটি tool-এর ক্ষেত্রেই এর নিচে একটি প্রকৃত backup প্রয়োজন: আলাদা program দিয়ে snapshot নিতে হবে, এমন জায়গায় লিখতে হবে যেখানে sync client পৌঁছাতে পারে না, এবং অন্তত 1বার restore করতে হবে, যাতে নিশ্চিত হওয়া যায় যে restore কাজ করে। restic এবং BorgBackup-এর তুলনা-এ data directory-এর জন্য কোনটি ব্যবহার করবেন তা ব্যাখ্যা করা হয়েছে।
দুই টুলের দ্বন্দ্বের পার্থক্য
দুই পক্ষ sync-এর মধ্যবর্তী সময়ে একই ফাইলে পরিবর্তন করলে উভয় টুলই একটি conflict file তৈরি করে। পার্থক্য হলো, এটি কে দেখতে পায়।
Syncthing পরাজিত কপিটির নাম পরিবর্তন করে <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext> রাখে। যে কপিটির modification time পুরোনো, সেটি পরাজিত হয়। সময় একই হলে device ID-এর প্রথম 63 bits-এ বড় মান থাকা device-টি পরাজিত হয়। নিয়মটি ইচ্ছাধীন হলেও সব peer-এ একই ফল দেয়। এরপর যে বিষয়টি অনেকেই প্রত্যাশা করেন না তা হলো: এই ফাইলগুলো “তৈরি হওয়ার পর normal file হিসেবে গণ্য হয়, তাই device-গুলোর মধ্যে propagate হয়”। প্রতিটি peer conflict copy পায়। এটি সরিয়ে ফেললে একটি deletion sync হয়ে যায়, কিন্তু তার আগে সব মেশিনে ফাইলটি দেখতে পাবেন।
Nextcloud desktop client <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext> লেখে, যেমন mydata (conflicted copy 2018-04-10 093612).txt, এবং default হিসেবে ওই ফাইল upload করে না। Client manual-এ এর কারণ ব্যাখ্যা করা হয়েছে: পরিবর্তনকারী ব্যক্তিই conflict সমাধানের জন্য সবচেয়ে উপযুক্ত, আর অন্য ব্যবহারকারীদের conflict দেখালে শুধু বিভ্রান্তি তৈরি হয়। বিপরীত আচরণ চাইলে client-এর environment-এ OWNCLOUD_UPLOAD_CONFLICT_FILES=1 সেট করুন।
তাই Syncthing-এর conflict পুরো cluster-এর ঘটনা, আর Nextcloud-এর conflict একটি desktop-এর মধ্যেই সীমাবদ্ধ থাকে।
সার্ভারের জন্য Folder type Syncthing-কে আরও নিরাপদ করে
Syncthing-এ তিন ধরনের folder আছে। VPS-এ সঠিক ধরন নির্বাচন করলে অনেক ধরনের দুর্ঘটনা এড়ানো যায়।
- Send & Receive হলো default। পরিবর্তন উভয় দিকেই প্রয়োগ হয়।
- Send Only cluster থেকে পাঠানো কোনো পরিবর্তন প্রয়োগ করে না। কোনো device-এর কাজ শুধু publish করা হলে এটি ব্যবহার করুন। এটি sync-এর বাইরে চলে গেলে GUI-তে লাল "Override Changes" button দেখা যায়। এটি local state সবার কাছে পাঠায়।
- Receive Only cluster থেকে পরিবর্তন প্রয়োগ করে, কিন্তু local edit কখনো ফিরিয়ে পাঠায় না। archive হিসেবে ব্যবহৃত VPS-এ এটি ব্যবহার করুন। সেখানে local edit হলে এর পরিবর্তে লাল "Revert Local Changes" button দেখা যায়।
VPS-এ Staggered versioning চালু থাকা একটি Receive Only folder version-সহ mirror তৈরি করে। laptop-এ কোনো deletion হলেও তা প্রয়োগ হয়, কারণ deletion-ও cluster-এর বৈধ পরিবর্তন। তবে পুরোনো copy মুছে না গিয়ে .stversions-এ চলে যায়।
কোনটি বেছে নেবেন
নিচের 7টি সারিতে মানুষ আসলে কেন এই প্রশ্নটি করেন, তার কারণগুলো দেওয়া আছে।
The data behind this chart
[
{
"label": "Keep two of my own laptops in sync",
"pick": "Syncthing",
"notes": "No accounts to manage. The VPS is the peer that is always awake."
},
{
"label": "Send a download link to a client",
"pick": "Nextcloud",
"notes": "Syncthing has no public link sharing at all."
},
{
"label": "Open a file from a borrowed browser",
"pick": "Nextcloud",
"notes": "The Syncthing GUI shows sync state, never file contents."
},
{
"label": "Sync 200 GB between machines I own",
"pick": "Syncthing",
"notes": "Peers transfer directly. The VPS copy is optional."
},
{
"label": "Phone photo upload with a store app",
"pick": "Nextcloud",
"notes": "The official Syncthing Android app ended in December 2024."
},
{
"label": "Calendar and contacts alongside files",
"pick": "Nextcloud",
"notes": "Syncthing syncs files. That is the entire feature set."
},
{
"label": "1 GB VPS with nothing else to spare",
"pick": "Syncthing",
"notes": "One Go binary against PHP plus a database plus a web server."
}
]প্রথম সারিটি দেখুন। নিজের দুটি laptop-এর মধ্যে ডেটা synchronized রাখা Syncthing-এর দিকে নির্দেশ করে। এই ক্ষেত্রেই VPS এমন peer হিসেবে কার্যকর হয়, যা কখনও sleep করে না। Browser, link বা অন্য কোনো ব্যক্তিকে যুক্ত করে এমন প্রতিটি সারি বিপরীত সিদ্ধান্তের দিকে নির্দেশ করে।
Nextcloud বারবার উপযুক্ত মনে হলেও এর footprint নিয়ে উদ্বেগ থাকলে, Seafile এবং Nextcloud-এর তুলনা পরবর্তী পাঠ্য হিসেবে দেখুন। কারণ Seafile ভিন্ন sync engine ব্যবহার করলেও server model বজায় রাখে।
একটি VPS-এ দুটিই চালানো
এগুলো পরস্পর-বিরোধী নয়। নিজের মেশিনগুলোর মধ্যে ফাইল স্থানান্তরের জন্য Syncthing এবং sharing ও calendar পরিচালনার জন্য Nextcloud ব্যবহার করা একটি প্রচলিত ব্যবস্থা।
এভাবে করলে একটি নিয়ম মেনে চলুন: Syncthing কখনো Nextcloud-এর data directory-তে point করাবেন না। Nextcloud তার database-এ প্রতিটি file-এর হিসাব রাখে। তাই বাইরে থেকে disk-এ আসা file database update না হওয়া পর্যন্ত web interface-এ দেখা যাবে না। Nextcloud installation directory থেকে:
sudo -u www-data php occ files:scan --allএই command যে সংখ্যক file ও folder scan করেছে, তা দেখায়। এটি নির্দিষ্ট সময় পরপর চালানো একটি workaround, উপযুক্ত নকশা নয়। প্রতিটি tool-এর জন্য আলাদা directory ব্যবহার করুন। এই server-এ আদৌ কী রাখা উচিত তা নিয়ে এখনও সিদ্ধান্ত না নিয়ে থাকলে, আগে sync tool বেছে নেওয়ার চেয়ে 2026 সালে কী self-host করবেন—এই guide দিয়ে শুরু করা ভালো।
FAQ
Syncthing কি Dropbox-এর বিকল্প হতে পারে?
আপনার নিজের ডিভাইসগুলোর মধ্যে sync বজায় রাখার অংশটির জন্যই কেবল পারে। Syncthing-এ public share link বা user account নেই। এর web interface কখনও file content দেখায় না, কারণ browser-এর অনুরোধের জন্য কোনো কেন্দ্রীয় copy নেই। 2024 সালের December release-এর পর official Android app বন্ধ হয়ে যায় এবং Play Store থেকে সরিয়ে নেওয়া হয়। তাই এখন phone support একটি community fork-এর ওপর নির্ভর করে। কাউকে কোনো link পাঠাতে হলে আপনার একটি server দরকার। সেক্ষেত্রে Nextcloud বা অনুরূপ কোনো ব্যবস্থা ব্যবহার করতে হবে।
Syncthing কি backup?
না। প্রকল্পটিও সরাসরি এ কথা বলে। Deletion এবং modification প্রতিটি device-এ propagate হয়। তাই ভুল করে কোনো file delete করলে কয়েক সেকেন্ডের মধ্যেই সেটি সর্বত্র মুছে যাবে। প্রতি folder-এ file versioning চালু করলে, বিশেষ করে সবসময় চালু থাকা peer-এ Staggered ব্যবহার করলে, .stversions directory-এর মাধ্যমে recovery window পাওয়া যায়। তবে এটি আলাদা tool দিয়ে আলাদা storage-এ নেওয়া snapshot-এর বিকল্প নয়।
Syncthing web GUI-তে আমি আমার file দেখতে পাই না কেন?
কারণ GUI হলো sync state নিয়ন্ত্রণের panel, file browser নয়। এতে folder, device, transfer progress এবং conflict count দেখা যায়। এটি কখনও file content তালিকাভুক্ত বা খোলে না। এর কারণ peer-to-peer design। আপনার file আপনার device-গুলোতেই থাকে, আর VPS-এর GUI শুধু file স্থানান্তরের process পরিচালনা করে।
VPS-এ Syncthing-এর কোন port খোলা রাখতে হবে?
Sync protocol-এর জন্য 22000/TCP এবং QUIC transport-এর জন্য 22000/UDP প্রয়োজন। Port 21027/UDP broadcast ও multicast ব্যবহার করে local discovery চালায়। এগুলো Internet-এর মাধ্যমে যায় না, তাই public server-এ portটি বন্ধ রাখুন। GUI-এর 8384 port-টি 127.0.0.1-এ bind করে রাখুন এবং SSH tunnel-এর মাধ্যমে এতে প্রবেশ করুন। ufw-এর পাশাপাশি provider-এর network firewall-ও পরীক্ষা করুন, কারণ এগুলো পৃথক নিয়ন্ত্রণ ব্যবস্থা।
একই VPS-এ Syncthing এবং Nextcloud চালানো যাবে কি?
হ্যাঁ। 2 GB RAM বা তার বেশি থাকা server-এ এটি যুক্তিসংগত। তাদের directory আলাদা রাখুন। Nextcloud তার database-এ file index করে। তাই Syncthing Nextcloud-এর storage-এ কোনো file লিখলেও occ files:scan চালু না হওয়া পর্যন্ত web interface-এ সেটি দেখা যাবে না। একই directory-তে দুটি tool লিখলে এমন conflict file-ও তৈরি হয়, যা কোনো tool-ই প্রত্যাশা করে না।