為什么要使用 rsync 從 Windows 到 linux 進行同步?
我們經常會面臨這種的情況,項目使用 Windows 開發,最終部署在 Linux 上,但有時想要進行測試、維護、迭代版本時操作時,服務器和本地的開發環境代碼的同步就成了問題。當然我們可以選用 Git 進行代碼的同步。但有時代碼的頻繁修改,並且修改后的驗證需要依賴外部的 Linux 服務器,這時 git 的提交便成了令人抓狂的操作。當然有人說可以使用 Jenkins 等這樣的自動化工具進行部署,但由於資源或學習成本等其他外部因素,使用起來代價稍高。為了解決這個問題,今天推薦一個叫 rsync
的工具,它不但支持 Windows 與 Linux 之間的數據同步,而且配置簡單,同時增量同步的功能更是解決了頻繁修改代碼的問題。
如何配置 rsync?
rsync 配置很容易,這里以 Windows 作為客戶端,Linux 作為服務端進行演示。
Linux 配置
安裝 rsync
# 檢查是否安裝了 rsync
rpm -qa|grep rsync
# 如果沒有安裝的話,進行安裝
yum install rsync
# 將 rsync 設置成開啟自啟,並啟動
systemctl enable rsyncd
systemctl start rsyncd
編寫配置文件
rsync 涉及到的配置主要有三個:
- /etc/rsyncd.conf -> 對 rsync 服務進行配置
- /tmp/rsync -> 待同步的目標目錄,路徑可以自定義
- /etc/rsyncd.passwd ->里面包含用於進行密碼驗證的賬號信息
/etc/rsyncd.conf 的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# 進行通信的端口,如果 firewall 打開的話,需要將對應的端口添加進去
port=8730
# 日志文件
log file=/var/log/rsync.log
# rsync 的進程 id
pid file=/var/run/rsync.pid
# 要同步的模塊,這里一般以項目名命名
[cmi]
# 同步的目標文件夾
path=/tmp/rsync
# rsync daemon 在傳輸前是否切換到指定的 path 目錄下,並將其監禁在內,用於增加傳輸的安全性
use chroot=no
# 指定最大的連接數
max connections=4
# yes 表示只讀本地文件無法同步到服務器
read only=no
# 客戶端請求顯示模塊列表時,該模塊是否顯示出來
list=true
# 服務運行時的用戶
uid=root
# 服務運行時的用戶組
gid=root
# 進行驗證時的用戶名,必須是系統存在的用戶
auth users = root
# 連接用戶時的密碼
secrets file=/etc/rsyncd.passwd
# 允許的 ip
hosts allow=*
創建目標的文件夾
mkdir /tmp/rsync
創建密碼
# 創建文件夾
vim /etc/rsyncd.passwd
# 寫入密碼
echo "root:123456" > /etc/rsyncd.passwd
#更改文件權限
chmod 600 /etc/rsyncd.passwd
打開rsync
systemctl start rsyncd
windows 配置
下載 cwrsync
https://www.itefix.net/cwrsync-free-edition
將下載的文件存放到固定位置
# 下載的文件名類似於這樣
cwrsync_5.7.2_x86_free.zip
# 解壓並放入目錄,並添加到環境變量中,方便日后的使用
我這里配置的目錄是“C:\app\rsync\cwrsync_5.7.2_x86_free\bin”
執行命令
# 如果配置環境變量,隨意打開一個 cmd 就可以了,否則的話進入安裝的目錄中(bin 下面)
rsync.exe -avPz --port 8730 --password-file=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt --exclude-from=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt /cygdrive/C/test root@your_ip::cmi/
# 常見的的參數
-a: 歸檔模式,使用遞歸傳輸並保持文件的屬性
-v: 顯示傳輸過程中的詳細信息
-P: 顯示文件傳輸的進度信息
-z: 傳輸中進行壓縮,提高傳輸速度
--password-file: 登錄時用到的密碼文件,該文件直接把密碼包含就可以,用戶名需要顯式指定
--exclude-from: 指定不需要進行傳輸的文件和文件夾
--delete: 在 exclude/include 規則生效后執行,假如服務器中文件比傳入的文件多,則刪除,少的話,則添加。
# 在指定文件夾目錄時,進入在真實目錄前添加 /cygdrive/ 后面跟正常目錄就可以了
比如密碼文件的路徑: /cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt
排除文件的路徑:/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt
本地傳送的路徑: /cygdrive/C/test -> 表說 C 盤的 test
# 最后兩個參數,表示想要傳送的文件夾,以及服務器的 iP 以及認證的用戶和模塊、
root@your_ip::cmi/ -> 用戶名為 root,cmi 表示傳入的模塊,均在服務端進行配置
關於密碼文件 cmi_password.txt 的內容,寫入文件就好
123456
關於排除文件 exclude.txt 的實例
.idea
l3vpn_not_used
load-dir
_namespaces
總結
使用 rsync 從 windows 同步數據到 linux 很簡單,在 linux 作為服務器,windows 作為客戶端的情況下:
linux 分別需要進行三個文件的配置,並且不要忘了給密碼文件添加權限。
windows 僅需要在安裝后,直接使用就可以了,無非就是一些參數的添加。
最后,大家可以使用 windows 的定時任務,進行數據的定時同步。希望提高大家的工作效率。