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:

  behelpful-svn:
    image: elleflorio/svn-server:latest
    container_name: behelpful-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:
      - behelpful-network

networks:
  behelpful-network:
    # 首次運行需要提前創建網絡 docker network create -d bridge behelpful-network , 或者改為 false
    external: true
    driver: bridge

啟動運行:(在 /opt/docker   路徑下執行,和 docker-compose.yml  文件在同一路徑下)

up -d     是靜默模式啟動,首次啟動我想看以下日志,所以 我沒有加  -d  ,   

docker-compose up behelpful-svn

 

以下廢話部分是為不熟悉 docker 的朋友提供的,高手請忽略,查看日志的方式,靜默模式下啟動查看日志  https://vuepress.mirror.docker-practice.com/

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

或者

docker logs -tf --tail 300 behelpful-svn 

-t : 代表顯示時間   f (沒記錯的話是, flow 跟隨,追隨,也就是實時打印)

--tail 300  顯示尾巴 300 行

behelpful-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
  behelpful-svn:
    image: garethflowers/svn-server:latest
    container_name: behelpful-svn
    restart: always
    privileged: true
    ports:
      - '3690:3690'
    volumes:
      - './svn/data/:/var/opt/svn/'
      - './svn/config:/var/svn/config'
    networks:
      - behelpful-network

networks:
  behelpful-network:
    # docker network create -d bridge behelpful-network
    external: false
    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 # 或者可以這樣配置,所有人可以訪問 * =

3、用戶分組管理配置:

可選的,如果以上第二步中,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、進入容器: behelpful-svn

docker exec -it behelpful-svn(你容器的名稱或ID) /bin/sh         (/bin/sh   可簡化 sh)

或 在 docker-compose.yml 文件路勁

docker-compose exec behelpful-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/技術部

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM