VPS-এ ফাইল sync-এর জন্য Syncthing নাকি Nextcloud?
Syncthing peer-to-peer, তাই VPS-এ কোনো server copy থাকে না। Nextcloud account ও share link দেয়। আপনার VPS-এর জন্য কোনটি মানানসই এবং কেন কোনোটিই backup নয়, তা জানুন।
Syncthing বনাম Nextcloud: যে পার্থক্যটি সিদ্ধান্ত নির্ধারণ করে
Syncthing বনাম Nextcloud-এর মূল পার্থক্য একটি কাঠামোগত বিষয়ে, এবং বাকি সবকিছু সেখান থেকেই নির্ধারিত হয়। Syncthing peer-to-peer। প্রতিটি ডিভাইসে পুরো folder থাকে, এবং কোনো একটি copy-কে authoritative ধরা হয় না। Nextcloud একটি server। একটি machine ফাইলগুলো সংরক্ষণ করে, user account-গুলো সেগুলোর সামনে access control হিসেবে কাজ করে, এবং client-গুলো সেখান থেকে copy ডাউনলোড করে।
এই কারণেই Syncthing-এ share link বা আপনার document দেখার web view নেই। পরিবেশন করার মতো কোনো কেন্দ্রীয় copy নেই, তাই browser-এর অনুরোধ জানানোর মতোও কিছু নেই। Nextcloud দুটিই দেয়। এ জন্য একটি PHP runtime, একটি database server, একটি web server এবং TLS (transport layer security)-এর জন্য একটি reverse proxy প্রয়োজন।
জড়িত প্রতিটি ডিভাইস আপনার নিজের হলে Syncthing বেছে নিন। কোনো browser বা অন্য ব্যক্তির ফাইলগুলোতে access পাওয়া প্রয়োজন হলে Nextcloud বেছে নিন।
প্রতিটি নকশায় VPS আসলে কী কাজ করছে
Nextcloud চালানো একটি VPS আপনার ডেটার মূল সংরক্ষণস্থল। আপনার laptop থেকে স্থানীয় কপি মুছে ফেললেও ফাইলটি server-এ থাকে, কারণ server-ই শুরু থেকে মূল কপি ধারণ করছিল।
Syncthing চালানো একটি VPS ভিন্ন কাজ করে: এটি সব সময় চালু থাকা একটি peer। একই সময়ে online থাকা দুটি device-এর মধ্যে Syncthing সরাসরি ডেটা স্থানান্তর করে। তাই দুটি laptop কখনো একই সময়ে চালু না থাকলে, যতক্ষণই অপেক্ষা করুন না কেন, তারা কখনো sync করতে পারবে না। ঘুমায় না এমন একটি VPS-এ তৃতীয় peer যোগ করলে সমস্যাটি দূর হয়। 09:00-এ laptop A ডেটা পাঠায়, 22:00-এ laptop B ডেটা গ্রহণ করে, আর মাঝের সময়ে VPS folder-টি ধরে রাখে।
এটি সত্যিই কার্যকর একটি ভূমিকা, এবং "Dropbox replacement"-এর চেয়ে এটি ছোট দাবি। Syncthing কখনো client-কে পাঠানোর জন্য কোনো link দেবে না। আপনার প্রয়োজন যদি সেটিই হয়, তাহলে এখানে থামুন এবং self-hosted Dropbox বিকল্পগুলোর সংক্ষিপ্ত পর্যালোচনা পড়ুন।
ছোট VPS-এ প্রতিটির খরচ
Syncthing একটি একক Go binary। এটি একটি socket-এ listening করে, 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 সমর্থন করে; এর সঙ্গে 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 ভুল পছন্দ নয়। এর অর্থ হলো এটি বড় ধরনের দায়িত্ব, কারণ একটি component-এর বদলে চারটি component নিয়মিত current রাখতে হবে। Docker, TLS এবং backup নিয়ে VPS-এ Nextcloud-এর guide-এর container পদ্ধতিই এই অতিরিক্ত resource requirement সামলানোর সবচেয়ে কম জটিল উপায়।
VPS-এ Syncthing ইনস্টল করুন
Ubuntu একটি syncthing প্যাকেজ সরবরাহ করে, কিন্তু সেটি upstream সংস্করণের তুলনায় অনেক পুরোনো। প্রকল্পটির নিজস্ব 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-এর আউটপুটে syncthing v2 দিয়ে শুরু হওয়া একটি লাইন দেখা উচিত। সেখানে v1 থাকলে apt এখনও distribution package-কে অগ্রাধিকার দিচ্ছে। Upstream repository-কে তার উপরে pin করে আবার ইনস্টল করুন।
printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.prefএটি একজন সাধারণ user account-এর অধীনে system service হিসেবে চালান, যাতে কোনো ব্যবহারকারী লগ ইন না থাকলেও boot-এর সময় service শুরু হয়।
sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.servicesystemctl status-এর আউটপুটে active (running) দেখা উচিত। Configuration এবং index file-গুলো /home/youruser/.local/state/syncthing-এ তৈরি হয়, আর config file হলো config.xml। Syncthing 1.27-এর আগে তৈরি করা installation-গুলোতে এগুলো ~/.config/syncthing-এ থাকে। তাই মেশিনগুলোর মধ্যে কিছু 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 দেখা যায়, তাহলে ufw কোনো traffic filter করছে না এবং শুধু provider-এর network firewall কার্যকর আছে। সেই panel-ও পরীক্ষা করুন, কারণ অধিকাংশ host-এ এটি আলাদা একটি নিয়ন্ত্রণব্যবস্থা। Service চালু থাকা অবস্থায় কোনো remote device Disconnected-এ আটকে থাকলে সাধারণত এই দুই firewall-এর একটির rule এখনও বন্ধ থাকে।
SSH দিয়ে Syncthing GUI ব্যবহার করুন, এটি প্রকাশ না করে
ওয়েব GUI (graphical user interface) ডিফল্টভাবে 127.0.0.1:8384-এ listening করে। তাই এটি শুধু সার্ভার থেকেই অনুরোধের উত্তর দেয়। এই ডিফল্ট আচরণ নিরাপত্তামূলক, কারণ GUI-তে একটি API (application programming interface) key থাকে। এই key ব্যবহার করে সিস্টেমের প্রতিটি folder path পরিবর্তন করা যায়।
প্রথম ধাপে এটিকে সবার জন্য উন্মুক্ত করবেন না। Network address-এ bind করলে কী সুবিধা পাওয়া যায়, documentation তা স্পষ্টভাবে জানায়: "আপনার computer-এর 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-ও বন্ধ হয়ে যায়। তাই পরে কোনো service listening অবস্থায় থাকে না।
GUI সরাসরি accessযোগ্য করা প্রয়োজন হলে আগে 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 is not a great backup application because all changes to your files (modifications, deletions, etc.) will be propagated to all your devices."
আপনার laptop-এ ভুল করে একটি folder মুছে ফেললে Syncthing পরিকল্পনা অনুযায়ী কাজ করে। কয়েক সেকেন্ডের মধ্যে এটি সব জায়গা থেকে সেই folder মুছে দেয়। Sync-এর অর্থ হলো সামঞ্জস্য, আর এর মধ্যে কোনো file আর নেই—এ বিষয়ে সামঞ্জস্যও অন্তর্ভুক্ত।
এর প্রতিকার হলো file versioning; আপনি এটি চালু না করলে এটি বন্ধই থাকে। Documentation-এ বলা আছে, versioning-এর "defaults to 'no file versioning', i.e. no old copies of files are kept." প্রতি folder-এর জন্য 4টি strategy রয়েছে। Trash Can remote change-এর কারণে মুছে ফেলা বা প্রতিস্থাপিত প্রতিটি file-এর 1টি করে copy রাখে। Simple প্রতিটি file-এর পুরোনো version-এর নির্দিষ্ট সংখ্যক copy রাখে। Staggered version পুরোনো হওয়ার সঙ্গে সঙ্গে history সংক্ষিপ্ত করে; 1 দিন প্রতি ঘণ্টার copy, 1 মাস প্রতি দিনের copy এবং এভাবে আরও দীর্ঘ সময়ের copy রাখে। External প্রতিটি সিদ্ধান্ত আপনার লেখা একটি command-এর ওপর ছেড়ে দেয়। পুরোনো copy-গুলো shared folder-এর ভিতরের একটি .stversions directory-তে রাখা হয়।
VPS peer-এ Staggered সেট করুন এবং laptop-গুলোতে versioning বন্ধ রাখুন। সব সময় চালু থাকা peer তখন history সংরক্ষণ করবে, আর laptop-গুলোতে অতিরিক্ত data জমবে না।
Nextcloud এই কাজটি আরও ভালোভাবে সামলায়, কিন্তু এটিও backup নয়। মুছে ফেলা file trash bin-এ যায় এবং Versions app সম্পাদনাগুলো সংরক্ষণ করে; তবে disk ভরে উঠলে উভয়টিই স্বয়ংক্রিয়ভাবে ছাঁটাই করা হয়। আপনার laptop-এর কোনো process file encrypt করলে Syncthing সেই encrypted version-গুলোও sync করে দেবে, আর ভালো copy-গুলো নিজস্ব সময়সূচি অনুযায়ী স্বয়ংক্রিয়ভাবে মুছে যেতে থাকবে।
যে tool-ই ব্যবহার করুন, এর নিচে একটি প্রকৃত backup থাকা দরকার: আলাদা কোনো program দিয়ে snapshot নিতে হবে, সেগুলো এমন জায়গায় লিখতে হবে যেখানে sync client পৌঁছাতে পারে না, এবং অন্তত 1 বার restore করতে হবে, যাতে নিশ্চিত হওয়া যায় যে restore কাজ করছে। restic এবং BorgBackup-এর তুলনা-এ data directory-এর জন্য কোনটি ব্যবহার করবেন তা ব্যাখ্যা করা হয়েছে।
দুটি টুলের মধ্যে conflict কীভাবে আলাদা
দুটি sync-এর মধ্যবর্তী সময়ে দুই পক্ষ একই ফাইলে পরিবর্তন করলে উভয় টুলই একটি conflict file তৈরি করে। পার্থক্য হলো, এটি কে দেখতে পায়।
Syncthing হেরে যাওয়া copy-টির নাম পরিবর্তন করে <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext> রাখে। যে copy-টির modification time বেশি পুরোনো, সেটিই হারে। সময় একই হলে device ID-এর প্রথম 63 bits-এ যার মান বেশি, সেই device হারে। নিয়মটি ইচ্ছাকৃতভাবে arbitrary, তবে প্রতিটি peer-এ একই ফল পাওয়া যায়। এরপর আসে এমন একটি বিষয়, যার জন্য অনেকেই প্রস্তুত থাকেন না: এই file-গুলো “তৈরি হওয়ার পরে normal file হিসেবে বিবেচিত হয় এবং device-গুলোর মধ্যে propagate হয়”। প্রতিটি peer conflict copy-টি পায়। এটি পরিষ্কার করতে একটি deletion করলেই তা sync হয়ে যায়, তবে তার আগে আপনার সব machine-এ file-টি দেখতে পাবেন।
Nextcloud desktop client <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext> লেখে, যেমন mydata (conflicted copy 2018-04-10 093612).txt, এবং default হিসেবে file-টি upload করে না। Client manual-এ এর কারণ ব্যাখ্যা করা হয়েছে: পরিবর্তনটি যিনি করেছেন, conflict সমাধানের জন্য তিনিই সবচেয়ে উপযুক্ত ব্যক্তি; অন্য users-কে conflict দেখালে শুধু confusion তৈরি হয়। বিপরীত আচরণ চাইলে client-এর environment-এ OWNCLOUD_UPLOAD_CONFLICT_FILES=1 সেট করুন।
তাই Syncthing-এর conflict পুরো cluster-জুড়ে ঘটে, আর Nextcloud-এর conflict একটি desktop-এই সীমাবদ্ধ থাকে।
ফোল্ডারের ধরন সার্ভারে 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 change। তবে আগের 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-এর মধ্যে data sync রাখার প্রয়োজন Syncthing-এর দিকে ইঙ্গিত করে। এই ক্ষেত্রেই VPS এমন peer হিসেবে কার্যকর হয়, যা কখনো ঘুমায় না। Browser, link বা অন্য কোনো ব্যক্তিকে নিয়ে থাকা প্রতিটি সারি বিপরীত সিদ্ধান্তের দিকে ইঙ্গিত করে।
Nextcloud বারবার এগিয়ে থাকলেও এর resource footprint নিয়ে উদ্বেগ থাকলে Seafile এবং Nextcloud-এর তুলনা পরবর্তী পাঠ হিসেবে দেখুন। কারণ Seafile server model বজায় রাখে, তবে এর নিচে ভিন্ন sync engine ব্যবহার করে।
একই VPS-এ উভয়টি চালানো
এগুলো পরস্পর-বিরোধী নয়। নিজের মেশিনগুলোর মধ্যে ফাইল স্থানান্তরের জন্য Syncthing এবং sharing ও calendar পরিচালনার জন্য Nextcloud ব্যবহার করা একটি প্রচলিত ব্যবস্থা।
আপনি এটি করলে একটি নিয়ম মেনে চলুন: Syncthing কখনো Nextcloud-এর data directory-তে নির্দেশ করবেন না। Nextcloud তার database-এ প্রতিটি file-এর তথ্য সংরক্ষণ করে। তাই বাইরে থেকে disk-এ আসা file database update না হওয়া পর্যন্ত web interface-এ দেখা যায় না। Nextcloud installation directory থেকে:
sudo -u www-data php occ files:scan --allএই command-টি scan করা file ও folder-এর সংখ্যা দেখায়। নির্দিষ্ট সময় পরপর এটি চালানো একটি workaround, সঠিক design নয়। প্রতিটি tool-এর জন্য আলাদা directory ব্যবহার করুন। কোন data আদৌ এই box-এ রাখা উচিত তা নিয়ে এখনও সিদ্ধান্ত না নিয়ে থাকলে, আগে sync tool বেছে নেওয়ার চেয়ে 2026 সালে কী self-host করবেন সেই guide দিয়ে শুরু করা ভালো।
FAQ
Syncthing কি Dropbox-এর বিকল্প হতে পারে?
শুধু আপনার নিজের ডিভাইসগুলোর মধ্যে synchronization বজায় রাখার ক্ষেত্রে। Syncthing-এ public share link বা user account নেই। এর web interface কখনো file content দেখায় না, কারণ browser-এর অনুরোধ করার মতো কোনো কেন্দ্রীয় copy নেই। December 2024 release-এর পর official Android app বন্ধ করে দেওয়া হয়েছে এবং এটি Play Store-এ আর নেই। তাই এখন phone support একটি community fork-এর ওপর নির্ভর করে। কাউকে একটি link পাঠাতে হলে আপনার একটি server দরকার, অর্থাৎ Nextcloud বা অনুরূপ কিছু।
Syncthing কি backup?
না, এবং project-ও সরাসরি তা জানায়। Deletion ও modification প্রতিটি device-এ propagate হয়। তাই ভুল করে কোনো file মুছে ফেললে কয়েক সেকেন্ডের মধ্যেই সেটি সব জায়গা থেকে মুছে যায়। প্রতি 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-এর তালিকা দেখায় না বা 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-এ 127.0.0.1-এ bind করে রাখুন এবং SSH tunnel-এর মাধ্যমে এতে প্রবেশ করুন। আপনার provider-এর network firewall এবং ufw—দুটিই পরীক্ষা করুন, কারণ এগুলো পৃথক নিয়ন্ত্রণব্যবস্থা।
একই 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-ই প্রত্যাশা করে না।