说明

本文基于docker部署线上svn服务,系统、docker版本和镜像信息如下:

CentOS Linux release 7.8.2003 (Core)
Docker version 19.03.13, build 4484c46d9d
docker-compose version 1.27.4, build unknown
docker pull marvambass/subversion:latest

详细部署流程和操作步骤如下~

svn服务文件结构

# pwd
/data
# tree svn-server/ -L 2
svn-server/
├── docker-compose.yml
├── svn
│   └── agsrd
├── svn_backup
└── svn_conf
    ├── dav_svn.authz
    └── dav_svn.passwd

docker-compose.py文件

version: "3.8"
services:
  svn:
    image: marvambass/subversion
    restart: always
    container_name: "svn-server"
    hostname: "svn-server"
    environment:
      TZ: 'Asia/Shanghai'
    deploy:
      replicas: 1
    ports:
      - '10080:80'
      - '10443:443'
    volumes:
      - ./svn:/var/local/svn
      - ./svn_backup:/var/svn-backup
      - ./svn_conf:/etc/apache2/dav_svn

配置用户及其访问权限

在启动服务之前,我们需要建立一下目录和文件~

mkdir -p /data/svn-server/svn
mkdir -p /data/svn-server/svn_backup
mkdir -p /data/svn-server/svn_conf

创建权限配置文件

根据需求创建配置文件 /data/svn-server/svn_conf/dav_svn.authz 示例内容如下:

[groups]
# 管理组
admin = hb.xia

# 研发组
rdgroupall = liy,gt.yuan,chm.ni,yb.he,zhong.pan,hb.xia,jy.wang

# 生产组
pdgroupall =  liy,gt.yuan,chm.ni,zhong.pan,hb.xia

# 人事行政组
adhrgroupall = jy.chen

# 人事行政项目文档
[panboadhr:/]
@adhrgroupall = rw

# AGS 项目研发存放文档
[agsrd:/]
@rdgroupall = rw

# AGS 项目生产存放文档
[agspd:/]
@pdgroupall = rw

# 管理账户有所有账户的访问权限
[/]
@admin = rw

创建对应用户及密码

# 密码文件路径:
/data/svn-server/svn_conf/dav_svn.passwd
# 密码文件在 Docker 中对应路径:
/etc/apache2/dav_svn/dav_svn.passwd
#  若在 svn 容器宿主机上创建密码文件则需在宿主机上安装 svn 密码文件创建工具 
## Ubuntu
sudo apt install apache2-utils
## centos/ubuntu
sudo yum -y install httpd-tools

#  首次创建使用 -c 选项,该选项密码文件不存在时则创建,存在则清空,慎用!
htdigest  -c 密码文件路径 Subversion 用户名

#  向密码文件中添加一个用户
htdigest 密码文件路径 Subversion 用户名

#  宿主机中创建密码文件示例:(按照提示输入添加的用户名的密码)
htdigest -c /data/svn-server/svn_conf/dav_svn.passwd Subversion hb.xia
htdigest /data/svn-server/svn_conf/dav_svn.passwd Subversion yb.he

#  运行的容器中创建密码文件示例:(按照提示输入添加的用户名的密码)
docker exec -i -t svn htdigest -c /etc/apache2/dav_svn/dav_svn.passwd Subversion hb.xia
docker exec -i -t svn htdigest /etc/apache2/dav_svn/dav_svn.passwd Subversion yb.he

启动 docker-compose 服务

cd /data/svn-server
# 后台方式启动服务
docker-compose up -d
# 查看服务运行状态
docker-compose ps
# 查看服务运行日志
docker logs svn-server
# 停止服务
docker-compose down

说明:对外开放的访问端口: 10080 为 http 访问端口; 10443 为 https 访问端口。

svn访问和使用

访问方式

打开浏览器访问:http://yourDockerIp/svn/yourRepo,其中,/svn是默认仓库的路由地址。

仓库创建

如上文中agsrd仓库的创建:

cd /data/svn-server/svn
svnadmin create agsrd

参考文档

Docker 部署 SVN(Subvision) 版本控制服务

镜像Dockerfile地址