環境參數:
- OS:FreeBSD i386 , 10.3-RELEASE-p11
- CPU:Intel(R) Core(TM)2 Duo CPU @ 3.00GHz
- RAM:4096 MB
- sitecopy :0.16.6
sitecopy 自動同步網站內容
安裝 sitecopy
FreeBSD:
$ pkg install sitecopy-0.16.6_4
Ubuntu:
$ apt-get install sitecopy
建立 sitecopy 檔案快照目錄及設定檔
sitecopy啟用前,需建立檔案快照資料庫( .sitecopyrc)及編輯相關設定( /usr/local/etc/sitecopy/~)才能正常運行。
建立快照資料庫的目錄(自訂路徑即可)
.sitecopy 是用來儲存sitecopy比對檔案異同時的資料庫,一般建立在設定目錄下,當然可依自己規劃來設定。
$ mkdir /usr/local/etc/.sitecopy
$ chmod 0700 /usr/local/etc/.sitecopy
sitecopyrc 設定檔
本例以mydomain.conf為設定檔範例,網址相對則為 mydomain,遠端虛擬主機IP為1.2.3.4。以這些資料來進行設定:
$ touch /usr/local/etc/sitecopyrc/mydomain.conf
$ chmod 600 /usr/local/etc/sitecopyrc/mydomain.conf
$ vi /usr/local/etc/sitecopyrc/mydomain.conf
# sitecopyrc : mydomain
#----------------------------------------------------------
site mydomain # 網址1設定
server 1.2.3.4 # FTP Server IP
protocol ftp
url http:/mydomain
username username
password password
local /var/www/mydomain # 本機檔案路徑路
remote ~/public_html/mydomain # 遠端(FTP)路徑
permissions all
# 排除 temp, cache 目錄底下檔案不上傳更新或下戴
# 含有底線 _ 的檔案或資料夾也不更新
exclude temp
exclude cache
exclude *_*
site newdomain # 網址2設定
server 1.2.3.4 # FTP Server IP
protocol ftp
url http:/newdomain
username username
password password
local /var/www/newdomain # 本機檔案路徑路
remote ~/public_html/newdomain # 遠端(FTP)路徑
permissions all
輸入vi指令: wq存檔離開編輯界面。
檢查本地端快照資料
$ sitecopy -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy mydomain
sitecopy: Error: No storage file for `mydomain'.
sitecopy: Use --init, --catchup or --fetch to create a storage file.
sitecopy: Skipping site `mydomain'.
sitecopy: No valid sites specified.
Try `sitecopy --help' for more information.
由上可知資料庫尚未建立,所以需要先初始化。
初始化 ( -i,即 –initialize)
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -i mydomain
sitecopy: Initializing site `mydomain' (on 1.2.3.4 in ~/public_html/mydomain/)
sitecopy: All the files and directories are marked as NOT updated remotely.
本地端 FTP 同步上傳到遠端主機
一開始我們要先確定本地端的檔案都已經上傳至虛擬主機目錄下,方法有很多種,選擇自己熟悉方便的即可。
1.打包後自行上傳,利用 tar -zcvf 指令壓縮打包後上傳再解壓,可以節省一點時間。
2.利用ftp軟體直接目錄對目錄慢慢上傳,簡單但耗時。
3..利用 sitecopy 指令上傳 ( -u ,即 –update),練習指令的好機會,利用(-u,即 –update)參數直接更新遠端檔案:
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -u mydomain
測試新增本地端檔案後,再更新遠端檔案
驗証是否在本地端新增檔案後,會自動上傳到遠端?
$ echo "new file" > /var/www/mydomain/new.html
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -u mydomain
sitecopy: Updating site `mydomain' (on 1.2.3.4 in ~/public_html/mydomain/)
Uploading new.html: [.] done. (100% finished)
Setting permissions on new.html: done.
sitecopy: Update completed successfully.
成功上傳了。
遠端 FTP 同步下戴到本地端主機
- 先列出遠端的檔案(-f,即 –fetch)
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -f mydomain
sitecopy: Fetching site `mydomain' (on 1.2.3.4 in ~/public_html/mydomain/)
File: new.html - size 11
File: index.html - size 10
sitecopy: Fetch completed successfully.
結果顯示遠端目前有2個檔案:new.html及index.html, 本地端(/var/www/mydomain)則無任何檔案。
- 將本地端更新為遠端檔案狀態(-s, 即–synchronize)
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -s mydomain
sitecopy: Synchronizing site `mydomain' (on 1.2.3.4 in ~/public_html/mydomain/)
Downloading index.html: [.] done.
Setting permissions on index.html: done.
Downloading new.html: [.] done.
Setting permissions on new.html: done.
sitecopy: Synchronize completed successfully.
成功將遠端檔案下載回本地端。
注意 -s 這個指令會完全將本地端同步成遠端檔案,也就是任何其它存在本地端但卻不存在遠端的檔案會被刪除。
測試:繼上個步驟,如果本地端不小心異動檔案後,想同步為遠端檔案?
$ touch > /var/www/mydomain/new.html #不小心更改了new.html這佪檔案
$ sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -s mydomain
sitecopy: Synchronizing site `mydomain' (on 1.2.3.4 in ~/public_html/mydomain/)
Downloading new.html: [.] done.
sitecopy: Synchronize completed successfully.
自動偵測到 new.html 與遠端不同,所以將遠端的 new.html 下戴回來。
設定每天凌晨2點自動同步(www權限)
$ crontab -u www -e
0 2 * * * www sitecopy -o -r /usr/local/etc/sitecopyrc/mydomain.conf -p /usr/local/etc/.sitecopy -s mydomain
多個網站如何更新?
依網站名稱分別在sitecopy設定檔中編輯
vi /usr/local/etc/sitecopyrc/mydomain.conf
script檔案內容
建立一個檔名為sitecopy_update.sh的shell script,構想是達成3個功能:
1.第1個參數:”u”代表上傳網站,”s”則代表下載網站。
2.第2個參數是本地端目錄名稱。(不是網址!)
3.自動寫入log檔。
例如想將本地端的目錄 newdomain(sitecopy設定檔中要記得設定) 上傳至虛擬主機,則使用以下指令:
$ sitecopy_update.sh u newdomain
所以每天自動執行上傳的crontab就可以簡化為:
$ crontab -u www -e
0 2 * * * www sitecopy_update.sh u mydomain
#!/bin/sh#!/bin/sh
# /home/jjnux/mycron/sitecopy_update.sh
#==========================================================
# 2017-5-19 , 00:01
#
# Use Sitecopy to backup the BC3 remote hosts files
#
#==========================================================
# Set Variables
PROG=sitecopy_update
SITECOPY=/usr/local/bin/sitecopy
LOGFILE=/var/log/sitecopy.log
RCFILE_DIR=/usr/local/etc/sitecopyrc
RCDIR=/data/.sitecopy
#=====================================
# Check Variables
#=====================================
WWWROOT=/data/htdocs
if [ -z $1 ] || [ -z $2 ];then
if [ ! $1 = "u" ] && [ ! $1 = "s" ];then
echo " Specify update(u) or synchronize(s) for vhost!!!"
echo
echo " Usage:" `basename $0` 'method (u for update) ( s for synchornize) hostname'
exit 0
fi
else
# Let's Go Here
Smethod=$1
SITE=$2
HTDOC=$WWWROOT/$2
RCFILE=$RCFILE_DIR/bc3.conf
if [ ! -d $HTDOC ] || [ ! -f $RCFILE ] ;then
echo "WWW file or RCFILE not found!"
exit 0
fi
$SITECOPY -o -r ${RCFILE} -p ${RCDIR} -${1} $2
# Time Stamp
echo $PROG $1`date '+%Y/%m/%d,%H:%m'` >> ${LOGFILE}
$SITECOPY -no -r ${RCFILE} -p ${RCDIR} -${1} $2 >> ${LOGFILE}
fi
那天想查閱更新記錄時,查看log檔即可。
$ more /var/log/sitecopy.log
參考來源:
1.http://www.manyfish.co.uk/sitecopy/2.
EmoticonEmoticon