使用http访问svn svn+Apache+nginx

发布 : 2019-10-31 分类 : 版本控制 浏览 :

之前介绍了如何 在Linux 搭建SVN服务 并且将代码从Windows中 VisualSVN 迁移至Linux SVN
但有2个小问题

1.服务端的账号密码是明文显示

2.客户端没办法知道有那些代码仓库

这篇就是解决这些问题

安装软件

前面已经安装了 subversion 就可以不用安装了

1
2
3
yum install httpd
yum install mod_dav_svn
yum install subversion

配置

配置apache httpd

配置端口

默认是80 但nginx已经使用了80端口所以需要改一下

vim /etc/httpd/conf/httpd.conf

找到下面这行将80改动一下
Listen 80
改成某个未使用的端口
Listen 81

配置服务

使用httpd服务就可以不需要开启svn服务了,当然还是可以使用的

可以将/etc/httpd/conf.d/welcome.conf删掉
添加svn的服务配置文件
vim /etc/httpd/conf.d/subversion.conf

1
2
3
4
5
6
7
8
9
10
<Location />
DAV svn
SVNListParentPath on
SVNParentPath /svn/repository
AuthType Basic
AuthName "svn.zhouinfo.site svnversion"
AuthzSVNAccessFile /svn/authz
AuthUserFile /svn/password
Require valid-user
</Location>
  • 指定http访问路径
  • SVNListParentPath on 开启父节点展示的解决问题2
  • SVNParentPath /svn/repository svn仓库的父节点路径 将svn仓库都放在这个路径下面就可以使用了
  • AuthzSVNAccessFile /svn/authz 公用svn认证 使用上一篇的文件 里面的账号需要 在password中有
  • AuthzSVNAccessFile /svn/password 解决问题1 加密密码

加密账号密码

需要使用 htpasswd 工具 生成password文件

没有htpasswd可以使用httpd-tools安装
yum install httpd-tools

htpasswd(选项)(参数)

-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。

生成加密文件
在当前目录下生成一个 password文件,用户名zhou,密码:xxxx 默认采用MD5加密方式
htpasswd -bc password zhou xxxx

追加用户或已经有zhou用户就是修改密码 需要输入密码
htpasswd password zhou
删除用户
htpasswd -D password zhou

查看
cat password

改动svn

创建一个仓库的父节点

1
2
3
4
5
6
7
8
9
10
mkdir repository

将所有的仓库都放到这个文件下
mv svnLearn/ repository/

#将文件夹所属组和所属人改成 apache
#不改可以查看但不能提交 因为没有文件修改权限
#可以单独指定某个项目可以提交
chown -R apache:apache repository/
chmod -R 777 repository/

可忽略的步骤

因为上一篇有对svn代码仓库里面的conf/svnserve.conf 现在目录有改动了
需要修改一下才能使用
如果不在使用 svn:// 来访问可以不用下面的步骤

vim svnserve.conf

1
2
3
4
5
6
7
8
[general]
anon-access = none
auth-access = write
password-db = /svn/passwd
authz-db = /svn/authz
realm = svnLearn

[sasl]

与nginx集成

vim /etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
listen 80;
server_name svn.zhouinfo.site;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name svn.zhouinfo.site;
ssl_certificate /etc/letsencrypt/live/zhouinfo.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zhouinfo.site/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/zhouinfo.site/chain.pem;
ssl_dhparam /zhou/ssl/dhparam.pem;

location / {
proxy_pass http://localhost:81;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

nginx泛域名80端口匹配跳转

1
2
3
4
5
server {
listen 80;
server_name ~^(?<subdomain>.+)\.zhouinfo\.site$;
return 301 https://$subdomain.zhouinfo.site$request_uri;
}

启动

1
2
3
4
5
6
7
8
service httpd graceful  #优雅重启
service httpd start #启动
service httpd restart #重新启动
service httpd stop #停止服务

systemctl enable httpd #开机启动

nginx -s reload

使用 svn.zhouinfo.site 输入账号密码就可以查看到 /svn/repository目录下的所有仓库

可以关闭svn 将svn服务kill掉

1
ps -ef | grep 'svn'

下载

svn checkout https://svn.zhouinfo.site:/svnLearn --username zhouinfo --password xxx

注意

  1. Apache启动失败,
    提示:
    httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
1
2
3
sudo vim /etc/httpd/conf/httpd.conf

ServerName localhost:80
  1. Apache启动失败 端口占用
    1
    2
    3
    (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443
    no listening sockets available, shutting down
    AH00015: Unable to open logs
    因为nginx已经使用了443端口了

和nginx集成时如果nginx开启了ssl需要将apache的ssl端口修改一下

1
2
3
4
5
6
sudo vim /etc/httpd/conf/ssl.conf


Listen 443 https
改成不被使用的端口 如442
Listen 442 https
本文作者 : zhouinfo
原文链接 : http://blog.zhouinfo.site/2019/10/31/%E4%BD%BF%E7%94%A8http%E8%AE%BF%E9%97%AEsvn-svn-Apache-nginx/
版权声明 : 本博客所有文章除特别声明外,均采用 CC Apache License 2.0 许可协议。转载请注明出处!
留下足迹