Aliyun服務器 + 寶塔 SVN服務部署筆記

0.參考資料

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
    • 沒有輸出結果則代表端口已被釋放,重新嘗試啟動服務即可