SVN 服务 安装部署 Docker(compose) 方式

通过  dockerhub 或者 命令行运行 : docker search svn  查看 svn  的镜像

如命令行:

[root@SGP ~]# docker search svn
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
garethflowers/svn-server       A simple Subversion server, using `svnserve`.   67                   [OK]
elleflorio/svn-server          Lightweight Docker container running an SVN …   51                   
krisdavison/svn-server         A pre-configured SVN source control server.     26                   
svnedge/app                    SVN Edge Official Release Image                 14                   
paulovsm/svn-server            Subversion + Apache + SVNAdmin                  9                    
。。。。。。。。。。。。。。。。。

由于我并不清楚 svn 服务相关的配置和端口以及工作目录,所以我选择的是 dockerhub  的方式进行查看,然后选择自己想要的版本

因为,通过 dockerhub 可以查看  镜像 的 tag  然后可以查看 Dockerfile  ,从而得知相关配置信息

dockerhub 网址: https://hub.docker.com/     搜索 : svn-server   关键词 ,结果如下图:

我先选择的的是 第二个:elleflorio/svn-server  (此镜像有可视化设置界面,个人反而不喜欢,增加使用成本,后面补充了第二种方式

然后点击进入 详情,----->> tags  ---->> 选择你要的  tag  (我选的 latest)      ,然后可以看到 镜像相关的配置信息,工作目录,数据卷,暴露端口 等等信息,然后可进行 编写 docker 启动文件

此 Dockerfile 中 ,第二行    CMD ["/bin/sh"]    ,并不是 bash,所以 运行此容器后,进入容器的命令并不是 bash  而是 sh 

 docker exec -it 容器名或者容器id sh   或者(compose 部署的) docker-compose exec 容器名或者容器id sh   


>>>>>>>>>>>>>>>>>> 开干 <<<<<<<<<<<<<<<<<<<<

创建 工作目录:(我个人的  /opt/docker/svn/{data,config})

mkdir /opt/docker/svn/{data,config} -p

编写 docker-compose.yml  容器编排文件: (docker-compose.yml 文件在  /opt/dockr    路径下)

version: '3.0'
services:

  iserver-svn:
    image: elleflorio/svn-server:latest
    container_name: iserver-svn
    restart: always
    privileged: true
    ports:
      # IP映射,格式为:宿主机IP:容器IP,3690是svn端口,443 和 80 是 扩展的可视化SVN管理页面端口,
      - '3690:3690' - '3680:80' - '3643:443'、
    # 容器数据卷挂载宿主机,实现持久化,此 镜像文件 elleflorio/svn-server 存在功能扩展,所以配置文件挂载较多,建议使用文章末尾的那个方法的镜像
    volumes:
      - './svn/data/:/home/svn/'
      - './svn/config/passwd:/etc/subversion/passwd'
      - './svn/config/subversion-access-control:/etc/subversion/subversion-access-control'
      - './svn/config/httpd.conf:/etc/apache2/httpd.conf'
    networks:
      - iserver-network

networks:
  # 首次运行需要提前创建网络 docker network create -d bridge iserver-network , 或者改为 false external: true driver: bridge
  iserver-network:
    external: true
    driver: bridge

启动运行:(在 /opt/docker   路径下执行,和 docker-compose.yml  文件在同一路径下)

up -d     是静默模式启动,首次启动我想看以下日志,所以 我没有加  -d  ,   

docker-compose up iserver-svn 

以下废话部分是为不熟悉 docker 的朋友提供的,高手请忽略,查看日志的方式,静默模式下启动查看日志  Docker — 从入门到实践 | Docker 从入门到实践

docker-compose logs -tf --tail 300 iserver-svn

或者

docker logs -tf --tail 300 iserver-svn 

-t : 代表显示时间   f (没记错的话是, flow 跟随,追随,也就是实时打印)

--tail 300  显示尾巴 300 行 

iserver-svn  容器名称,docker-compose 方式启动的,如果不加容器名,则是显示 compose 中编排的所有的容器的日志信息


第一个 SVN 镜像:garethflowers/svn-server

由于镜像  elleflorio/svn-server 的对 SVN 镜像了封装,加入了可视化界面( 容器内为 80 端口 ),加入了权限相关的可视化界面处理,增加了使用成本。

以下提供了 garethflowers/svn-server 镜像的部署方式,且后续的权限,配置 均以 镜像 garethflowers/svn-server 为例

docker 普通运行: ( 此镜像 启动无启动日志输出,启动是会误以为卡主了 )

docker run --name my-svn -d -v /opt/docker/svn/data:/var/opt/svn -v /opt/docker/svn/config:/var/svn/config -p 3690:3690 garethflowers/svn-server

docker-compose 方式:( 此镜像 启动无启动日志输出,启动是会误以为卡主了 )

version: '3.0'
services:
  
  # docker run --name my-svn -d -v /opt/docker/svn/data:/var/opt/svn -v /opt/docker/svn/config:/var/svn/config -p 3690:3690 garethflowers/svn-server
  iserver-svn:
    image: garethflowers/svn-server:latest
    container_name: iserver-svn
    restart: always
    privileged: true
    ports:
      - '3690:3690'
    volumes:
      - './svn/data/:/var/opt/svn/'
      - './svn/config:/var/svn/config'
    networks:
      - iserver-network
      
      
networks:
  # 首次运行需要提前创建网络 docker network create -d bridge iserver-network , 或者改为 false external: true driver: bridge
  iserver-network:
    external: true
    driver: bridge


SVN 服务权限相关配置

SVN 权限核心配置文件就是四个:

1、密码配置文件:           passwd 

2、权限分配配置文件       authz     (可以包含分组信息管理)

3、分组信息管理文件:   groups      (可选的,若配置此文件,则 authz 文件中的  [groups]  将失效)

4、SVN 项目配置文件:   svnserver.conf   ,每创建一个项目,将自动生成 路径为: 你项目的路径/conf/svnserver.conf


抽取全局权限文件统一管理:

配置文件挂载到宿主机,方便修改:

1、passwd:    用户名密码 配置文件

# 用户名密码设置
[users]

# 超级管理员
admin = admin_NB

# 技术部人员信息 (张三李四)
zhangsan= zhangsn@8888
lisi = lisi@8888

# 运营部人员信息
xxx = xxx@8888

2、authz:授权文件

[aliases]
joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

###################################### 分组管理用户(可以直接到下一步 groups 文件中单独管理) #########################
[groups]
# 全体人员
All_MEMBER = admin,zhangsan,lisi

# 技术研发部
YanFaBu = zhangsan,lisi


########################################### 权限分配 r 读,w 写###############################################


# 管理员所有项目都具备读写权限
[/]
admin = rw


# 运营部的 svn 项目文件 只有运营部的人员具备读取读写权限,其他人无权限
[运营部:/]
@YunYingBu = rw


# 技术研发部的 SVN 项目文件,只有技术研发部分组用户具有读写权限
[技术部:/]
@YanFaBu = rw
# 给某某某这个用户名分配只读的权限
某某某 = r

[行政部:/]
@XinZhengBu = rw


# 随手创建一个 test ,所有用户可以 读,不可写 
[test:/]
@All_MEMBER = r
# 或者可以这样配置,所有人可以访问
* = 

可选的,如果以上第二步中,authz 文件中已经配置了 [groups]  则无需单独提去出来一个 groups 文件,但是如果 独立提去出 groups 文件了,则 authz 中的 [groups]  将失效 

[groups]
# 全体人员
All_Member = admin,zhangsan,lisi

# 技术研发部
YanFaBu = xuganglei,zhangsan,lisi

# 运营部
YunYingBu = zhangsan,lisi

# 行政部
XinZhengBu = zhangsan

# 财务部
CaiWuBu = xxxxx,xxx,xxx,xxx,xxxx


创建项目:

具体使用如下:( 以创建一个部门:技术部为例 )

1、进入容器: iserver-svn

docker exec -it iserver-svn(你容器的名称或ID) /bin/sh   
     
# (/bin/sh   可简化 sh) 或 在 docker-compose.yml 文件路劲

docker-compose exec iserver-svn sh 

2、创建项目:在容器中的工作目录:/var/opt/svn/   执行命令创建一个项目(这里我以创建部门为例,我使用的是中文,建议使用英文,使用中文感觉很愚蠢,不知道后续为不会有问题)

/var/opt/svn # pwd
/var/opt/svn
/var/opt/svn # svnadmin create 技术部(这个是你的项目名称,建议使用英文名)

3、配置文件配置:创建完项目之后,后续的操作可以在容器内操作,也可以直接在 宿主机上操作

创建完成的项目结构如下,

/var/opt/svn/技术部 # ls
README.txt  conf        db          format      hooks       locks

配置文件就在 conf 路径下:(其实刚创建好的时候还有两个配置文件的,passwd、authz 因为我的权限文件统一管理在外层,所以被我删除了)

/var/opt/svn/技术部/conf # ls
hooks-env.tmpl  svnserve.conf

svnserve.conf   主要配置的内容如下:

[general] # 配置 匿名用户 / 授权用户 读写权限,read 读权限,write 写权限,none 表示什么权限都没有 anon-access = none auth-access = write # 配置用户密码文件,便于管理,我的是抽取到了全局配置中进行管理 password-db = /var/svn/config/passwd # 用户权限配置文件 authz-db = /var/svn/config/authz # 用户分组管理文件,这个配置是可选的,可以将分组配置信息配置到 authz 文件中 groups-db = /var/svn/config/groups # 项目的路径 realm = /opt/xxx/xxx 可以是路径的形式 realm = 技术部

复制代码

至此,一个项目就配置完成了

连接: svn://ip:port/项目名称   ;比如  :svn://192.168.1.188:3690/技术部

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值