Linux下SVN服务器同时支持Apache的http和svnserve独立服务器两种模式且使用相同的访问权限账号

服务器操作系统:CentOS 6.x

1、在服务器上安装配置SVN服务;

2、配置SVN服务同时支持Apache的http和svnserve独立服务器两种模式访问;

3、Apache的http和svnserve独立服务器两种模式使用相同的访问权限账号。

具体操作:

一、关闭SELINUX

vim /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

setenforce 0   #使配置立即生效

二、开启防火墙

基于Apache的http模式,默认端口为80

基于svnserve的独立服务器模式,默认端口为3690

vim /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

service iptables restart 

三、安装Apache

yum install httpd 

#安装基于Apache的http模式访问的支持模块:

yum -y install mod_dav_svn mod_auth_mysql 
chkconfig httpd on               
service httpd start    

cd /etc/httpd/modules/

#查看是否有mod_dav_svn.so和mod_authz_svn.so模块,如果有,说明mod_dav_svn安装成功!

#mod_auth_mysql模块是用数据库存储账号信息,本次教程没有涉及,可以不安装!

注意:如果Apache启动之后提示错误:

httpd:httpd: Could not reliably determine the server's fully qualif domain name, using ::1 for ServerName

解决办法:

vi /etc/httpd/conf/httpd.conf #编辑

ServerName www.example.com:80 #去掉前面的注释

:wq! #保存退出

四、安装SVN

yum install subversion
svnserve --version #查看svn版本信息

五、配置SVN

1、创建svn版本库

mkdir -p /home/svn #创建svn版本库存放目录

cd /home/svn #进入目录

svnadmin create /home/svn/project1 #创建svn版本库project1

svnadmin create /home/svn/project2 #创建svn版本库project2

svnadmin create /home/svn/project3 #创建svn版本库project3

2、设置配置文件

mkdir -p /home/svn/conf #创建配置文件目录

cp /home/svn/project1/conf/passwd /home/svn/conf/passwd #拷贝账号密码配置文件模板

cp /home/svn/project1/conf/authz /home/svn/conf/authz #拷贝目录权限配置文件模板

cp /home/svn/project1/conf/svnserve.conf /home/svn/conf/svnserve.conf #拷贝全局配置文件模板

vi /home/svn/conf/passwd #编辑,添加以下代码

[users]

# harry = harryssecret

# sally = sallyssecret

osyunwei=

osyunwei1=

osyunwei2=

osyunwei3=

vi /home/svn/conf/authz #编辑,添加以下代码

[groups]

admin = osyunwei

project1 = osyunwei1

project2 = osyunwei2

project3 = osyunwei3

[/]

@admin = rw

* =

[project1:/]

@admin = rw

@project1 = rw

* =

[project2:/]

@admin = rw

@project2 = rw

* =

[project3:/]

@admin = rw

@project3 = rw

* =

vi /home/svn/conf/svnserve.conf #配置全局文件,在最后添加以下代码

[general]

anon-access=none #禁止匿名访问,设置为none。默认为read,参数:read,write,none

auth-access=write #授权用户写权限

password-db=/home/svn/conf/passwd #用户账号密码文件路径,可以写绝对路径

authz-db=/home/svn/conf/authz #访问控制权限文件路径,可以写绝对路径

realm=svn #每个SVN项目的认证命,会在认证提示里显示,建议写项目名称。

3、启动SVN

svnserve -d -r /home/svn --config-file /home/svn/conf/svnserve.conf --listen-port 

#--config-file后面跟全局配置参数文件

ps -ef|grep svn|grep -v grep #查看进程

netstat -ln |grep 3690 #检查端口

killall svnserve #关闭svn

4、添加svn服务开机启动脚本:

vi /etc/init.d/svn     #编辑,添加以下代码

#!/bin/sh

# chkconfig:   

# processname: svn

svn_bin=/usr/bin

svn_port=

svn_home=/home/svn

svn_config=/home/svn/conf/svnserve.conf

