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 = 技术部 ![复制代码](https://img-blog.csdnimg.cn/img_convert/b3d6faaed2a321cda256654cf5d848e5.gif) 至此,一个项目就配置完成了 连接: svn://ip:port/项目名称 ;比如 :svn://192.168.1.188:3690/技术部

相关推荐
奋斗的老史18 小时前
25年Docker镜像无法下载的四种对策
docker·容器·eureka
chillxiaohan18 小时前
Docker学习记录
学习·docker·容器
柯南二号18 小时前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
新鲜萝卜皮19 小时前
容器内运行的进程,在宿主机的top命令中可以显示吗?
容器
我今天指定是不行了21 小时前
Docker安装与部分应用安装
docker
容器魔方21 小时前
Karmada v1.15 版本发布!多模板工作负载资源感知能力增强
云原生·容器·云计算
streaker30321 小时前
Docker + Jenkins + Nginx 实现前端自动化构建与静态资源发布(含一键初始化脚本)
docker·jenkins
THMAIL1 天前
机器学习从入门到精通 - Python环境搭建与Jupyter魔法:机器学习起航必备
linux·人工智能·python·算法·机器学习·docker·逻辑回归
容器魔方1 天前
全栈AI驱动!华为云云容器引擎CCE智能助手焕新升级
云原生·容器·云计算
13线1 天前
Windows+Docker一键部署CozeStudio私有化,保姆级
docker·容器·开源