Subversion概述
html
概述
web
Subversion,簡稱SVN,是一個開放源代碼的版本控制系統,相對於的RCS、CVS,採用了分支管理系統。shell
網站更新拓撲結構vim
安裝WEB服務器(Nginx)
bash
略
服務器
安裝svn獨立服務器----->本地測試服ssh
安裝subversion Server
ide
yuminstall subversion –y
建立版本庫
svn
mkdir -pv/work/svndata svnadmin create /work/svndata/web
將網站目錄導入版本庫
post
export LANG="zh_CN.UTF-8" svn import/data/wwwroot/htdocs/ file:///work/svndata/web -m "import"
建立用戶密碼
cat >/work/svndata/web/conf/passwd << EOF > [users] > admin =Leerw2015 > EOF cat >/work/svndata/web/conf/authz <<EOF > [/] > admin = rw > EOF cat >/work/svndata/web/conf/svnserve.conf <<EOF > [general] > anon-access =none > auth-access =write > password-db =/work/svndata/web/conf/passwd > authz-db =/work/svndata/web/conf/authz > EOF
啓動svn服務器
svnserve -d -r /work/svndata/
添加開啓啓動
echo"svnserve -d -r/work/svndata/" >> /etc/rc.local
配置鉤子腳本,實現自動同步
vim/work/svndata/web/hooks/post-commit #!/bin/bash # Author by:Tommy.Gandolf # exportLANG="zh_CN.UTF-8" SVN_PATH=/usr/bin/svn WEB_PATH=/data/wwwroot/htdocs USER_NAME=admin USER_PASSWD=Leerw2015 $SVN_PATH checkout--username $USER_NAME --password$USER_PASSWD svn://127.0.0.1/web $WEB_PATH
添加執行權限
chmod +x /work/svndata/web/hooks/post-commit
設置SVN客戶端自動更細Nginx網站目錄
Windows下svn客戶端使用
下載地址:
http://tortoisesvn.net/downloads.html
Linux下svn客戶端的使用
yuminstall subversion –y svn checkout svn://172.16.100.106/website
本地測試服務器---->外網測試服務器
配置本地到外網測試服務器無密碼登陸
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.100.105 ssh172.16.100.105 'date'
能正常顯示日誌就,就證實配置OK
Rsync同步目錄
假設本地測試已經OK,因爲本地是內網環境無固定IP,所以目前須要同步到外網服務器,使用rsync遠程同步目錄
# rsync -avz /data/wwwroot/htdocs/ root@172.16.100.105:/data/wwwroot/htdocs_test/--exclude='.svn/' --exclude='.settings/' --exclude='.project'
# vim push.sh
腳本內容以下:
#!/bin/bash # Author by:Tommy.Gandolf # This script willpush local file to remote Server LOCAL_FILE=/data/wwwroot/htdocs/ REMOTE_FILE=/data/wwwroot/htdocs_test/ USER=root REMOTE_IP=172.16.100.105 rsync -avz $LOCAL_FILE$USER@$REMOTE_IP:$REMOTE_FILE --exclude='.svn/' --exclude='.settings/' --exclude='.project'
每次更新OK,只須要執行:sh push.sh 便可更新代碼到外網測試服
實現外網測試服務器---->正式服務器的更新
WEB1
外網正式服務器(Rsync服務器端)
安裝rsync
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.0.tar.gz tar zxvfrsync-3.1.0.tar.gz cd rsync-3.1.0 ./configure--prefix=/usr/ make &&make install
建立配置文件
mkdir -p/etc/rsyncd cd /etc/rsyncd/ touch rsyncd.conf touch rsyncd.secrets touch rsyncd.motd chmod 600 rsyncd.secrets vim rsyncd.conf uid=nobody gid=nobody use chroot=no max connections=10 strict modes=yes pid file=/var/run/rsyncd.pid lockfile=/var/run/rsyncd.lock logfile=/var/log/rsyncd.log [data1] path=/data/wwwroot/htdocs ignore errors read only=no write only=no hostsallow=172.16.100.0/24 host deny=* list=no uid=root gid=root auth users=root secrets file=/etc/rsyncd/rsyncd.secrets echo"root:1q2w3e4r5t6y" > rsyncd.secrets chown root:root rsyncd.secrets chmod 600 rsyncd.secrets cat rsyncd.motd +++++++++++++++++++++++++++++++++++++++++++++++++++ ######## WelCome To The Leerw.com SerVice! ####### +++++++++++++++++++++++++++++++++++++++++++++++++++
啓動rsync服務
/usr/bin/rsync--daemon --config=/etc/rsyncd/rsyncd.conf
WEB2
安裝經過WEB1,惟一不一樣的內容以下:
uid=nobody gid=nobody use chroot=no max connections=10 strict modes=yes pidfile=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock logfile=/var/log/rsyncd.log [data2] path=/data/wwwroot/htdocs/ ignore errors read only=no write only=no hostsallow=172.16.100.0/24 host deny=* list=no uid=root gid=root auth users=root secretsfile=/etc/rsyncd/rsyncd.secrets
外網測試服(rsync + inotify 客戶端)
安裝rsync
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.0.tar.gz tar zxvfrsync-3.1.0.tar.gz cd rsync-3.1.0 ./configure--prefix=/usr/ make &&make install mkdir -p/etc/rsyncd cd /etc/rsyncd/ touch rsyncd.password echo"1q2w3e4r5t6y" > rsyncd.password chmod 600 rsyncd.password mkdir -pv/data/wwwroot/htdocs
安裝inotify-tools
rpm -ivh http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm yum makecache yum installinotify-tools inotify-tools-devel –y
自動同步腳本後臺運行【保證更新到測試服上的代碼正確性】
vim /root/rsync_auto.sh #!/bin/bash # Author by:Tommy.Gandolf # HOST1=172.16.100.100 HOST2=172.16.100.105 SRC=/data/wwwroot/htdocs/ DST1=data1 DST2=data2 USER=root /usr/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -emodify,delete,create,attrib $SRC | whileread read date time dir files; do /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$HOST1::$DST1 --exclude='.svn/' --exclude='.settings/'--exclude='.project' /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$HOST2::$DST2 --exclude='.svn/' --exclude='.settings/'--exclude='.project' echo "${files} was rsynced">>/tmp/rsync.log 2>&1 done # chmod +x rsync_auto.sh # nohup sh rsync_auto.sh & > /dev/null
備註:若是同步的目錄有內同,不能觸發同步,請先在同步目錄建立一個文件,嘗試觸發同步文件。
手動同步腳本【推薦此方案】
說明:測試OK,手動推送到正式服務器
# vim rsync.sh #!/bin/bash # Author by:Tommy.Gandolf # HOST1=172.16.100.100 HOST2=172.16.100.105 SRC=/data/wwwroot/htdocs/ DST1=data1 DST2=data2 USER=root /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$HOST1::$DST1 --exclude='.svn/' --exclude='.settings/'--exclude='.project' /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$HOST2::$DST2 --exclude='.svn/' --exclude='.settings/'--exclude='.project' echo "${files} was rsynced">>/tmp/rsync.log 2>&1
配置內核參數
Inotify默認內核參數值過小
默認參數:
# sysctl -a | grep max_queued_events fs.inotify.max_queued_events = 16384 # sysctl -a | grep max_user_watches fs.inotify.max_user_watches = 8192 fs.epoll.max_user_watches= 148131 # sysctl -a | grep max_user_instances fs.inotify.max_user_instances = 128 修改:vim /etc/sysctl.conf fs.inotify.max_queued_events = 99999999 fs.inotify.max_user_watches = 99999999 fs.inotify.max_user_instances = 65535 # sysctl -p
FAQ
Rsync 經常使用用法
1.在本地機器上對兩個目錄進行同步
rsync -zvr /data/wwwroot/htdocs/ /tmp/
參數:-z 開啓壓縮,-v 詳細輸出 –r 表示遞歸 –a 保留時間標記
2.僅同步一個文件
rsync -azvr /data/wwwroot/htdocs/test.txt /tmp/
3.從本地同步到遠程
rsync -avz /data/wwwroot/htdocs/ root@172.16.100.105:/data/wwwroot/htdocs_test/
4.同步遠程到本地
rsync -avz root@172.16.100.105:/root/cpu.sh/root/
5.同步是指定遠程shell
rsync -avz -e ssh root@172.16.100.105:/tmp/root/push.sh
6.不要覆蓋被修改過的目的文件
rsync -avzu -e sshroot@172.16.100.105:/root/cpu.sh /tmp/
7.僅僅同步目錄(不一樣步文件)
rsync -v -d /tmp/ root@172.16.100.105:/tmp/
8.查看文件的傳輸進程
rsync -v --progress -d /tmp/ root@172.16.100.105:/tmp/
9.刪除在目的文件夾中建立文件
rsync -avz --delete /tmp/ root@172.16.100.105:/tmp/
10.查看源和目的文件之間的改變狀況
-參數:-i
rsync -avzi /tmp/ root@172.16.100.105:/tmp/
11.查看源和目的之間的變化
rsync -avzi /tmp/ root@172.16.100.105:/tmp/
f 表示這是一個文件
d 表示這是一個目錄
s 表示尺寸被更改
t 時間標記有變化
o 用戶被更改
g 用戶組被更改
12.在傳輸時啓用包包含和排除模式
rsync -avz --exclude='.svn/'/tmp/ root@172.16.100.105:/tmp/
13.不要傳輸大文件
rsync -avz --max-size='100K' /tmp/ root@172.16.100.105:/tmp/
14.傳輸全部文件
無論文件是否有變化,再次把全部文件都傳輸一遍 –W參數
rsync -avzW--max-size='100K' /tmp/ root@172.16.100.105:/tmp/
END