前情提要:福无双至,祸不单行。这句话映射到程序员身上就是不但笔记本电脑进厂了,而且连电脑上近一个月写的代码也丢了。欲哭无泪之际,开始思量着给自己的代码找个安身之所。说起鄙人那堆可怜的代码。最开始的时候,是在台式机上装了本地的SVN服务器。代码不出门,全在家里住。那会毕业不久,写的东西少也不怎么实用。也没有代码库的概念。后来积累的东西多了,遇到的很多问题都属于重复编码。家里的代码库连不上网,那拷硬盘放着呗。老板看你整天用硬盘不爽不说,代码不同步搞到千疮百孔。再后来开始用git了。用着还不错,就是私有化项目这一块没弄,也没敢全往上面传。直到上星期笔记本挂了,丢了几份代码。思来想去,还是得自己开个代码仓库。存到服务器上提交方便,也多份保障吧。
1 程序安装
1.1 sudo apt-get install apache2
安装apache2。如果你已经装了nginx的话。先将nginx停掉。他使用的80端口和后面安装的apache2会冲突。如:/etc/init.d/nginx stop。
安装完之后,如无意外会出现如下报错:
apache2: Could not reliably determinethe server's fully qualified domain name, using 127.0.0.1 for ServerName
在/etc/apache2/httpd.conf(此文件此时为空,是正常的)中增加下面一行:
ServerName 127.0.0.1:80
重启apache2 ,执行 /etc/init.d/apache2restart。出现如下字段表示重启成功。
root@xxxxx:/etc/apache2#/etc/init.d/apache2 restart
* Restarting web server apache2
... waiting ...done.
1.2 sudoapt-get install subversion
安装subversion。略过。
1.3 sudoapt-get install libapache2-svn
安装连接插件。略过。
2 权限
2.1 相关用户、组的设定
执行下面命令:
sudoaddgroup subversion
sudousermod -G subversion -a www-data
查看结果:
cat /etc/group|grep subversion
subversion:x:1001:www-data
2.2 Apache2挂载SVN模块(通过http://访问)
通过 WebDAV 协议访问SVN 文件仓库,必须在/etc/apache2/mods-available/dav_svn.conf中加入下面的代码片段:
<Location/svn/>
DAV svn
SVNParentPath /home/svn
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/conf/dav_svn.passwd
AuthzSVNAccessFile/home/svn/conf/dav_svn.authz
Require valid-user
</Location>
RedirectMatch^(/svn)$ $1/
2.3 用户设置
新建/home/svn/conf目录。为用户设置密码,会以加密方式保存(-c 是新建的意思,去掉就是追加)。后面会提示你输入对应密码的。
htpasswd -c /home/svn/conf/dav_svn.passwd user_1
htpasswd /home/svn/conf/dav_svn.passwd user_2
新建dav_svn.authz 文件,加入如下代码。
[groups]
admin=user_1
user=user_2
[/]
@admin = rw
@user = r
重启apache2。/etc/init.d/apache2 restart
如无意外会出现如下报错
Syntax error on line 65 of/etc/apache2/mods-enabled/dav_svn.conf:
Invalid command'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included inthe server configuration
Action 'configtest' failed.
The Apache error log mayhave more information.
...fail!
原因是没有载入模块。在/etc/apache2/mods-available/dav_svn.load加入下面代码。
LoadModule authz_svn_module/usr/lib/apache2/modules/mod_authz_svn.so
再执行重启/etc/init.d/apache2restart就正常了。
2.4 创建仓库
在/home/svn/目录下新建test目录:mkdir test。
sudochown -R root:subversion test
sudosvnadmin create /home/svn/test
目录授权
sudochmod -R g+rws test
执行查看命令ls test 会发现下面出现如下文件。表示仓库已建好。
conf db format hooks locks README.txt
2.5 验证
重启SVN服务器:killall svnserve; svnserve -d -r/home/svn/
重启apache2服务器:/etc/init.d/apache2 restart
在浏览器打开http://localhost/svn/test。输入用户密码就能看到目录结构了。
后记:
很大机会你会遇到403禁止访问页面。网上有很多解决方法。
如我主要参考的是:http://blog.csdn.net/Ivy_yayaxueyu/article/details/1779653。
You don't have permission to access /svn/ on this server.
Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port80
但都不是我遇到的。我应该是被官方文档给坑了。
当时是按照官方的配置来配/etc/apache2/mods-available/dav_svn.conf文件如下。但是就是因为加上了<LimitExcept GET PROPFIND OPTIONS REPORT></LimitExcept>一直报403。去掉就好了。后来看了一下说明应该还要加一个模块才能实现module(enable it with 'a2enmod')。我就不加了,直接去掉。
</pre><p><pre name="code" class="html"><Location /svn/>
DAV svn
SVNParentPath /home/svn
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/conf/dav_svn.passwd
AuthzSVNAccessFile /home/svn/conf/dav_svn.authz
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
如果出现报错
Can’t open‘/home/svn/test/txn-current-lock’:Permissiondenied
那就重新给他设置一下权限吧
sudo chown -R root:subversion test