# 🔄 آموزش کامل همگامسازی دو وبسرور Apache با استفاده از Rsync
در محیطهایی که نیاز به **Load Balancing**، **Fault Tolerance** یا داشتن یک سرور پشتیبان (Backup) وجود دارد، همگامسازی فایلهای وبسایت بین دو سرور Apache بسیار مهم است. ابزار **`rsync`** یکی از سریعترین و سادهترین راهحلها برای این کار است.
---
## 🧰 پیشنیازها
* دو سرور لینوکسی با Apache نصبشده
* دسترسی root یا sudo به هر دو سرور
* فعالبودن SSH بین سرورها
* نصب بودن `rsync` (بهطور پیشفرض در بیشتر توزیعها وجود دارد)
---
## 📌 ساختار سناریو
* سرور اول (اصلی): `web1.example.com` (IP: `192.168.1.10`)
* سرور دوم (مقصد): `web2.example.com` (IP: `192.168.1.11`)
* مسیر سایت: `/var/www/html`
---
## 🗝️ مرحله اول: تنظیم احراز هویت SSH با کلید
روی سرور اول (مبدأ) کلید SSH بسازید:
```bash
ssh-keygen -t rsa
```
سپس کلید عمومی را به سرور دوم منتقل کنید:
```bash
ssh-copy-id root@192.168.1.11
```
حالا بدون وارد کردن رمز عبور میتوانید با SSH به سرور دوم وصل شوید:
```bash
ssh root@192.168.1.11
```
---
## 🔁 مرحله دوم: اجرای Rsync برای همگامسازی فایلها
### دستور پایه:
```bash
rsync -avz --delete /var/www/html/ root@192.168.1.11:/var/www/html/
```
توضیح سوئیچها:
* `-a`: حالت آرشیو (حفظ مجوزها، مالکیت، زمان)
* `-v`: نمایش جزئیات
* `-z`: فشردهسازی حین انتقال
* `--delete`: حذف فایلهایی که در سرور مقصد حذف شدهاند
> **نکته مهم**: حتماً دقت کنید مسیر مبدأ انتهایش `/` داشته باشد تا محتویات دایرکتوری منتقل شود نه خود دایرکتوری.
---
## 🕓 مرحله سوم: اجرای زمانبندی خودکار با Cron
اگر میخواهید این همگامسازی بهصورت خودکار انجام شود:
```bash
sudo crontab -e
```
افزودن کرانجاب برای هر ۱۵ دقیقه:
```bash
*/15 * * * * rsync -az --delete /var/www/html/ root@192.168.1.11:/var/www/html/
```
---
## 🔒 مرحله چهارم: تنظیم مجوزها و امنیت
* اطمینان حاصل کنید فقط کاربر `www-data` (یا معادل آن در توزیع شما) به فایلها دسترسی دارد.
* اجرای `rsync` با کاربر محدود و بدون دسترسی کامل به `root` توصیه میشود.
* میتوانید از SSH key محدود (restricted) یا استفاده از `rsync daemon` با محدودیت IP بهره بگیرید.
---
## ✅ مرحله پنجم: تست و بررسی صحت همگامسازی
روی سرور اصلی:
```bash
echo "Test $(date)" > /var/www/html/testfile.txt
```
چند دقیقه صبر کرده یا کرانجاب را دستی اجرا کنید، سپس بررسی کنید که فایل روی سرور دوم ایجاد شده است:
```bash
ssh root@192.168.1.11 ls -l /var/www/html/testfile.txt
```
---
## ⚙️ مرحله اختیاری: همگامسازی فقط فایلهای تغییر یافته
```bash
rsync -avz --delete --update /var/www/html/ root@192.168.1.11:/var/www/html/
```
سوئیچ `--update` از بازنویسی فایلهای جدیدتر در مقصد جلوگیری میکند.
---
## 📌 نکته تکمیلی: همگامسازی دو طرفه؟
`rsync` برای همگامسازی یکطرفه طراحی شده است. اگر به همگامسازی **دوطرفه** نیاز دارید، بهتر است از ابزارهایی مانند:
* `Unison`
* `Lsyncd`
* یا `Syncthing`
استفاده کنید.
---
## ✅ نتیجهگیری
با استفاده از `rsync` میتوان بهسادگی و با کارایی بالا دو سرور Apache را همگامسازی کرد. این روش برای سناریوهای High Availability، Load Balancing، یا تهیه نسخه پشتیبان بسیار مفید است.