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/技术部

相关推荐
@泽栖5 小时前
Docker 常用命令
运维·服务器·docker
鲁正杰7 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker
老大白菜8 小时前
Windows 11 安装 Dify 完整指南 非docker环境
windows·docker·容器
VinciYan11 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb12 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao12 小时前
Docker安装Neo4j
docker·容器·neo4j
豆豆豆豆变15 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木15 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学15 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
花晓木15 小时前
k8s备份 ETCD , 使用velero工具进行备份
容器·kubernetes·etcd