前言:php
更新項目的時候須要將更改的文件一一上傳,這樣比較麻煩,用版本控制器git +rsync 搭建一個發佈服務器,之後發佈文件很是方便git
首先說下,我這邊的更新流程,本地寫完以後,git push 到測試服,測試服測試完畢,運行腳本rsync.sh(此腳本先將代碼 git pull到測試服,再rsync傳到正式服,正常狀況確定不會pull 完直接提交到正式服,我只是模擬的狀況,我這邊的測試服當作臨時服務器,正式服當作測試服)vim
搭建步驟:bash
安裝需求:服務器
服務器說明:架構
本地電腦:localyii
測試服:test測試
正式服:onlineui
架構說明:spa
一、本地local寫完代碼以後,push
二、測試服test pull,進行測試
三、 次測試沒問題,rsync到服務器online
優點:
一、用戶rsync提交文件很快,比本身上傳快
二、rsync會自行比對文件,同樣的不會再次上傳
三、rsync是能夠添加忽略文件的
安裝流程:
搭建git:
能夠參考我博客的git搭建教程
安裝rsync
須要安裝rsync服務端和客戶端,服務端和客戶端安裝流程同樣,不過服務器多一個配置
一、安裝rsync客戶端:
①下載rsync安裝包
能夠到https://rsync.samba.org/ftp/rsync/ 去下載安裝包,解壓以後進行安裝
# tar -zxvf rsync-3.1.2.tar.gz # cd rsync-3.1.2 # ./configure --prefix=/usr/local/rsync # make && make install
客戶端到此就安裝結束了,很簡單
二、安裝rsync服務端
和上面步驟同樣,先安裝,安裝完以後,進行以下操做
# cd /usr/local/rsycn/ # mkdir etc # cd etc # vim rsyncd.conf
配置內容以下:(特別注意的是大家若是複製個人conf ,最好吧# 註釋去掉,我以前加#出錯了,我服務器配置沒有#,#註釋是寫博客加的)
pid file = /var/run/rsync.pid lock file=/var/run/rsync.lock address = 0.0.0.0 #這個是rsync服務監聽地址,我填的是全部,大家能夠填寫本身服務器的IP port = 873 uid = root gid = root use chroot = no read only = no max connections = 10 motd file = /usr/local/rsync/etc/rsyncd.motd log file = /var/log/rsync.log transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [wechat]#這個是目錄別名,下面是目錄配置這個在使用rsync傳輸的時候用的到,就是你想傳達哪一個目錄 path = /data/wwwroot/wechat_center/ [yiiadmin] # 和上面的wechat同樣,這個能夠配置多個 path = /data/wwwroot/wechatadmin/ list = yes list = yes ignore errors comment = demo secrets file = /usr/local/rsync/etc/rsync-demo.password # 密碼文件
建立相關文件 1、# vim /usr/local/rsync/etc/rsyncd.motd 內容隨便寫,這個是客戶端鏈接上來以後給的提示 2、secret 文件 # vim /usr/local/rsync/etc/rsync-demo.password 格式是 帳號:密碼 如 # root:123456 修改密碼文件的權限 # chmod 600 /usr/local/rsync/etc/rsync-demo.password
上述配置完成以後,啓動服務
# /usr/local/rsync/bin/rsync --daemon --config /usr/local/rsync/etc/rsyncd.conf
能夠查看873端口狀況
傳輸文件測試
將本地文件夾/home下的文件,傳輸到剛剛配置文件 wechat的下面
#rsync --password-file=/usr/local/rsync/etc/rsync-demo.password -zarv /home/ rsync@X.X.X.X::wechat
總結:
到此就搭建結束了,文末再附上個人rsync.sh 腳本(我傳的是PHP文件,有個校驗流程,大家不是PHP的能夠刪除那段代碼)
#!/bin/bash dir_path="/home/wwwroot/wechatadmin/" remote_path="106.14.18.151/yiiadmin" cd "$dir_path" && git pull 2>&1 >/dev/null rsync_option=-avn already_execute=0 if [ $# -eq 1 ];then case "$1" in execute) already_execute=1 rsync_option=-av esac fi file_list=`rsync "$rsync_option" "$dir_path" rsync://"$remote_path" --exclude-from="/home/caol/exclude_yii.list" --delete` echo "傳輸的文件爲:" echo "$file_list" echo "開始校驗文件" for i in $file_list do if [[ $i =~ ".php" ]]&&[ -f $dir_path$i ];then phpl_res=`php -l $dir_path$i` is_normal=`echo "$phpl_res" | grep "No syntax errors"` if [ ! -n "$is_normal" ];then echo "$dir_path$i語法錯誤,請調整代碼" exit 0 fi fi done echo "開始傳輸" rsync --password-file=/usr/local/rsync/etc/rsync-demo.password -zarv $dir_path rsync://"$remote_path" --exclude-from="/home/caol/exclude_yii.list" --delete