if [ ! -f "$svn_bin/svnserve" ]

then

echo "svnserver startup: cannot start"

exit

fi

case "$1" in

start)

echo "Starting svnserve..."

$svn_bin/svnserve -d -r $svn_home --config-file $svn_config --listen-port $svn_port

echo "Successfully!"

;;

stop)

echo "Stoping svnserve..."

killall svnserve

echo "Successfully!"

;;

restart)

$ stop

$ start

;;

*)

echo "Usage: svn { start | stop | restart } "

exit 

esac
chmod +x /etc/init.d/svn #添加执行权限

chkconfig svn on #开机自启动

service svn start #启动

六、配置svn支持http访问

1、创建账号密码认证文件

htpasswd -cm /home/svn/conf/http_passwd osyunwei

htpasswd -m /home/svn/conf/http_passwd osyunwei1

htpasswd -m /home/svn/conf/http_passwd osyunwei2

htpasswd -m /home/svn/conf/http_passwd osyunwei3

根据提示输入2次密码即可。

注意:

/home/svn/conf/目录下面passwd文件是svnserve独立服务器使用的认证文件,密码没有加密,明文显示。

/home/svn/conf/目录下面http_passwd文件是Apache的http模式使用的认证文件,密码使用MD5加密。

passwd和http_passwd文件中,账号密码必须设置相同。

2、设置Apache配置文件

vi /etc/httpd/conf.d/subversion.conf #编辑,在最后添加以下代码

<Location /svn>

DAV svn

#SVNPath /home/svn

SVNParentPath /home/svn

# # Limit write permission to list of valid users.

# <LimitExcept GET PROPFIND OPTIONS REPORT>

# # Require SSL connection for password protection.

# # SSLRequireSSL

#

AuthType Basic

AuthName "Authorization SVN"

AuthzSVNAccessFile /home/svn/conf/authz

AuthUserFile /home/svn/conf/http_passwd

Require valid-user

# </LimitExcept>

</Location>

3、设置目录权限

chown apache:apache /home/svn -R #设置svn目录所有者为Apache服务运行账号apache

4、重启Apache服务

service httpd restart 

七、测试svn

Windows下安装svn客户端TortoiseSVN。

TortoiseSVN下载地址:http://tortoisesvn.net/downloads.html

安装完成之后,桌面-右键单击,选择TortoiseSVN-版本库浏览器

URL输入:svn://192.168.21.134/project1

用户名:osyunwei1

密码:123456

勾选:保存认证

确定

可以进入project1版本库目录,右键单击之后,可以选择创建文件夹等操作。

URL输入:http://192.168.21.134/svn/project1

用户名和密码跟上面一样,可以进入project1版本库目录,右键单击之后,可以选择创建文件夹等操作。

project1访问:

svn://192.168.21.134/project1

http://192.168.21.134/svn/project1

用户名:osyunwei1

密码:123456

project2访问:

svn://192.168.21.134/project2

http://192.168.21.134/svn/project2

用户名:osyunwei2

密码:123456

project3访问:

svn://192.168.21.134/project3 #svnserve独立服务器模式

http://192.168.21.134/svn/project3 #Apache的http模式

用户名:osyunwei3

密码:123456

扩展阅读:

1、Apache htpasswd命令选项参数说明

-c 创建一个加密文件

-n 不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上

-m apache htpasswd命令采用md5算法对密码进行加密

-d apache htpasswd命令采用CRYPT算法对密码进行加密

-p apache htpasswd命令不对密码进行进行加密,即明文密码

-s apache htpasswd命令采用SHA算法对密码进行加密

-b 在apache htpasswd命令行中一并输入用户名和密码而不是根据提示输入密码

-D 删除指定的用户

2、SVNPath 与 SVNParentPath区别:

SVNParentPath:支持多个相同父目录的SVN版本库。

SVNPath:只支持一个主目录的SVN版本库,如果在主目录下面建新项目,则提示无权访问。

如果需要备份svn仓库可以使用 svnadmin dump D:\Repositories\pc-api >  C:\Users\Administrator\Desktop\svnbak\pc-api.dump

恢复使用:svnadmin load /home/svn/pc-api < /home/svn/pcapi.dump

八、 邮件配置

将sendmail.py和post-commit文件放到对应仓库hooks文件目录下:

sendmail.py    需要更改邮箱的一些配置 (邮箱smtp地址、账号密码、仓库名、收件人列表)

#coding:utf-8

import sys

import os

import smtplib

from email.mime.text import MIMEText

from email.header import Header

mail_host= 'smtp.163.com' #发送邮件的smtp地址
mail_user= 'your_username' # 发送通知邮件的用户名
mail_pass= 'your_passwd' # 用户的密码
me= '版本库:你的仓库名' + '<' + 'svn' + '@' + 'test.com' + '>' #发送邮件人的地址标识
to_list= ['test1@test.com','test2.test.com'] # 收件人 html_template= """
<html>
<h2 style="color:#FFFFFF; background: #008040;">基本信息</h2>
<div> <b>版本库:</b>
<a href="svn:%s">%s</a>
</div>
<div>
<b>版本号:</b>%s
</div>
<div>
<b>提交者:</b>%s
</div>
<div>
<b>提交时间:</b>%s
</div>
<h2 style="color:#FFFFFF; background: #4682B4;">提交说明</h2> <font size="4" color="#BF6000"><xmp>%s</xmp></font>
<h2 style="color:#FFFFFF; background: #5353A8;">文件清单</h2>
<xmp>%s</xmp>
<hr>
<center>
Powered by "xx科技"
<a href="http://xxx.com">SCM</a>
</center>
</html> """ def get_repo_name(repo):
return os.path.basename(repo) def get_author(repo, rev):
"""svnlook author -r REV REPOS 获得提交者
"""
cmd = '%s author -r %s %s' % (svnlook_bin_path, rev, repo)
output = os.popen(cmd).read()
return output def get_date(repo, rev):
"""svnlook date -r REV REPOS 获得提交时间
"""
cmd = '%s date -r %s %s' % (svnlook_bin_path, rev, repo)
output = os.popen(cmd).read()
return output def get_log(repo, rev):
"""svnlook log -r REV REPOS 获得提交日志
"""
cmd = '%s log -r %s %s' % (svnlook_bin_path, rev, repo)
output = os.popen(cmd).read()
return output def get_file_list(repo, rev):
"""svnlook changed -r REV REPOS 获得发生变更的文件
"""
cmd = '%s changed -r %s %s' % (svnlook_bin_path, rev, repo)
output = os.popen(cmd).read()
return output def send_mail(msg, sender, to_list):
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(sender, to_list, msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False def write_mail(sender, to_list, sub, content):
msg = MIMEText(content, _subtype = 'html', _charset='utf-8')
msg['Subject'] = sub
msg['From'] = sender
msg['To'] = ';'.join(to_list)
msg["Accept-Language"]="zh-CN"
msg["Accept-Charset"]="ISO-8859-1,utf-8"
return msg global svnlook_bin_path def write_mail_content(repo, rev):
"""
repo: repository
rev: revision
"""
repo_name = get_repo_name(repo)
author = get_author(repo, rev)
date = get_date(repo, rev)
log = get_log(repo, rev)
file_list = get_file_list(repo, rev)
content = html_template % (repo, repo_name, rev, author, date, log.decode("GBK").encode('UTF-8'), file_list.decode("GBK").encode('UTF-8'))
return content if __name__ == '__main__':
svnlook_bin_path = '"/usr/bin/svnlook"' subject = 'SVN Commit Notification'
content = write_mail_content(sys.argv[1], sys.argv[2])
msg = write_mail(me, to_list, subject, content)
send_mail(msg, me, to_list)

post-commit      需要将脚本中HOOK_DIR改成你的svn仓库地址

#!/bin/sh

REPOS="$1"
REV="$2"
export LANG=zh_CN.UTF-
HOOK_DIR="/home/svn/repo/hooks"
PYTHON_BIN=/usr/bin/python
$PYTHON_BIN $HOOK_DIR/sendemail.py $REPOS $REV

CentOS 6 搭建SVN支持httpd和svnserve独立服务器两种模式 以及邮件配置的更多相关文章

  1. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  2. 【Centos】搭建 SVN 服务器

    1.如果仅仅只是搭建 svn 服务器: (a).先检查 svn 是否已经安装了 rpm -qa subversion #输入这个命令后,会出现 subversion 版本号   (b).如果没有安装, ...

  3. (总结)CentOS Linux搭建SVN Server配置详解

         PS:虽然在公司linux服务器上搭建过几次svn,但是时间长了,有些配置操作会忘掉,上网搜索的结果都不大满意,有幸在前几天看到一篇算是最满意的svn搭建文章,转载一下以备以后使用,原文地址 ...

  4. CentOS 7搭建SVN服务器

    安装步骤如下: 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /var/svn/svnrepos ...

  5. Linux(Centos)快速搭建SVN

    前言 项目中源码或者文档需要进行管理与版本记录,历数此类工具VSS.CVS.SVN.GIT等等,有非常多的版本控制系统.SVN现在还是很常见,把笔记总结搬上博客,SVN这个再不放以后估计只能写GIT的 ...

  6. 应用SVN(CentOS中搭建SVN服务器)

    简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67 ...

  7. CentOS Linux搭建SVN服务器

    Linux系统:CentOS 安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 可以看到 svn在bin目录下生成了 ...

  8. CentOS 下搭建SVN

    CentOS 7下搭建配置SVN服务器 1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录 ...

  9. Linux(centos)搭建SVN服务器完美方案及遇到的问题--费元星站长

    QQ:971751392 (欢迎交流) linux搭建SVN服务器 安装步骤如下: 1.yum install subversion   2.输入rpm -ql subversion查看安装位置,如下 ...

随机推荐

  1. js json与字符串相互转换

    JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串

  2. 【考试记录】2018 山东省队集训第一轮D4(雾)

    T1题意: 给你一个$n\times m$的矩阵$B$,求它能由最少多少个形如两个向量之积$(n\times 1)\times(1\times m)$的矩阵相加得到. 题解: 考虑上界,最多需要$mi ...

  3. High waits on control file sequential read

    High waits on control file sequential read (文档 ID 2277867.1) In case we run into an issue where cont ...

  4. STM32之ADC(内部基准电压,参考电压)

    转 STM32内部参照电压VREFIN的使用 https://blog.csdn.net/uncle_guo/article/details/50625660 每个STM32芯片都有一个内部的参照电压 ...

  5. oracle备份imp命令大全

    oracle中imp命令详细解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...

  6. Unity3d网格合并

    几个不同的物体,在Unity3d中可以将网格合并在一起,用于优化. 在Unity3d中构建临时场景如下:建一C#脚本名为"CombineMeshes",挂在Cube上. Combi ...

  7. [转]Todd.log - a place to keep my thoughts on programming 分布式架构中的幂等性

    Todd.log - a place to keep my thoughts on programming 理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式. ...

  8. VueJs $watch()方法总结!!

    最近公司用vue框架写交互,之前没怎么写过,但是很多数据双向绑定的东东跟angular很像!所以上手很快!哈哈 今天就碰到一个vue的问题啊!!产品需求是,datetimepick时间选择器一更改时间 ...

  9. C++ string 类型提取字符串

    在某些情况下需要对输入的字符串进行处理,提取其中的需要的信息. 比如在linux中输入"mkdir test",新建test文件夹,就需要提取其中的test字符. 提取的方法需要b ...

  10. Android商城开发系列(一)——开篇

    最近在看尚硅谷的硅谷商城视频,想系统学习一下Android的商城开发流程,打算跟着视频的一步步做出一个商城,然后写博客总结记录一下整个商城的开发过程以及使用到的技术知识点,这个商城的最终效果如下图所示 ...