铁牛仔

铁牛仔的博客

他的个人主页  他的博客

团队开发同步服务器的搭建

铁牛仔  2011年01月12日 星期三 16:38 | 1920次浏览 | 1条评论

 

1.工作流程

我们的局域网服务器上总共部署有三个虚拟服务器,分别为:开发服务器、测试服务器、同步服务器。

假设服务器的域名分别为:

dev.tieniuzai.com(192.168.1.211)

test.tieniuzai.com(192.168.1.212)

sync.tieniuzai.com(192.168.1.213)

在日常开发中,我们的工作流程是这样的:

第一步,程序员在开发服务器上编写、调试代码,开发测试完毕后,将代码提交到svn服务器。

第二步,系统管理员更新测试服务器上的代码到最新状态,交由市场部的同事进行测试,如有bug发现则返回第一步。

第三步,系统管理员将测试服务器上的代码同步到同步服务器(非svn方式),进行最后的测试,如无问题则将代码同步到线上服务器。

 

2.同步服务器的搭建

同步服务器是基于rsync及ssh密钥实现的。rsync可以实现增量备份,而且速度块,稳定性好。具体请见:

rsync官网   http://www.samba.org/rsync/

 

2.1利用ssh密钥实现自动登录

局域网的服务器的系统环境皆为Ubuntu10.04+Apache2,而线上服务器的系统环境为Centos+Nginx,Apache默认使用 的系统账户名为"www-data",而线上服务器Nginx使用的系统账户名为"www",为了避免权限问题的出现,我们需要将两者一致。因此,需要为 测试服务器、同步服务器分别添加用户组"www"和用户"www",并将项目所在文件夹的所有着赋予用户"www"。下面是具体步骤:

新建www用户组及www用户

sudo useradd www

修改用户密码

sudo passwd www

将用户添加到管理组

sudo gpasswd -a www www

为用户www创建home目录

# sudo cd /home && sudo mkdir www && sudo chown www:www /home/www && sudo mkdir /home/www/.ssh

#sudo mkdir -p /home/www/.ssh && sudo chown www:www /home/www/ && sudo chown www:www /home/www/.ssh &&sudo chmod -R 755 /home/www/

切记:以上三步需要分别在测试服务器和同步服务器上执行一次,并且www文件夹的权限设置为755.

在新建www用户完成后,我们需要使用www用户重新登录系统并创建ssh密钥。

切换当前登录账户

su www #按照系统提示输入账户密码即可。

创建www账户的ssh密钥

ssh-keygen -t dsa

>>Generating public/private dsa key pair.

>>Enter file in which to save the key (/home/www/.ssh/id_dsa):

......

一路Enter即可.命令执行完后,将会再/home/www/.ssh/目录下生成文件:id_dsa、id_dsa.pub、known_hosts

将文件id_dsa.pub上传到同步服务器指定目录下

scp id_dsa.pub >www@sync.tieniuzai.com:/home/www/.ssh/

使用账户www登录到同步服务器,执行以下命令:

cd ~/.ssh && umask 077

cat id_dsa.pub > authorized_keys

rm -f id_dsa.pub

测试ssh自动登录

ssh  www@sync.frontend.tieniuzai.com

如无意外,在不需要的情况下输入便可通过ssh连上同步服务器了。

小注意一下下:在生成密钥的过程中需要特别注意文件夹的权限问题,否则将会严重影响下一步的操作。

 

2.2同步脚本的编写

文件夹属性设置

test.ftieniuzai.com上项目代码的存放目录为:/var/www/b2c/,为了方便操作,我们将/var/www/文件的拥有者赋予www用户。

sudo chown www:www /var/www/

同理,我们需要在同步服务器(sync.tieniuzai.com)上执行同样的操作,如果同步服务器的项目代码存放路径不同,则需做相对应修改。

同步脚本

在/home/www/目录下创建文件syncTool并输入以下代码:

#!/bin/bash

rsync -avCz -e "ssh -i /home/www/.ssh/id_dsa" /var/www/b2c/ sync.tieniuzai.com:/var/www/b2c/

rsync的基本参数:

#--exclude 排除指定目录,不做同步。

#--delete 主服务器删除文件,从服务器也要删除。

#-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性。

#-v, --verbose 详细模式输出。

#-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) 。

#-z, --compress 在文件传输过程中,对文件进行压缩

#-C, --csv-exclude 自动排除csv文件以及类csv文件

 

为脚本赋予执行的权限:

sudo chmod +x ./syncTool

执行脚本:

./syncTool

即可将测试服务器/var/www/b2c/目录下的所有代码同步到 服务器sync.tieniuzai.com的/var/www/b2c/文件夹下。

如需更多复杂功能,对同步脚本进行相应的修改即可。

目前是已经实现的是测试服务器与同步服务器之间的数据同步。如需实现同步服务器与线上服务器之间的数据同步按照以上步骤即可。

另:也可以这样实现同步服务器与线上服务器之间的数据同步

  1. 将测试服务器/home/www/.ssh/下的id_dsa 文件上至到同步服务器/home/www/.ssh/目录下
  2. 将同步服务器/home/www/.ssh/下的authorized_keys 文件线上服务器的 /home/www/.ssh/目录下
  3. 在同步服务器执行同步脚本

前提是:线上服务器拥有用户组www以及用户www

 

总结:

在配置同步服务器的过程中会遇到这样那样的错误,经常是由权限问题引起的。这时候需要多看系位于/var/log/目录下的系统log文件,才能快速找到问题的原因。

 

原文的样式看起来会好看些: http://tieniuzai.com/blog/view/setup-sync-server-for-team-development

 

 

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
夏清然

回复 夏清然  2011年01月13日 星期四 01:40

具体建立的过程没啥好说的,
键缺少一个项目管理工具。
另外项目的打包发布是要在开发和测试之外的但接近生产环境完成,并采用某种包管理方式,例如dekg

0条回复

暂时没有评论

Zeuux © 2019

京ICP备05028076号