下面来布署svn服务器
所有文件下载地址:/d/-aMABDmt9uMqUQQA481
环境:CentOS5.8 x64 ,开发包组已安装,iptables,selinux已经关闭
一.安装配置apache
1.1 下载编译安装apache
tarxvfhttpd-2.2.22.tar.bz2
cdhttpd-2.2.22
./configure--prefix=/opt/apache\
--enable-so\
--enable-dav\
--enable-dav-fs\
--enable-maintainer-mode\
--with-included-apr\
--enable-rewrite\
--enable-ssl\
--enable-proxy\
--enable-proxy-http
make&&makeinstall
1.2 配置apache
添加apache 用户
useradd-rapache
以apache身份运行httpd
sed-i's@Userdaemon@Userapache@g'/opt/apache2/conf/httpd.conf
sed-i's@Groupdaemon@Groupapache@g'/opt/apache2/conf/httpd.conf
1.3 为了方便将apache命令加入PATH,并将apache库导出
echo'exportPATH=$PATH:/opt/apache2/bin'>/etc/profile.d/httpd.sh
./etc/profile.d/httpd.sh
echo'/opt/apache2/lib'>/etc/ld.so.conf.d/apache.conf
导出
ldconfig
rm-rfhttpd-2.2.22
二.安装MySQL
2.1安装cmake
tarxvfcmake-2.8.4.tar.gz
cdcmake-2.8.4
./configure
make&&makeinstall
cd..
rm-rfcmake-2.8.4
2.2 安装mysql
tarxfmysql-5.5.28.tar.gz
cdmysql-5.5.28
cmake-DCMAKE_INSTALL_PREFIX=/opt/mysql\
-DSYSCONFDIR=/opt/mysql/etc\
-DMYSQL_DATADIR=/opt/mysql/data\
-DMYSQL_TCP_PORT=3306\
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock\
-DMYSQL_USER=mysql\
-DEXTRA_CHARSETS=all\
-DWITH_READLINE=1\
-DWITH_SSL=system\
-DWITH_EMBEDDED_SERVER=1\
-DENABLED_LOCAL_INFILE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1
make&&makeinstall
cd..
rm-Rfmysql-5.5.28
配置文件与启动脚本
cd/opt/mysql
cpsupport-files/my-f/etc/f
cpsupport-files/mysql.server/etc/init.d/mysqld
2.3 以mysql用户运行mysql,修改PATH并导出库
useradd-rmysql
chown-Rmysql:root.
./scripts/mysql_install_db--user=mysql--datadir=data/
echo'exportPATH=$PATH:/opt/mysql/bin'>/etc/profile.d/mysql.sh
./etc/profile.d/mysql.sh
echo'/opt/mysql/lib'>/etc/ld.so.conf.d/mysql.conf
ldconfig
启动mysql
servicemysqldstart
三.安装php
3.1 安装php,安装它是因为svnmanager需要
cd/root/svn
tarxvfphp-5.3.18.tar.gz
cdphp-5.3.18
./configure--prefix=/opt/php\
--with-apxs2=/opt/apache2/bin/apxs\
--with-mysql=/opt/mysql\
--enable-mbstring
make&&makeinstall
cpphp.ini-production/etc/php.ini
cd..
rm-Rfphp-5.3.18
添加apache的php支持
sed-i'/AddTypeapplication\/x-gzip.gz.tgz/a\
AddTypeapplication/x-httpd-php.php'/opt/apache2/conf/httpd.conf
sed-i's@DirectoryIndexindex.html@DirectoryIndexindex.phpindex.html@g'/opt/apache2/conf/httpd.conf
启动apache测试
rm-f/opt/apache2/htdocs/index.html
echo'<?php
phpinfo()
?>'>/opt/apache2/htdocs/index.php
apachectlstart
访问http://$IP/测试apache,php,mysql是否部署下确
四.安装subversion
4.1 解压安装subversion
tarxfsubversion-1.6.13.tar.bz2
tarxfsubversion-deps-1.6.13.tar.bz2
cdsubversion-1.6.13
./configure--prefix=/opt/subversion\
--with-apxs=/opt/apache2/bin/apxs\
--with-apr=/opt/apache2/bin/apr-1-config\
--with-apr-util=/opt/apache2/bin/apu-1-config
make&&makeinstall
echo'exportPATH=$PATH:/opt/subversion/bin'>/etc/profile.d/svn.sh
./etc/profile.d/svn.sh
cd..
rm-rfsubversion-1.6.13
4.2 让apache与svn结合
sed-i'/httpd-default.conf/a\
Includeconf/extra/httpd-svn.conf'/opt/apache2/conf/httpd.conf
echo'
<Location/svn>
DAVsvn
SVNListParentPathOn
SVNParentPath/opt/svn_repos
AuthTypeBasic
AuthName"SubversionRepository"
AuthUserFile/opt/subversion/conf/passwdfile
AuthzSVNAccessFile/opt/subversion/conf/accessfile
Requirevalid-user
</Location>'>/opt/apache2/conf/extra/httpd-svn.conf
4.3 创建提到的文件
mkdir/opt/subversion/conf
touch/opt/subversion/conf/passwdfile
touch/opt/subversion/conf/accessfile
mkdir/opt/svn_repos
4.4 创建一个repo,添加一个测试账户,配置权限,测试
svnadmincreate/opt/svn_repos/test/ ##创建一个repo
chown-Rapache:apache/opt/subversion/ ##我们通过apache来管理svn的
chown-Rapache:apache/opt/svn_repos/
htpasswd-bm/opt/subversion/conf/passwdfiletest"admin"
echo'
[test:/]
*=r
test=rw'>/opt/subversion/conf/accessfile ##access文件是权限控制文件
4.5 重启apache测试
apachectlrestart
访问http://$IP/svn/test
输入账号,密码
如果看到test - Revision 0: / 证明没问题,继续
五.安装svnmanager,以图形化的方式管理svn
5.1 安装VersionControl_SVN,svnmanager需要它
/opt/php/bin/pearinstallVersionControl_SVN-0.3.4
出现ok,等代表成功
5.2 安装svnmanager
tarxfsvnmanager-1.08.tar.gz
mvsvnmanager-1.08/opt/apache2/htdocs/svnman
5.3 修改配置文件
cp/opt/apache2/htdocs/svnman/config.php.linux/opt/apache2/htdocs/svnman/config.php
vim/opt/apache2/htdocs/svnman/config.php
$htpassword_cmd="/opt/apache2/bin/htpasswd";##意思很明显
$svn_cmd="/opt/subversion/bin/svn";
$svnadmin_cmd="/opt/subversion/bin/svnadmin";
//Subversionlocations
$svn_config_dir="/opt/subversion/conf";
$svn_repos_loc="/opt/svn_repos";
$svn_passwd_file="/opt/subversion/conf/passwdfile";
$svn_access_file="/opt/subversion/conf/accessfile";
$dsn="mysql://svnmanager:admin@localhost/svnmanager"; ##mysql,去掉i
$admin_name="admin";##初始的账号密码
$admin_temp_password="admin";
5.4 创建数据库
mysql
mysql>createdatabasesvnmanager;
mysql>grantallonsvnmanager.*to'svnmanager'@'localhost'identifiedby'admin';
mysql>flushprivileges;
5.5 将VersionControl_SVN拷到svnmanager中
tarxvfVersionControl_SVN-0.3.4.tgz
mvVersionControl_SVN-0.3.4/opt/apache2/htdocs/svnman/VersionControl
chown-Rapache:apache/opt/apache2
5.6 访问测试
http://$IP/svnman
初始账号:admin
初始密码:admin
建立新的管理账号后旧的就停用了
svnmanager用法见/view/4d95d0303968011ca30091a2.html
建立库,与用户后测试。到此svn服务器构建完毕
六.配置svn双机同步
原来有svn服务器,现在做一个镜像服务器,当原来的服务器down掉后可以代替它
源服务器:192.168.17.140
镜像服务器:192.168.17.139
实例同步的为源服器为crm的项目到镜像服务器
6.1 在镜像服务器上建立一新库crm,与具有读写权限的用户
用svnmanager来建,svnadmin create 的话svnmanager中看不到
这个就不写了,假设源上是http://192.168.17.140/svn/crm,镜像的为http://192.168.17.139/svn/crm,用户为:laoguang,密码为:admin 对两个项目都可读可写
6.2 修改镜像服务下项目hook目录下的脚本并启用
cp/opt/svn_repos/crm/hooks/pre-revprop-change.tmpl/opt/svn_repos/crm/hooks/pre-revprop-change
vim/opt/svn_repos/crm/hooks/pre-revprop-change
把最后的exit1改为exit0即可
6.3 镜像服务器执行初始化
svnsyncinitfile:///opt/svn_repos/crm/http://192.168.17.140/svn/crm/
输入具有读写账号密码,root的好像写的不对也没事
比如,我在192.168.17.140的一个账号laoguang 密码 admin
出现Copied properties for revision 0. 代表正确
6.4 开始同步源服务器上的数据
svnsyncsyncfile:///opt/svn_repos/crm/
---------------------------
Storepasswordunencrypted(yes/no)?yes
Transmittingfiledata..............................
Committedrevision1.
Copiedpropertiesforrevision1.
Transmittingfiledata.
Committedrevision2.
Copiedpropertiesforrevision2.
Transmittingfiledata.
Committedrevision3.
Copiedpropertiesforrevision3.
-----------------------------
代表同步成功
6.5 配置当源版本改变时自动同步
下面开始在源服器上操作
cp/opt/svn_repos/qingdao/hooks/post-commit.tmpl/opt/svn_repos/qingdao/hooks/post-commit
chmod755/opt/svn_repos/qingdao/hooks/post-commit
删除未注释的内容
在最下面写上
/opt/subversion/bin/svnsyncsync--non-interactivehttp://192.168.17.139/svn/crm/--usernamelaoguang--passwordadmin
升级源svn版本,测试镜像上同步了没。
七.配置svn 禁止普能用记删除文件
7.1修改源上的钩子脚本
cp/opt/svn_repos/qingdao/hooks/pre-commit.tmpl/opt/svn_repos/qingdao/hooks/pre-commit
chmod+x/opt/svn_repos/qingdao/hooks/pre-commit
vim/opt/svn_repos/qingdao/hooks/pre-commit
REPOS="$1" ##库位置
TXN="$2" ##版本
SVNLOOK=/opt/subversion/bin/svnlook ##svnlook的位置
SCMLIST="admin" ##允许删除的用记
C_USER=`$SVNLOOKinfo-t$TXN$REPOS|sed-n"1p"` ##执行commit的用户
if[-z`echo$SCMLIST|grep$C_USER`];then ## 如果commit的用户没在允许的里面
echo`$SVNLOOKchanged-t$TXN$REPOS`>/opt/svn_repos/qingdao/commit_log ##将操作写入日志
ifcat/opt/svn_repos/qingdao/commit_log|cut-d""-f1|uniq-u|grep"^D";then##如果日志开头包含D(D代表删除)
echo"Youdonothavepermissontodeleteafile">/dev/stderr##提示错误
rm-rf/opt/svn_repos/qingdao/commit_log ##删除文件
exit1 ##错误退出
fi
fi
exit0
到此本文完毕 感谢300second
其它来自百度。