首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

CentOS 4.2 上 Subversion + Apache 搭建全紀錄:從原始碼編譯到 HTTPS 整合的生產級配置指南

     編輯:Java 相關知識

前言:為什麼要親手編譯安裝?

雖然網路上教程眾多,但版本相依、模組缺失、SSL 配置等細節常導致「按步驟做卻跑不起來」。本文記錄在 CentOS 4.2 上從原始碼編譯安裝 Subversion 1.3.2 + Apache 2.0.55 + Berkeley DB 4.4.20 的完整流程,含 HTTPS 安全通道與權限控管,經實測可直接用於生產環境。

軟體套件準備

  • subversion-1.3.2.tar.gz(1.4 版缺少 configure 腳本)
  • httpd-2.0.55.tar.gz(2.2 版相容性風險未驗證)
  • db-4.4.20.tar.gz(Subversion 必須的底層資料庫)

全部上傳至 /usr/local/ 目錄。

編譯安裝三部曲

1. Apache 2.0.55 —— 必須啟用的關鍵模組

tar -zxvf httpd-2.0.55.tar.gz
cd httpd-2.0.55
./configure --enable-dav --enable-so --enable-ssl --enable-maintainer-mode \
  --prefix=/usr/local/apache2 --enable-mods-shared=all
make && make install

參數解析:

  • --enable-dav:WebDAV 模組,SVN over HTTP 必備
  • --enable-so:動態共享物件支援,載入 mod_dav_svn 等模組
  • --enable-ssl:SSL 模組,HTTPS 加密傳輸基礎
  • --enable-mods-shared=all:編譯所有模組為共享庫,靈活載入

2. Berkeley DB 4.4.20 —— 版本庫儲存引擎

tar -zxvf db-4.4.20.NC.tar.gz
cd db-4.4.20.NC/build_unix/
../dist/configure --prefix=/usr/local/bdb
make && make install

3. Subversion 1.3.2 —— 關聯 Apache 與 BDB

tar -zxvf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-berkeley-db=/usr/local/bdb --with-apxs=/usr/local/apache2/bin/apxs
make && make install

關鍵點:--with-apxs 指定 Apache 的 apxs 工具路徑,自動編譯並安裝 mod_dav_svn.so、mod_authz_svn.so 等 Apache 模組。

驗證安裝

svnadmin --version
# 輸出版本號與支援的儲存後端(fsfs, bdb)即成功

版本庫建立與專案匯入

建立 FSFS 型版本庫

mkdir -p /opt/svn/repos
svnadmin create --fs-type fsfs /opt/svn/repos
# FSFS 格式無需資料庫鎖定,適合高併發、NFS 掛載場景

標準專案目錄結構

/opt/svn/tmp/project_xxx/
├── trunk/     # 主開發線
├── tags/      # 發布標籤
└── branches/  # 分支開發

CVS 遷移清理

find projectname/ -name CVS -exec rm -rf {} \;
# 移除 CVS 管理目錄,避免汙染版本庫

匯入專案原始碼

svn import -m "initial import" /opt/svn/tmp file:///opt/svn/repos

驗證匯入結果

svn list --verbose file:///opt/svn/repos/

權限與 Apache 整合配置

版本庫擁有權設定

chown -R apache.apache /opt/svn/repos
chmod 770 /opt/svn/repos
chmod -R g+w /opt/svn/repos
# Apache 進程用戶需具備讀寫權限

建立使用者認證檔

htpasswd -c /opt/svn/pwd admin  # 密碼設為 123456
chmod a+r /opt/svn/pwd

授權策略檔 /opt/svn/Accesspolicy

[groups]
developers = admin

[repos:/]
@developers = rw
# 可細化至專案、目錄層級:[repos:/project_xxx/trunk]

SSL 憑證產生(自簽,生產環境建議購買 CA 憑證)

# 產生私鑰
openssl genrsa -des3 -out my-server.key 1024
# 產生憑證
openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf

# 放置至 Apache 配置目錄
mkdir /usr/local/apache2/conf/sslfile
mv my-server.key my-server.crt /usr/local/apache2/conf/sslfile/

修改 httpd.conf 核心配置段

User apache
Group apache

LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog logs/SSL.log
LogLevel info

SSLEngine On
SSLCertificateFile conf/sslfile/my-server.crt
SSLCertificateKeyFile conf/sslfile/my-server.key

<Location /svn>
  DAV svn
  SVNPath /opt/svn/repos
  AuthType Basic
  AuthName "svn repos"
  AuthUserFile /opt/svn/pwd
  AuthzSVNAccessFile /opt/svn/Accesspolicy
  require valid-user
  SSLRequireSSL  # 強制 HTTPS,移除此行可同時支援 HTTP
</Location>

啟動與驗證

/usr/local/apache2/bin/apachectl start
# 輸入 SSL 私鑰密碼(openssl genrsa 時設定的密碼)

客戶端測試

svn checkout https://localhost/svn/project_xxx/trunk --username admin
# 接受自簽憑證,輸入密碼 123456,檢出成功即配置完成

常見坑點與避坑指南

  1. 版本相依地雷:Subversion、Apache、BDB 版本必須相容,官方文件的「相容性矩陣」必讀
  2. --with-apxs 路徑錯誤:導致 Apache 模組未編譯,SVN over HTTP 失效
  3. SELinux 阻擋:CentOS 預設開啟 SELinux,需設定 chcon -R -t httpd_sys_content_t /opt/svn/repos 或暫時關閉
  4. 防火牆 443 埠未開放:iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  5. SSLRequireSSL 與 HTTP 共存衝突:若需同時支援 HTTP/HTTPS,移除該指令並建立兩個 Location 區塊

總結

從原始碼編譯安裝雖繁瑣,卻能完全掌控版本、模組與編譯參數,避免套件管理器的版本鎖定與殘留相依問題。本配置採用 FSFS 儲存引擎、Apache 2.0 穩定分支、強制 HTTPS 加密、基於路徑的細粒度授權,構成一套生產就緒的 Subversion 服務基礎設施。後續維運重點:定期熱備份 svnadmin hotcopy、監控磁碟空間、升級 OpenSSL 修補安全漏洞、遷移至 Subversion 1.7+ 享受 HTTPv2 與工作副本格式優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved