博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS 6 搭建SVN支持httpd和svnserve独立服务器两种模式 以及邮件配置
阅读量:6041 次
发布时间:2019-06-20

本文共 9424 字,大约阅读时间需要 31 分钟。

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版本库project1svnadmin create /home/svn/project2 #创建svn版本库project2svnadmin 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 = sallyssecretosyunwei=123456osyunwei1=123456osyunwei2=123456osyunwei3=123456

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

[groups]admin = osyunweiproject1 = osyunwei1project2 = osyunwei2project3 = 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,noneauth-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 3690

#--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: 2345 85 85# processname: svnsvn_bin=/usr/binsvn_port=3690svn_home=/home/svnsvn_config=/home/svn/conf/svnserve.confif [ ! -f "$svn_bin/svnserve" ]thenecho "svnserver startup: cannot start"exitficase "$1" instart)echo "Starting svnserve..."$svn_bin/svnserve -d -r $svn_home --config-file $svn_config --listen-port $svn_portecho "Successfully!";;stop)echo "Stoping svnserve..."killall svnserveecho "Successfully!";;restart)$0 stop$0 start;;*)echo "Usage: svn { start | stop | restart } "exit 1esac
chmod +x /etc/init.d/svn #添加执行权限chkconfig svn on #开机自启动service svn start #启动

六、配置svn支持http访问

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

htpasswd -cm /home/svn/conf/http_passwd osyunweihtpasswd -m /home/svn/conf/http_passwd osyunwei1htpasswd -m /home/svn/conf/http_passwd osyunwei2htpasswd -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 #编辑,在最后添加以下代码

DAV svn#SVNPath /home/svnSVNParentPath /home/svn# # Limit write permission to list of valid users.#
# # Require SSL connection for password protection.# # SSLRequireSSL#AuthType BasicAuthName "Authorization SVN"AuthzSVNAccessFile /home/svn/conf/authzAuthUserFile /home/svn/conf/http_passwdRequire valid-user#

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-8import sysimport osimport smtplibfrom email.mime.text import MIMETextfrom email.header import Headermail_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= """         

基本信息

版本库:
%s
版本号:%s
提交者:%s
提交时间:%s

提交说明

<div></div> %s<div></div>

文件清单

<div></div> %s<div></div>

Powered by "xx科技"
SCM
""" 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 contentif __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/shREPOS="$1"REV="$2"export LANG=zh_CN.UTF-8HOOK_DIR="/home/svn/repo/hooks"PYTHON_BIN=/usr/bin/python$PYTHON_BIN $HOOK_DIR/sendemail.py $REPOS $REV

 

转载于:https://www.cnblogs.com/Template/p/9151647.html

你可能感兴趣的文章
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
linux
查看>>
C#+QQEmail自动发送邮件
查看>>
[Hadoop]MapReduce多输出
查看>>
我的友情链接
查看>>
SERVLET容器简介与JSP的关系
查看>>
《服务器SSH Public Key认证指南》-补充
查看>>
我的友情链接
查看>>
Java break continue return 的区别
查看>>
算法(Algorithms)第4版 练习 1.3.4
查看>>
jquery easyUI checkbox复选项获取并传后台
查看>>
浅析NopCommerce的多语言方案
查看>>
设计模式之简单工厂模式
查看>>
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
Google Chrome开发者工具
查看>>
第一阶段冲刺报告(一)
查看>>