مقایسه Syncthing و Nextcloud برای همگامسازی فایل روی VPS
تفاوت اصلی Syncthing و Nextcloud در معماری همتابههمتا در مقابل سرور مرکزی است. این مطلب بررسی میکند کدام ابزار برای VPS شما مناسب است و چرا هیچکدام جایگزین بکآپ نیستند.
تفاوت Syncthing و Nextcloud: عاملی که تصمیمگیری را تعیین میکند
تفاوت Syncthing و Nextcloud به یک تفاوت ساختاری برمیگردد و تمام تفاوتهای دیگر از همینجا ناشی میشوند. Syncthing یک سیستم همتابههمتا (peer-to-peer) است. هر دستگاه کل پوشه را نگه میدارد و هیچ نسخهای به عنوان نسخه مرجع و اصلی شناخته نمیشود. Nextcloud یک سرور است. یک ماشین فایلها را میزبانی میکند، حسابهای کاربری در مقابل آنها قرار میگیرند و کلاینتها نسخههایی از فایلها را دریافت میکنند.
به همین دلیل است که Syncthing قابلیت اشتراکگذاری از طریق لینک یا مشاهده اسناد در مرورگر را ندارد. هیچ نسخه مرکزی برای سرویسدهی وجود ندارد، بنابراین چیزی برای درخواست کردن توسط مرورگر موجود نیست. Nextcloud هر دو قابلیت را ارائه میدهد و برای انجام این کار به یک runtime زبان PHP، یک سرور پایگاه داده، یک وبسرور و یک reverse proxy برای TLS (امنیت لایه انتقال) نیاز دارد.
اگر تمام دستگاههای درگیر متعلق به خودتان هستند، Syncthing را انتخاب کنید. اگر نیاز دارید که فایلها از طریق مرورگر یا توسط شخص دیگری قابل دسترسی باشند، Nextcloud را انتخاب کنید.
عملکرد واقعی VPS در هر طراحی
یک VPS که Nextcloud را اجرا میکند، میزبان دادههای شماست. اگر نسخه محلی روی لپتاپ خود را حذف کنید، فایل همچنان روی سرور باقی میماند، زیرا سرور همیشه نسخه اصلی بوده است.
یک VPS که Syncthing را اجرا میکند، وظیفه متفاوتی دارد: این سرور یک همتا (peer) است که همیشه روشن است. Syncthing دادهها را مستقیماً بین دو دستگاهی که همزمان آنلاین هستند منتقل میکند. بنابراین، دو لپتاپ که هرگز همزمان روشن نمیشوند، هر چقدر هم که صبر کنید، نمیتوانند با هم همگامسازی شوند. با افزودن یک همتای سوم روی یک VPS که هرگز به حالت خواب نمیرود، این مشکل برطرف میشود. لپتاپ A در ساعت 09:00 دادهها را ارسال میکند، لپتاپ B در ساعت 22:00 آنها را دریافت میکند و VPS در این فاصله پوشه را نگه میدارد.
این یک نقش واقعاً کاربردی است و ادعای کوچکتری نسبت به «جایگزین Dropbox» محسوب میشود. Syncthing هرگز به شما لینکی برای ارسال به مشتری نمیدهد. اگر نیاز شما این است، در اینجا متوقف شوید و به جای آن بررسی جایگزینهای خودمیزبان Dropbox را مطالعه کنید.
هزینه هر کدام روی یک VPS کوچک
برنامه Syncthing یک فایل باینری واحد به زبان Go است. این برنامه روی یک سوکت گوش میدهد، فهرستی از فایلهای شما را در یک پایگاه داده محلی نگه میدارد و کل پشته (stack) همین است. از نسخه 2.0 به بعد، این فهرست به جای LevelDB از SQLite استفاده میکند، بنابراین ارتقا از نسخه 1.x در اولین اجرا یک مهاجرت یکباره انجام میدهد. در مجموعههای بزرگ فایل، این مهاجرت ممکن است زمان زیادی ببرد. اجازه دهید کارش تمام شود. هیچ چیز دیگری نیاز به نصب ندارد و هیچ چیز دیگری نیاز به وصله (patch) ندارد.
برنامه Nextcloud به منابع بیشتری نیاز دارد. تا اوت 2026، نسخه 35 از Nextcloud از PHP 8.3 تا 8.5 به همراه MariaDB یا PostgreSQL در پسزمینه پشتیبانی میکند و توسط Apache 2.4 یا nginx با php-fpm سرویسدهی میشود. راهنمای مدیر سیستم «حداقل 512 مگابایت رم برای هر پردازش» را توصیه میکند و php-fpm چندین پردازش کاری (worker process) را همزمان اجرا میکند.
روی یک VPS با 1 گیگابایت رم، Syncthing بهراحتی اجرا میشود اما Nextcloud با محدودیت مواجه است. این به معنای اشتباه بودن انتخاب Nextcloud نیست. بلکه به معنای تعهد بیشتر است، چرا که باید چهار مؤلفه را بهجای یکی بهروز نگه دارید. استفاده از کانتینر در راهنمای Nextcloud روی VPS که Docker، TLS و پشتیبانگیری را پوشش میدهد، کمدردسرترین روش برای مدیریت این بار است. افزودن قابلیت ویرایش اسناد مبتنی بر مرورگر، این حداقل نیاز را باز هم بالاتر میبرد، که موضوعی است که مقایسه OnlyOffice و Collabora برای یک سرور با 2 تا 4 گیگابایت رم به آن میپردازد.
نصب Syncthing روی VPS
توزیع Ubuntu یک بسته syncthing ارائه میدهد، اما این نسخه فاصله زیادی با نسخه اصلی (upstream) دارد. از مخزن رسمی خود پروژه استفاده کنید.
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 --versionدستور syncthing --version باید خطی را چاپ کند که با syncthing v2 شروع میشود. وجود v1 در آنجا به این معنی است که apt همچنان بسته توزیع را ترجیح میدهد. مخزن اصلی را بالاتر از آن اولویتبندی (Pin) کنید و دوباره نصب را انجام دهید.
printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.prefآن را به عنوان یک سرویس سیستمی تحت یک حساب کاربری معمولی اجرا کنید تا در زمان بوت، بدون نیاز به ورود هیچ کاربری، شروع به کار کند.
sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.serviceدستور systemctl status باید active (running) را چاپ کند. فایلهای پیکربندی و ایندکس در /home/youruser/.local/state/syncthing قرار میگیرند و فایل تنظیمات config.xml است. نصبهایی که پیش از نسخه 1.27 انجام شدهاند، این فایلها را در ~/.config/syncthing نگه میدارند؛ بنابراین پیش از کپی کردن هر چیزی بین ماشینها، هر دو مسیر را بررسی کنید.
سپس پورتها را باز کنید. Syncthing از پورت 22000/TCP برای پروتکل همگامسازی، 22000/UDP برای انتقال QUIC و 21027/UDP برای کشف محلی (local discovery) استفاده میکند. قابلیت Discovery از broadcast و multicast استفاده میکند که از اینترنت عبور نمیکنند، بنابراین روی یک VPS تنها به دو مورد اول نیاز دارید.
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw statusدستور ufw status باید هر دو قانون را لیست کند. اگر خروجی Status: inactive باشد، ufw هیچ چیزی را فیلتر نمیکند و فایروال شبکه ارائهدهنده شما تنها مانع موجود است. آن پنل را نیز بررسی کنید، زیرا در اکثر میزبانها یک کنترل مجزا محسوب میشود. اگر دستگاه راه دور در وضعیت Disconnected گیر کرده است در حالی که سرویس در حال اجراست، معمولاً به این معنی است که یکی از این دو فایروال همچنان بسته است.
دسترسی به رابط کاربری Syncthing بدون انتشار آن
رابط کاربری وب (GUI) بهصورت پیشفرض روی 127.0.0.1:8384 گوش میدهد، بنابراین فقط از داخل خود سرور پاسخ میدهد. این تنظیم پیشفرض جنبه حفاظتی دارد، زیرا رابط کاربری دارای یک کلید API است که میتواند تمام مسیرهای پوشهها را در سیستم بازنویسی کند.
به عنوان گام نخست، آن را برای دسترسی عمومی باز نکنید. مستندات بهصراحت بیان میکنند که اتصال به یک آدرس شبکه چه پیامدی دارد: «مشخص کردن آدرس LAN رایانه، دسترسی را فقط به دستگاههای شبکه محلی محدود نمیکند!» در عوض، پورت را از طریق SSH از لپتاپ خود فوروارد کنید.
ssh -L 8384:127.0.0.1:8384 youruser@your.vps.exampleهنگامی که نشست SSH برقرار است، http://127.0.0.1:8384 را در مرورگر محلی خود باز کنید. تونل با پایان نشست SSH بسته میشود، بنابراین پس از آن هیچ پورتی در حالت گوش دادن باقی نمیماند.
اگر واقعاً نیاز دارید که رابط کاربری مستقیماً در دسترس باشد، ابتدا اعتبارنامهها را تنظیم کنید. از آنجا که مرورگری روی سرور وجود ندارد، این کار را از طریق خط فرمان انجام دهید.
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 استفاده میکند و شما فایل config.xml اشتباهی را ویرایش خواهید کرد. استفاده از یک خط تیره به عنوان مقدار رمز عبور باعث میشود syncthing generate رمز عبور را از ورودی استاندارد (stdin) بخواند؛ این کار مانع از ذخیره شدن رمز در تاریخچه shell میشود و مقدار آن پیش از نوشته شدن در فایل، هش (hash) میگردد. پس از اینکه توانستید وارد شوید، HTTPS را در تنظیمات رابط کاربری فعال کنید.
چرا Syncthing اشتباهات شما را منتشر میکند
بخش FAQ در Syncthing خود به پرسش مربوط به پشتیبانگیری پاسخ میدهد: «Syncthing یک برنامه پشتیبانگیری عالی نیست، زیرا تمام تغییرات در فایلهای شما (اصلاحات، حذفها و غیره) به تمام دستگاههای شما منتقل میشود.»
اگر پوشهای را به اشتباه روی لپتاپ خود حذف کنید، Syncthing دقیقاً طبق طراحی عمل میکند. این برنامه در عرض چند ثانیه آن پوشه را در همه جا حذف میکند. همگامسازی به معنای توافق است و این توافق شامل پذیرش این موضوع است که یک فایل دیگر وجود ندارد.
نسخهبندی فایل (File versioning) راهکار کاهش این مشکل است، اما تا زمانی که آن را فعال نکنید، خاموش میماند. مستندات بیان میکنند که نسخهبندی «بهطور پیشفرض روی no file versioning تنظیم شده است، یعنی هیچ نسخه قدیمی از فایلها نگهداری نمیشود.» چهار استراتژی برای هر پوشه در دسترس است. Trash Can یک نسخه از هر فایلی که حذف یا با تغییرات از راه دور جایگزین شده باشد را نگه میدارد. Simple تعداد مشخصی از نسخههای قدیمی را برای هر فایل حفظ میکند. Staggered تاریخچه را با گذشت زمان فشرده میکند؛ به این صورت که نسخههای ساعتی را برای یک روز، نسخههای روزانه را برای یک ماه و به همین ترتیب نگه میدارد. External تصمیمگیری را به دستوری که شما مینویسید واگذار میکند. نسخههای قدیمی به دایرکتوری .stversions در داخل پوشه اشتراکگذاری شده منتقل میشوند.
استراتژی Staggered را روی peer سرور VPS تنظیم کنید و نسخهبندی را روی لپتاپها خاموش بگذارید. در این حالت، peer همیشه روشن تاریخچه را حمل میکند و لپتاپها سبک باقی میمانند.
Nextcloud این موضوع را بهتر مدیریت میکند، اما همچنان یک ابزار پشتیبانگیری نیست. فایلهای حذف شده به سطل زباله میروند و ویرایشها توسط برنامه Versions نگهداری میشوند، اما هر دو با پر شدن دیسک بهطور خودکار پاکسازی میشوند. فرآیندی روی لپتاپ شما که فایلها را رمزگذاری کند، آن نسخههای رمزگذاری شده را همگامسازی میکند و نسخههای سالم طبق زمانبندی خودشان حذف میشوند.
هر دو ابزار به یک پشتیبانگیری واقعی در لایه زیرین نیاز دارند: اسنپشاتهایی که توسط یک برنامه جداگانه گرفته شده، در جایی نوشته شده باشند که کلاینت همگامسازی به آن دسترسی نداشته باشد و حداقل یک بار بازیابی شده باشند تا مطمئن شوید فرآیند بازیابی کار میکند. مقایسه restic و BorgBackup بررسی میکند که کدامیک برای اشاره به دایرکتوری دادهها مناسبتر است.
تفاوت تداخلها در این دو ابزار
هر دو ابزار هنگام تغییر یک فایل توسط دو سمت در فاصله بین دو همگامسازی، یک فایل تداخل ایجاد میکنند. تفاوت در این است که چه کسی آن را مشاهده میکند.
Syncthing نسخه بازنده را به <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext> تغییر نام میدهد. نسخهای که زمان تغییر (modification time) قدیمیتری دارد، بازنده است. زمانی که زمانها یکسان باشند، دستگاهی که مقدار بزرگتری در 63 بیت اول شناسه دستگاه (device ID) خود دارد بازنده میشود؛ این انتخاب تصادفی است اما در تمام همتاها نتیجه یکسانی دارد. سپس بخشی میآید که کاربران برای آن آماده نیستند: این فایلها «پس از ایجاد، به عنوان فایلهای عادی در نظر گرفته میشوند، بنابراین بین دستگاهها منتشر میشوند». هر همتا نسخه تداخلی را دریافت میکند. پاکسازی آن با یک حذف انجام میشود که همگامسازی میشود، اما شما ابتدا آن را در تمام دستگاههای خود خواهید دید.
کلاینت دسکتاپ Nextcloud فایل <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext> را مینویسد، برای مثال mydata (conflicted copy 2018-04-10 093612).txt، و بهطور پیشفرض آن فایل را آپلود نمیکند. راهنمای کلاینت دلیل این کار را اینگونه بیان میکند: نویسنده تغییر، بهترین فرد برای حل آن است و نمایش تداخل به سایر کاربران فقط باعث سردرگمی میشود. اگر رفتار متفاوتی میخواهید، OWNCLOUD_UPLOAD_CONFLICT_FILES=1 را در محیط کلاینت تنظیم کنید.
بنابراین، تداخل در Syncthing یک رویداد در سطح کل کلاستر است، در حالی که تداخل در Nextcloud فقط روی یک دسکتاپ باقی میماند.
نوع پوشهها در Syncthing امنیت سرور را افزایش میدهد
نرمافزار Syncthing دارای سه نوع پوشه است و انتخاب نوع مناسب روی VPS، دستهای از خطاهای احتمالی را بهطور کامل حذف میکند.
- حالت Send & Receive پیشفرض است. تغییرات در هر دو جهت اعمال میشوند.
- حالت Send Only هر تغییری که از سمت کلاستر ارسال شود را نادیده میگیرد. از این حالت در دستگاههایی استفاده کنید که فقط باید داده منتشر کنند. زمانی که وضعیت دستگاه از حالت همگامسازی خارج شود، رابط کاربری (GUI) یک دکمه قرمز با عنوان "Override Changes" نمایش میدهد که وضعیت محلی را به سایر اعضای کلاستر تحمیل میکند.
- حالت Receive Only تغییرات را از کلاستر دریافت میکند و هرگز ویرایشهای محلی را به عقب بازنمیگرداند. از این حالت روی VPS که نقش آرشیو را دارد استفاده کنید. در این حالت، ویرایشهای محلی باعث ظاهر شدن دکمه قرمز "Revert Local Changes" میشوند.
یک پوشه با حالت Receive Only روی VPS که قابلیت Staggered versioning در آن فعال باشد، یک نسخه پشتیبان با قابلیت نگهداری نسخههای قدیمی (versioned mirror) به شما میدهد. حذف فایل در لپتاپ همچنان اعمال میشود، زیرا حذف یک تغییر معتبر در کلاستر محسوب میشود، اما نسخه قدیمی فایل بهجای ناپدید شدن، در مسیر .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."
}
]به ردیف اول نگاه کنید. همگامسازی دو لپتاپ شخصی، شما را به سمت Syncthing هدایت میکند؛ این همان موردی است که یک VPS با ایفای نقش به عنوان یک همتای همیشه روشن، ارزش خود را ثابت میکند. هر ردیفی که شامل مرورگر، لینک یا شخص دیگری باشد، به سمت گزینه دیگر اشاره دارد.
اگر Nextcloud همچنان گزینه برتر است اما حجم مصرفی آن شما را نگران میکند، مقایسه Seafile و Nextcloud مطلب بعدی است که باید بخوانید، زیرا Seafile نیز مدل سرور را حفظ میکند اما از موتور همگامسازی متفاوتی در زیرساخت خود بهره میبرد.
اجرای همزمان هر دو روی یک VPS
این دو ابزار با یکدیگر تداخلی ندارند. استفاده از Syncthing برای جابهجایی فایلها بین دستگاههای شخصی، در حالی که Nextcloud مدیریت اشتراکگذاری و تقویمها را بر عهده دارد، یک ترکیب رایج است.
اگر این کار را انجام میدهید، یک قانون را رعایت کنید: هرگز Syncthing را به دایرکتوری دادههای Nextcloud متصل نکنید. Nextcloud تمام فایلها را در پایگاه داده خود ثبت میکند؛ بنابراین فایلهایی که از خارج به دیسک اضافه میشوند، تا زمانی که پایگاه داده بهروزرسانی نشود، در رابط کاربری وب قابل مشاهده نخواهند بود. از داخل دایرکتوری نصب Nextcloud:
sudo -u www-data php occ files:scan --allاین دستور تعداد فایلها و پوشههای اسکنشده را چاپ میکند. اجرای این دستور با استفاده از تایمر، یک راهکار موقت است و نه یک طراحی اصولی. برای هر ابزار دایرکتوری جداگانهای در نظر بگیرید. اگر هنوز در حال تصمیمگیری برای انتخاب سرویسهای مورد نیاز خود هستید، راهنمای سرویسهای مناسب برای self-hosting در سال 2026 نقطه شروع بهتری نسبت به انتخاب ابزار همگامسازی است.
FAQ
آیا Syncthing میتواند جایگزین Dropbox شود؟
فقط برای بخشی که دستگاههای شخصی شما با هم همگام (sync) میمانند. Syncthing هیچ لینک اشتراکگذاری عمومی و هیچ حساب کاربری ندارد و رابط وب آن هرگز محتوای فایلها را نمایش نمیدهد، زیرا هیچ نسخهٔ مرکزی برای درخواست مرورگر وجود ندارد. اپلیکیشن رسمی اندروید پس از انتشار در دسامبر 2024 متوقف شد و از Play Store حذف شده است، بنابراین پشتیبانی از گوشی اکنون به یک fork جامعهمحور وابسته است. اگر نیاز دارید برای کسی لینکی بفرستید، به یک سرور نیاز دارید که به معنای استفاده از Nextcloud یا چیزی مشابه آن است.
آیا Syncthing یک ابزار پشتیبانگیری (backup) است؟
خیر، و خود پروژه مستقیماً به این موضوع اشاره کرده است. حذف و تغییرات فایلها به تمام دستگاهها منتقل میشود، بنابراین یک حذف تصادفی در عرض چند ثانیه در همه جا اعمال خواهد شد. فعالسازی قابلیت file versioning برای هر پوشه، بهویژه حالت Staggered روی یک peer که همیشه روشن است، یک بازهٔ زمانی برای بازیابی از طریق دایرکتوری .stversions در اختیار شما قرار میدهد. این جایگزینی برای snapshotهایی که توسط یک ابزار مجزا روی فضای ذخیرهسازی جداگانه گرفته میشوند، نیست.
چرا نمیتوانم فایلهایم را در رابط وب (GUI) Syncthing ببینم؟
زیرا این رابط وب یک پنل کنترل برای وضعیت همگامسازی است، نه یک مرورگر فایل. این رابط پوشهها، دستگاهها، پیشرفت انتقال و تعداد تداخلها (conflict) را نشان میدهد و هرگز محتوای فایلها را لیست یا باز نمیکند. این موضوع ناشی از طراحی peer-to-peer است: فایلهای شما روی دستگاههایتان قرار دارند و رابط وب روی VPS فقط فرآیند جابهجایی آنها را مدیریت میکند.
Syncthing به چه پورتهایی روی VPS نیاز دارد؟
پورت 22000/TCP برای پروتکل همگامسازی و 22000/UDP برای انتقال QUIC. پورت 21027/UDP برای کشف محلی (local discovery) از طریق broadcast و multicast استفاده میشود که در اینترنت کار نمیکند، بنابراین آن را روی سرور عمومی بسته نگه دارید. رابط وب (GUI) را روی پورت 8384 و متصل به 127.0.0.1 نگه دارید و از طریق یک SSH tunnel به آن دسترسی پیدا کنید. فایروال شبکهٔ ارائهدهندهٔ خود و همچنین ufw را بررسی کنید، زیرا اینها کنترلهای مجزایی هستند.
آیا میتوانم Syncthing و Nextcloud را روی یک VPS اجرا کنم؟
بله، و این کار روی سیستمی با 2 گیگابایت رم یا بیشتر منطقی است. دایرکتوریهای آنها را جدا نگه دارید. Nextcloud فایلها را در دیتابیس خود ایندکس میکند، بنابراین هر فایلی که Syncthing در فضای ذخیرهسازی Nextcloud مینویسد، تا زمانی که occ files:scan اجرا نشود، در رابط وب قابل مشاهده نخواهد بود. نوشتن دو ابزار در یک دایرکتوری واحد همچنین باعث ایجاد فایلهای تداخلی (conflict files) میشود که هیچکدام از آنها انتظارش را ندارند.