subversion可以直接用 svnserve 启动服务,
用 svn://host/repo
访问即可。如果使用 http/https
协议,就要用 Apache
来配合做授权。另外,还需要一个简单的页面来管理用户,分配权限,用submin可以满足这个需求。
submin是Python写的,依赖 libsvn
, 这个包在Centos中安装 subversion
会自动安装,如果系统存在多个Python版本,那么需要做好链接。先上一幅图:
安装其实很简单,下载源码,然后 python setup.py install
,然后运行 submin2-admin /var/lib/submin initenv [email protected]
, 就会安装submin到 /var/lib/submin
目录,然后按提示完成配置文件的生成。
默认会在 conf
中生成包含apache、nginx的配置,而且apache有2.4及2.4以下的两种版本的配置文件,低于2.4的,用到 apache-svn.conf
和 apache-webui-wsgi.conf
这两个文件, apache-trac-
开头的的配置文件是trac用的。
apache-svn.conf 用来配置svn的http协议的,内容如下:
<IfModule !mod_authn_dbd.c>
# Nothing should work, so show a page describing this
AliasMatch "^/svn" /usr/local/lib/python2.7/site-packages/submin/static/www/nomodauthndbd.html
<Location "/svn">
Order allow,deny
Allow from all
</Location>
</IfModule>
<IfModule mod_authn_dbd.c>
DBDriver sqlite3
DBDParams "/srv/www/submin/conf/submin.db"
<IfModule mod_dav_svn.c>
<Location "/svn">
DAV svn
SVNParentPath /srv/svn
AuthType Basic
AuthName "Subversion repository"
# Authentication
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT password FROM users WHERE name=%s"
# Authorization
AuthzSVNAccessFile /srv/www/submin/conf/authz
Satisfy Any
Require valid-user
</Location>
</IfModule>
</IfModule>
apache-webui-wsgi.conf用来配置submin用户管理页面的:
<IfModule mod_wsgi.c>
WSGIScriptAlias "/submin" /usr/local/lib/python2.7/site-packages/submin/static/www/submin.wsgi
AliasMatch ^/submin/css/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/css/$1
AliasMatch ^/submin/img/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/img/$1
AliasMatch ^/submin/js/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/js/$1
<Location "/submin">
Order allow,deny
Allow from all
SetEnv SUBMIN_ENV "/srv/www/submin"
</Location>
</IfModule>
<IfModule !mod_wsgi.c>
AliasMatch "^/submin" /usr/local/lib/python2.7/site-packages/submin/static/www/nowsgi.html
<Location "/submin">
Order allow,deny
Allow from all
</Location>
</IfModule>
可以看到,Python服务是uwsgi,另外就是subversion用到的模块,http.conf中加载的模块如下:
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
一些模块外置,需要用系统的包管理器安装:
mod_dav_svn
apr-util-sqlite
uwsgi、mod_wsgi可以用pip安装, 如果是自编译安装的Python,注意编译时打开 --enable-shared
选项。
submin使用邮件来设置或重置密码,在smtp有问题时,可以用以下命令重置密码:
# 1. 生成密码
openssl passwd -apr1
# 2. 打开数据库
sqlite3 conf/submin.db
# 3. 更新密码
update users set password='$apr1$331' where id=1;
smtp配置命令:
submin2-admin /var/lib/submin
config set smtp_hostname <smtp_host>
config set smtp_port <smtp_port>
config set smtp_username <smtp_user>
config set smtp_password <smtp_pass>
config set smtp_from Submin <[email protected]>
config set commit_email_from Submin <[email protected]>