Aliyun服務器 + 寶塔 SVN服務部署筆記
0.參考資料
- 宝塔安装 SVN 搭建svn版本库 https://blog.csdn.net/qq_36672681/article/details/107466057
1. 服務器安裝Svn服務
- 打開寶塔終端,安裝svn

//安裝命令
yum -y install subversion
2. 在指定目錄創建庫
- 如在 /www/svn/myproj下
svnadmin create /www/svn/myproj
3. 進入庫,配置相關權限/用戶配置
- 進入創建完的SVN庫目標下,會看到以下目錄

- 進入conf,需要配置的文件依次為passwd、authz、svnserve.conf

passwd 用戶配置
- 進入創建完的SVN庫目標下,會看到以下目錄

-
如圖,在[users]的兩個範例下直接新增行
- 格式為:用戶名 = 密碼,如這裡的YJSP = 114514
authz 用戶權限配置

- 如圖,這裡可以配置用戶的讀寫權限,直接在文件最下方新增行
[/]
# 用戶名 = 權限(r = read、w = write)
YJSP = rw
- *= 為匿名帳號為限制無權限的意思
svnserve.conf 庫配置

-
這裡主要是來配置這個庫到底應用哪個用戶信息/用戶權限的配置文件,以及這個庫的所屬空間
-
如圖需要把以上幾行取消注釋並修改:
-
anon-access = read 匿名用戶可讀
-
auth-access = write 授權用戶可寫
-
password-db = passwd 庫的用戶配置
-
authz-db = authz 庫的用戶權限配置
-
realm = 庫的路徑,這裡是/www/svn/myproj
-
4. 配置端口
-
svn默認的端口為3690,但是考慮到安全,一般會自定義一個新的端口
-
除了在寶塔裡開放端口,還需要在阿里雲上配置對應的ip規則
-
寶塔:
-
安全->系統防火牆->添加端口規則
-
協議:TCP
-
端口:默認3690,可自定義
-
來源:默認所有IP(任何電腦都可訪問,可指定白名單,下面再說)
-
策略:放行
-
方向:入站
-
-

-
阿里雲或者其他雲服務器控制台:
-
相關的防火牆配置,這裡以阿里雲的輕量服務器為例,基本與上面寶塔的配置保持一致
-
服務器->防火牆->添加防火牆規則
-
應用類型:自定義
-
協議:TCP
-
端口範圍:默認3690,可自定義
-
來源IP:0.0.0.0/0(代表默認所有IP都可訪問,同樣可指定白名單)
-
-
-


配置ip白名單
-
在需要白名單的電腦上,查詢本機的ip地址,這裡以ip.cn為例

-
分別在上面的寶塔配置和阿里雲配置中,給svn開放的端口規則->來源ip中配置:
- 寶塔

- 阿里雲

-
ip地址/32 為指定單一ip
-
ip地址/24 為指定ip域
-
一般用32即可
5. 進入SVN全局配置,配置SVN項目根路徑
-
打開svn全局配置路徑:/etc/sysconfig/svnserve
-
把OPTIONS修改為
#OPTIONS="--daemon --root <SVN所有庫的根目錄> --listen-port=<開放的端口>",如下:
OPTIONS="--daemon --root /www/svn --listen-port=3690"

6. 啟動SVN服務
- 基本工作已經準備好,下一步就是啟動SVN服務
//關停服務
systemctl stop svnserve
- svn服務器啟動後,就會一直運行,直到在終端使用終止服務命令關停
//在終端使用以下命令啟動SVN服務
systemctl start svnserve
-
啟動後可用以下命令查詢服務狀態
- 正常啟動的話會明顯顯示 Active: active(running)
systemctl status svnserve
7. 測試
- 創建本地文件夾用於checkout repo

- 填寫checkout 倉庫的svn路徑,格式為:
svn://服務器的公網ip:端口/repo名

-
然後可能會需要你輸入用戶名和密碼,就是之前在passwd配置裡面配置的,按照輸入即可
-
最後就能正常檢出成功了!

(坑)svnserve: E000098: Can’t bind server socket: Address already in use
- 表示開放的端口已被其他進程占用,用以下命令查詢
#查詢問題端口,如3690
netstat -tulnp | grep :3690
- 執行後輸出以下相似信息:
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1234/svnserve
-
- 1234為占用的進程pid
-
終止進程
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1234/svnserve
- 再重新檢查端口是否已被釋放
netstat -tulnp | grep :3690
-
- 沒有輸出結果則代表端口已被釋放,重新嘗試啟動服務即可