## 🎯 آموزش همگامسازی (Sync) دو سرور/وبسایت آپاچی با استفاده از Rsync – سطح پیشرفته
در پروژههای بزرگ یا حتی وبسایتهای با ترافیک متوسط، داشتن **دو نسخه همگام از سرور وب** (مثلاً برای Load Balancing، High Availability یا Disaster Recovery) بسیار مهم است.
یکی از روشهای ساده، سریع و کارآمد برای **همگامسازی فایلهای وبسایت** بین دو سرور آپاچی، استفاده از **rsync** است.
---
# 📦 سناریوی فرضی
- **سرور اصلی (Master):** `192.168.1.10`
- **سرور ثانویه (Backup/Slave):** `192.168.1.20`
- دایرکتوری وبسایت: `/var/www/html/`
---
# 🛠️ پیشنیازها
- نصب بودن `rsync` روی هر دو سرور
- امکان اتصال SSH بین سرورها
- ترجیحاً اتصال با کلید SSH بدون نیاز به رمز عبور (برای اتوماسیون)
---
# 🔥 مراحل گام به گام
### 1. نصب Rsync در هر دو سرور
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install rsync
```
**CentOS/RHEL/Fedora:**
```bash
sudo dnf install rsync
```
---
### 2. تنظیم احراز هویت SSH بدون پسورد
روی سرور اصلی:
تولید کلید SSH:
```bash
ssh-keygen
```
سپس کپی کلید عمومی به سرور دوم:
```bash
ssh-copy-id [email protected]
```
(در صورت نیاز جای `user` را با کاربر مناسب تغییر دهید)
---
### 3. اجرای دستور Rsync برای همگامسازی اولیه
از سرور اصلی به سرور پشتیبان:
```bash
rsync -avz --delete -e ssh /var/www/html/ [email protected]:/var/www/html/
```
**توضیح گزینهها:**
- `-a` : حالت آرشیو (حفظ پرمیشنها، مالکیت و غیره)
- `-v` : نمایش جزییات بیشتر
- `-z` : فشردهسازی برای سرعت بالاتر
- `--delete` : حذف فایلهای اضافه در سرور مقصد
- `-e ssh` : استفاده از SSH برای ارتباط امن
---
# ⏰ اجرای خودکار با کرانجاب (Cron)
برای اینکه وبسایت همیشه بهروز بماند، میتوانیم یک کرانجاب اضافه کنیم:
ویرایش کران:
```bash
crontab -e
```
اضافه کردن خط زیر برای همگامسازی هر ۳۰ دقیقه یکبار:
```bash
*/30 * * * * rsync -avz --delete -e ssh /var/www/html/ [email protected]:/var/www/html/
```
---
# 🛡️ نکات امنیتی مهم
- فقط پورتهای مورد نیاز (مثل SSH) روی هر دو سرور باز باشد.
- دسترسیهای `rsync` را محدود به مسیر موردنظر کنید (در صورت نیاز میتوانید `chroot` تنظیم کنید).
- میتوانید کاربر خاصی برای فقط عملیات rsync ایجاد کنید.
---
# 🧠 نکات حرفهای (سطح پیشرفته)
- **rsync over daemon**: به جای SSH میتوانید یک Rsync Daemon راهاندازی کنید برای کارایی بیشتر در شبکههای داخلی.
- **فیلتر فایلها**: با استفاده از `--exclude` و `--include` میتوانید فقط فایلهای خاصی را همگامسازی کنید.
- **Monitoring**: بعد از هر Sync میتوانید لاگ ایجاد کنید و در صورت خطا به مدیر سرور ایمیل ارسال شود.
مثلاً:
```bash
rsync -avz --delete /var/www/html/ [email protected]:/var/www/html/ >> /var/log/rsync_websync.log 2>&1
```
---
# ✅ نتیجهگیری
با استفاده از `rsync` میتوانید بدون نیاز به راهکارهای پیچیده، به راحتی:
- دو وبسایت را همگام نگه دارید
- از دیتاها بکاپ زنده داشته باشید
- زیرساخت آمادهی Load Balancing یا Failover ایجاد کنید.
**سریع، سبک و قابل اطمینان!** 🚀
---
دوست داری در ادامه یک نمونه **اسکریپت کامل Bash** هم برات بنویسم که:
- همگامسازی کنه
- لاگ بسازه
- در صورت خطا بهت ایمیل بزنه؟
اگر مایلی، بگو تا برات طراحی کنم! ✅📦
دوست داری؟ 🌟