使用Subversion實現網站自動更新

Subversion概述
html

    概述
web

    Subversion,簡稱SVN,是一個開放源代碼的版本控制系統,相對於的RCS、CVS,採用了分支管理系統。shell

    網站更新拓撲結構vim

    wKiom1W7QoyzIba0AAIwaNrmWpo028.jpg

    安裝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

wKiom1W7RHagmTRJAAIgtIFzGLM689.jpg

wKioL1W7RmeghHdcAAB0mC7UnKE980.jpg

wKiom1W7RHbiExszAAB_GVAyHIQ423.jpg

wKioL1W7RmihzxyYAAEwKzZqRTg715.jpg

    Linux下svn客戶端的使用

yuminstall subversion –y
svn checkout  svn://172.16.100.106/website

wKiom1W7ReSizhQBAAZMLEEyF0A313.jpg

本地測試服務器---->外網測試服務器

    配置本地到外網測試服務器無密碼登陸

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'

wKiom1W7SECDZN9iAAZMLEEyF0A654.jpg

# 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

相關文章
相關標籤/搜索