怎樣使用Docker鏡像搭建SVN的容器服務

一、簡述

1.基礎環(huán)境

  • Debian GNU/Linux 9.9 (stretch)
  • Docker version 19.03.4

實際上,使用其他Linux發(fā)行版本也是一樣的,我在操作的時候使用阿里云的Debian 9.9服務器。關于什么是SVN,這里不會累贅說明,此處只是給大家演示如何基于第三方鏡像搭建SVN服務

2.開啟簡單的容器實例

本次安裝我們不寫Dockerfile來構建鏡像,直接使用Dockerhub上比較熱門的一個鏡像:elleflorio/svn-server,詳細內(nèi)容可以參考此鏈接:https://hub.docker.com/r/elleflorio/svn-server

使用以下命令創(chuàng)建一個簡單的svn服務

docker run -d --name svn-server -p 3690:3690 elleflorio/svn-server

你還可以選擇性的把本地目錄映射到容器的svn倉庫目錄,如下參數(shù)

-v <hostpath>:/home/svn

二、實際操作過程

假設:現(xiàn)在有這樣的需要,開發(fā)一個PHP項目,在服務器創(chuàng)建一個base代碼倉庫,所有開發(fā)人員可以從服務器把代碼pull到PC進行開發(fā),再上傳到服務器進行自動部署。下面我們基于Docker完成這個過程。

1.下載鏡像,創(chuàng)建容器

# 下載鏡像
docker pull elleflorio/svn-server
# 創(chuàng)建svn倉庫目錄,進入svn倉庫目錄
mkdir -p /var/svn
# 創(chuàng)建svn服務容器,把容器中的svn倉庫映射到本機,并映射3690端口
docker run -d --name svn-server -p 3690:3690 -v "$PWD":/home/svn -v /var/www/html:/var/www/html elleflorio/svn-server

在以上示例代碼中,為了能在svn容器中管理本機的項目目錄,假設本機的項目目錄是/var/www/html,除了映射SVN倉庫目錄,我們同時把本機的/var/www/html映射到svn容器中的/var/www/html目錄。

2.在服務器創(chuàng)建代碼倉庫

# 創(chuàng)建代碼倉庫
docker exec -t svn-server svnadmin create /home/svn/test

以上代碼中,在容器中的/home/svn/test目錄創(chuàng)建代碼倉庫,會同步到本機的/var/svn目錄。我們先進行svn倉庫配置。

SVN庫中的配置目錄 conf 有三個文件:

  • authz 是權限控制文件
  • passwd 是帳號密碼文件
  • svnserve.conf 是SVN服務綜合配置文件

配置權限配置文件 authz
編輯 authz ,內(nèi)容參考如下:
示例代碼:/var/svn/test/conf/authz

[groups]            
#用戶組
admin = master,master  
#用戶組所對應的目錄
[/]                 
#庫目錄權限
@admin = rw         
#用戶組權限
*=r               

配置賬號密碼文件 passwd
編輯 passwd ,內(nèi)容參考如下:
示例代碼:/var/svn/test/conf/passwd

[users]
# harry = harryssecret
# sally = sallyssecret
master = master
admin = admin

配置 SVN 服務綜合配置文件 svnserve.conf
編輯 svnserve.conf ,內(nèi)容參考如下:
示例代碼:/var/svn/test/conf/svnserve.conf

[general]
# force-username-case = none
# 匿名訪問的權限 可以是read、write,none,默認為read
anon-access = none
#使授權用戶有寫權限
auth-access = write
#密碼數(shù)據(jù)庫的路徑
password-db = passwd
#訪問控制文件
authz-db = authz
#認證命名空間,SVN會在認證提示里顯示,并且作為憑證緩存的關鍵字
realm = /var/svn/test
[sasl]

完成以上配置之后,我們要做的是服務器代碼與本地代碼同步,如下圖所示:


4132988081.png

下面,我們將本機電腦代碼推送到SVN倉庫后,服務器又將代碼同步到項目目錄。

3.同步代碼到服務器項目目錄

(1)在PC上將代碼上傳到svn倉庫(PC上必須安裝SVN)

# 將倉庫中的代碼pull到本地,下面的123.123.123.123代表的是服務器IP地址,以下過程可能會需要輸入svn賬號和密碼
svn checkout svn://123.123.123.123/test
# 進入代碼目錄
cd test
# 創(chuàng)建示例文件
echo "hello" >> test.txt
# 提交代碼到SVN倉庫
svn add test.txt
svn commit test.txt -m 'test'

(2)服務器同步代碼

# 將代碼同步到項目目錄
docker exec -t svn-server svn checkout svn://127.0.0.1/test /var/www/html/test --username master --password master --force --no-auth-cache

(3)自動同步代碼

實際上,如果我們用于開發(fā)的PC每一次向服務器提交一次代碼,服務器都需要手動執(zhí)行一下同步命令,本地代碼才會同步到服務器的項目目錄。想必很麻煩,于是我們可以使用SVN提供的鉤子去實現(xiàn)代碼自動更新。

# 進入鉤子配置文件目錄
cd /var/svn/test/hooks
# 復制鉤子文件
cp post-commit.tmpl post-commit

我們將post-commit.tmpl鉤子文件的后綴名去掉即可生效,于是我們復制一份。接下來我們編輯post-commit文件,注釋掉發(fā)送郵件的代碼。然后在下面加上兩行代碼即可,如下:

REPOS="$1"
REV="$2"
TXN_NAME="$3"

#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
# 設置編碼
export LANG="en_US.UTF-8"
# 更新代碼到項目目錄
svn update --username master --password master /var/www/html/test

編輯完成配置文件之后,我們只需要保存即可,自動生效。此時在PC上修改項目內(nèi)容,再次提交到代碼倉庫,服務器會自動同步到服務器的項目目錄。不再需要手動執(zhí)行svn checkout指令

三、總結

本次主要演示了SVN服務器的搭建過程中的一些基本流程。為了減少服務器相關軟件庫的依賴,我們使用第三方Docker鏡像來構建SVN容器服務。實際上和我們直接在操作系統(tǒng)上手動編譯安裝,或者從軟件庫安裝的效果一樣。而容器更好的減少服務器相關依賴,也更好地隔離操作系統(tǒng)的環(huán)境。如果我們不需要SVN服務了,直接將對應容器移除即可。

實際上,如果我們每次創(chuàng)建一個SVN倉庫,都要進行一大堆配置,是一件比較浪費時間的事。開發(fā)者也不應該把過多的時間與精力去“重復造輪子”,而應該把更多的時間和精力去思考更有價值的事物!限于篇幅,本次教程結束。下一節(jié)將演示如何使用Shell腳本快速地完成SVN倉庫搭建,編好腳本后,可以使用一條命令即可完成以上復雜的內(nèi)容。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容