CentOS 6 搭建SVN支持httpd和svnserve独立服务器两种模式 以及邮件配置
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独立服务器两种模式 以及邮件配置的更多相关文章
- Windows2003 IIS6.0支持32位和64位两种模式的设置方法
IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...
- 【Centos】搭建 SVN 服务器
1.如果仅仅只是搭建 svn 服务器: (a).先检查 svn 是否已经安装了 rpm -qa subversion #输入这个命令后,会出现 subversion 版本号 (b).如果没有安装, ...
- (总结)CentOS Linux搭建SVN Server配置详解
PS:虽然在公司linux服务器上搭建过几次svn,但是时间长了,有些配置操作会忘掉,上网搜索的结果都不大满意,有幸在前几天看到一篇算是最满意的svn搭建文章,转载一下以备以后使用,原文地址 ...
- CentOS 7搭建SVN服务器
安装步骤如下: 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /var/svn/svnrepos ...
- Linux(Centos)快速搭建SVN
前言 项目中源码或者文档需要进行管理与版本记录,历数此类工具VSS.CVS.SVN.GIT等等,有非常多的版本控制系统.SVN现在还是很常见,把笔记总结搬上博客,SVN这个再不放以后估计只能写GIT的 ...
- 应用SVN(CentOS中搭建SVN服务器)
简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67 ...
- CentOS Linux搭建SVN服务器
Linux系统:CentOS 安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 可以看到 svn在bin目录下生成了 ...
- CentOS 下搭建SVN
CentOS 7下搭建配置SVN服务器 1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录 ...
- Linux(centos)搭建SVN服务器完美方案及遇到的问题--费元星站长
QQ:971751392 (欢迎交流) linux搭建SVN服务器 安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下 ...
随机推荐
- P2184 贪婪大陆 树状数组
树状数组帅炸了....又被一道水题轻虐,又被学长指出了一个错误....我太菜了QAQ 开两个树状数组,一个记录左端点,一个记录右端点: 共有cnt(总数) - (<l的右端点数目) - (> ...
- 【poj3764】The xor-longest Path
The xor-longest Path Description In an edge-weighted tree, the xor-length of a path p is defined as ...
- Consul实现服务治理
.NET Core微服务之基于Consul实现服务治理 https://www.cnblogs.com/edisonchou/p/9124985.html 一.Consul基础介绍 Consul是Ha ...
- 微信支付(java版本)_支付结果通知
应用场景: 支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新 ...
- 单机版mongodb
1.下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz 下载完成后解压缩压缩包 tar zxf mongod ...
- 安装vs2013提示必须安装ie10的解决办法
虽说应该直接安装ie10,但试了下并不是很顺利,找到如下解决办法,亲测通过. 新建bat文件,内容如下,右键以管理员身份运行,vs即可正常安装. @ECHO OFF :IE10HACK REG ADD ...
- jsonp, json区别
JSONP由两部分组成: 回调函数和数据 回调函数是接收到响应时应该在页面中调用的函数,其名字一般在请求中指定. 数据是传入回调函数中的JSON数据. jsonp var script=documen ...
- IDEA SpringBoot +thymeleaf配置
1.pom添加以下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...
- 《移动Web前端高效开发实战》笔记4--打造单页应用SPA
路由是一个单页应用的核心,大部分前端框架都实现了一个复杂的路由库,包括动态路由,路由钩子,组件生命周期甚至服务器端渲染等复杂的功能.但是对于前端开发者而言,路由组件的核心是URL路径到函数的映射,了解 ...
- Centos安装iptables防火墙
一.安装说明: 1.因为centos7.0及以上版本就默认安装了firewall防火墙,但有时候根据项目实际所需,服务器上还是需要安装iptables,以下就是具体的安装步骤: 2.因阿里云在服务器外 ...