apache2.2的優化及模塊安裝

一、安裝

# 解壓縮
tar jxvf httpd-2.2.2.tar.bz2
cd httpd-2.2.0

# vi server/mpm/worker/worker.c
找到下面幾行,並改成如下的數值,其目的是在源碼中修改apache可支持的最大線程數和最大客戶端數目。
# define DEFAULT_SERVER_LIMIT 256
# define MAX_SERVER_LIMIT 40000
# define DEFAULT_THREAD_LIMIT 256
# define MAX_THREAD_LIMIT 40000


# 編譯和安裝 apr 1.2
cd srclib/apr
./configure --prefix=/home/liuchao/local/apr
make
make install

# 編譯和安裝 apr-util 1.2
cd ../apr-util
./configure --prefix=/home/local/apr-util --with-apr=/home/local/apr
make
make install

優化編譯選項及配置apache可加載的模塊
patch -p1 < ../mod_limitipconn-0.22/apachesrc.diff
/usr/local/apache2.2.3/bin/apxs -c -i -a mod_limitipconn.c
/usr/local/apache2.2/bin/apxs -c -i -a mod_evasive20.c

更改2Glogs
export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
然後編譯cronolog即可
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"

./configure --prefix=/usr/local/apache2.2.3 --enable-mods-shared=all --enable-so --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-rewrite --enable-charset-lite --enable-suexec --with-suexec-bin=/usr/sbin/suexec --disable-ipv6 -disable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

# 編譯及安裝
gmake && make install

二、優化apache配置選項

在主配置文件httpd.conf註釋下一行,這樣做的目的是把apache的功能配置分成小文件,便於修改和移植
Include conf/Includes/*.conf

修改MPM(多道處理器)參數
# cd /usr/local/apache2.2
# vi conf/extra/httpd-mpm.conf
找到如下選項,並改成對應的數值

<IfModule mpm_worker_module> 
          ServerLimit           64
          ThreadLimit          128
          StartServers           8
          MaxClients          8192
          MinSpareThreads       64
          MaxSpareThreads       256
          ThreadsPerChild       128
          MaxRequestsPerChild    0
</IfModule>

      ServerLimit              64
      ThreadLimit              64
      StartServers              8
      MaxClients             4096
      MinSpareThreads          64
      MaxSpareThreads         256
      ThreadsPerChild          64
      MaxRequestsPerChild     500

測試過的配置:<IfModule mpm_worker_module>
         ServerLimit          32
         ThreadLimit          64
         StartServers          8
         MaxClients         2048
         MinSpareThreads      64
         MaxSpareThreads      256
         ThreadsPerChild       64
         MaxRequestsPerChild   0
</IfModule>

修改apache2.2子進程所有者
# vi /usr/local/apache2.2/conf/httpd.conf
把daemon改爲nobody
User nobody
Group nobody

一般說來,可以不需要的模塊包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已經過時了
#LoadModule includes_module libexec/mod_include.so
#不需要將沒有缺省index文件的目錄下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#儘量不使用CGI:一直是Apache安全問題最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全認證可以大大提高訪問速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#用於定製log格式
LoadModule config_log_module libexec/mod_log_config.so
#用於增加文件應用的關聯
LoadModule mime_module libexec/mod_mime.so
#用於缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so

可用可不用的有:
#比如:需要在~/username/下調試php可以將
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要將以前的URL進行轉向或者需要使用CGI scrīpt-alias
LoadModule alias_module libexec/mod_alias.so


三、配置模塊

1.配置靜態頁面壓縮輸出模塊deflate

使用mod_deflate模塊

在httpd.conf中加入以下設置:

SetOutputFilter DEFLATE
DeflateFilterNote ratio
SetEnvIfNoCase Request_URI /.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI /.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI /.pdf$ no-gzip dont-vary

或者

DeflateFilterNote ratio
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt

兩種配置方法的作用差不多,其目的主要是把一些不必要壓縮的文件禁止壓縮。

2.配置mod_cache模塊

# cd /usr/local/apache2.2/conf/Includes
# vi mod_cache.conf
在配置文件裏添加如下語句

<IfModule mod_cache>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache>
CacheRoot /
CacheSize 256
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
</IfModule>

LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_mem_cache>
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
</IfModule>
</IfModule>

vi /usr/local/apache2/conf/httpd.conf
在末尾添加上:

CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1

設置虛擬目錄
然後保存退出。啓動apache

參數的解釋:
mod_cache:
CacheEnable: 啓動 mod_cache,其後接兩個參數。第一個參數指定快取的種類,應設爲 mem (記憶體快取) 或 disk (磁碟快取) 之其一;第二個參數指定使用快取的 URI 路徑,如果對整個網站 (或虛擬主機) 進行快取,簡單指定爲根目錄(/) 即可。
CacheForceCompletion: 這個值指定當 HTTP request 被取消時,內容的產生動作要完成的百分比;預設是 60(%)。
CacheDefaultExpire: 指定快取的預設過期秒數;預設值是一小時 (3600)。
CacheMaxExpire: 指定快取最大的過期秒數;預設值是一天 (86400)。
CacheLastModifiedFactor: 用來從迴應裏 Last Modified 資訊算出 expire date。
計算方式是:
expire period (過期時距) = 最後更新後至今的時間間距 * CacheLastModifiedFactor

expire date = 目前時間 + expire period
不過無論如何,過期時間不能超過 CacheMaxExpire 的設定值。

現在。如果用squid對該服務器進行反向代理的話,就可以通過cache 實現web的加速了

3.配置mod_expires模塊

mod_expires可以減少10%左右的重複請求,讓重複的用戶對指定的頁面請求結果都CACHE在本地,根本不向服務器發出請求。

mod_expires的安裝配置:
<IfModule mod_expires>
      ExpiresActive on
      ExpiresByType image/gif "access plus 1 month"
      ExpiresByType text/css "now plus 1 month"
      ExpiresDefault "now plus 1 day"
</IfModule>

註釋:
所有的.gif文件1個月以後過期
所有的文件缺省1天以後過期

4.配置dosevasive模塊
/usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c

編輯httpd.conf,加入以下內容:

LoadModule dosevasive20_module modules/mod_dosevasive20.so
<IfModule mod_dosevasive20>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>

5.配置mod_limitipconn模塊

mod_limitipconn.c是一個非官方的apache防止多線程下載模塊,可以用來作爲WEB文件的下載限制,但是它是使用ExtendedStatus On形式,工作在應用層。當同一個IP的連接到達限制的時候,apache對get請求發送:

HTTP/1.1 503 Service Temporarily Unavailable

從而使用戶不能下載,但並不能阻止這種攻擊,仍舊允許連接的。

# /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c

修改apache配置文件:

# vi /usr/local/apache/conf/httpd.conf


同時需要設置以下參數在 httpd.conf 中 , 也可以在單個虛擬服務器中。
 
ExtendedStatus On

修改配置文件:

1 全局控制:

  在httpd.conf加上以下幾行:

  <IfModule mod_limitipconn>
          <Location />     # 所有虛擬主機的/目錄
            MaxConnPerIP 3       # 每IP只允許3個併發連接
            NoIPLimit image/*    # 對圖片不做IP限制
      </Location>

  <Location /mp3>    # 所有主機的/mp3目錄
    MaxConnPerIP 1           # 每IP只允許一個連接請求   
    OnlyIPLimit audio/mpeg video      # 該限制只對視頻和音頻格式的文件
      </Location >
</IfModule>

2 局部限制,你也可以在虛擬主機的配置文件裏設置IP限制,方法是完全一樣:

  < VirtualHost xx.xxx.xx.xx >
    ServerAdmin [email protected]
    ServerName server.domain.com
          ServerAlias *.domain.com
          UseCanonicalName OFF
          VirtualDocumentRoot /htdoc/domain/%1
  < IfModule mod_limitipconn.c >
        < Location / >      # 所有虛擬主機的/目錄
      MaxConnPerIP 5           # 每IP只允許3個併發連接
            NoIPLimit image/*        # 對圖片不做IP限制
        < /Location >
        < Location /mp3 >      # 所有主機的/mp3目錄
      MaxConnPerIP 2           # 每IP只允許一個連接請求   
      OnlyIPLimit audio/mpeg video # 該限制只對視頻和音頻格式的文件
        < /Location >
  < /IfModule >
  ErrorLog /home/my/logs/error_log
  CustomLog /home/my/logs/access_log common
< /VirtualHost >


重啓apache,用多線程的下載工具下載時,大於3個線程,其餘的將得到信息:
HTTP/1.1 503 Service Temporarily Unavailable

或者根據User_Agent判斷,把已知的多線程工具都給deny 掉
in httpd.conf
.....
BrowserMatch "NetAnt" badguy
BrowserMatch "GetRight" badguy
BrowserMatch "JetCar" badguy
BrowserMatch "Mass Downloader" badguy
BrowserMatch "ReGet" badguy
BrowserMatch "DLExpert" badguy
BrowserMatch "FlashGet" badguy
BrowserMatch "Offline Explorer" badguy
BrowserMatch "Teleport" badguy
...........

order deny,allow
deny from env=badguy
allow from all

注意httpd裏面應該有 mod_setenvif模塊。
在你的apache的conf文件裏面加入
LoadModule limitipconn_module lib/apache/mod_limitipconn.so
ExtendedStatus On

6.安裝modsecurity(mod_security 可以加強apache的安全性,特別是在防sql 注入上有很好的效果。)
下載站點:http://www.modsecurity.org/download/ 

# /usr/local/httpd220/bin/apxs -cia mod_security.c
打開httpd.conf查看是否有如下文字加入

在httpd.conf中添加下列一段mod_security的配置文件

LoadModule security_module      modules/mod_security.so
<IfModule mod_security>
SecFilterEngine On
SecFilterCheckURLEncoding On
SecFilterDefaultAction "deny,log,status:500"
#SecFilterForceByteRange 32 126
#SecFilterScanPOST On
SecAuditLog logs/audit_log
###
SecFilter "/././"
#####
SecFilter /etc/*passwd
SecFilter /bin/*sh

#for css attack
SecFilter "<( | *scrīpt"
SecFilter "<(.| +>"
#for sql attack
SecFilter "delete[ ]+from"
SecFilter "insert[ ]+into"
SecFilter "select.+from"
SecFilter "union[ ]+from"
SecFilter "drop[ ]"
</IfModule>

四、滾卷log

編譯前設置export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
使其支持2G以上文件。

ErrorLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/access_%Y%m%d.log" combined
用gzip壓縮每天的日誌:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log
日誌的定期刪除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f


運行語法檢查命令檢查語法,出現錯誤後繼續調整。
# ./bin/apachectl -t

html網頁跳轉

<title>index.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="0;url=http://210.51.8.179:81">
使apache的日誌文件裏不記錄圖片文件
     找到:  
      LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
      LogFormat "%h %l %u %t /"%r/" %>s %b" common
      LogFormat "%{Referer}i -> %U" referer
      LogFormat "%{User-agent}i" agent
    再後面加上圖片文件的類型
      SetEnvIf Request_URI /.gif$ gif-image
      SetEnvIf Request_URI /.GIF$ gif-image
      SetEnvIf Request_URI /.jpg$ gif-image
      SetEnvIf Request_URI /.JPG$ gif-image
      SetEnvIf Request_URI /.png$ gif-image
      SetEnvIf Request_URI /.js$    gif-image   
      SetEnvIf Request_URI /.bmp$ gif-image
      SetEnvIf Request_URI /.css$ gif-image
      SetEnvIf Request_URI /.mid$ gif-image
      SetEnvIf Request_URI /.swf$ gif-image
      SetEnvIf Request_URI /.mmf$ gif-image
      SetEnvIf Request_URI /.wma$ gif-image
      SetEnvIf Request_URI /.midi$ gif-image
    日誌
      CustomLog /usr/local/apache/logs/access.log combined env=!gif-image

使用兩個
ProxyPassReverse / http://%{HTTP_HOST}:8088/
RewriteEngine on                                         
RewriteCond     %{REQUEST_URI} !.*/.(gif|png|jpg)$
RewriteRule ^/(.*) http://%{HTTP_HOST}:8088/ $1 [P]

Linux下檢測Apache進程數量並自動重啓的腳本

在/etc/crontab裏,定時執行檢測腳本,檢測系統的Apache,和Mysql進程是否超出標準,超標的話,自動重啓,沒有的話,記錄進程數據.

Crontab的內容(每30分鐘執行一次,並將結果記錄在/var/log/chksys.log)

0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log

/usr/local/chksys.sh代碼:

#!/bin/bash
#check apache,mysql thread and auto reboot system
#Powered by ipaddr(aspbiz)

#config
MaxApacheThread=300
MaxMysqlThread=250

NeedReboot=0

ApacheThread=`ps -A|grep http|wc -l`
MysqlThread=`ps -A|grep mysql|wc -l`

if [ $ApacheThread -gt $MaxApacheThread ]
then
NeedReboot=1
fi

if [ $MysqlThread -gt $MaxMysqlThread ]
then
NeedReboot=1
fi

if [ $NeedReboot -eq 1 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S"
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is busy,reboot"
reboot
else
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S"
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is normal"
fi


SVN服務器搭建完全手冊
cvs, 版本控制, 系統維護, Linux, svn準備,下載所需要文件.
檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
編譯SVN,遇到的問題和解決方法
使用 默認文件系統(fsfs) 保存數據
使用 Berkeley DB 保存數據
配置Apache和SVN,測試.
其它小結
從Windows平臺上數據轉移
配置文件,使用其支持對文件中的 $Id$ 標籤每次提交的時候自動更新版本信息.
基於路徑的權限控制
常用SVN命令
相關資源
準備,下載所需要文件
本文測試環境


Linux MY_SERVER 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux


Apache 2.2.2

最新的版本 Subversion 可以在這裏找到 :http://subversion.tigris.org/project_packages.html

檢查已安裝的 Apache2 是否已經安裝了 mod_dav
如果已經成功安裝了Apache,使用 httpd -M 來查看有沒有安裝 dav_module,如果沒有的話 必須附加 ‘–enable-dav’ ‘–enable-dav-fs’ 兩個參數重新編譯 Apache,否則即使編譯通過了svn,apache也會啓動不起來.

編譯APACHE2.2

修改部分源代碼

# vi server/mpm/worker/worker.c

找到下面幾行,並改成如下的數值,其目的是在源碼中修改apache可支持的 最大線程數和最大客戶端數目。

# define DEFAULT_SERVER_LIMIT 256
# define MAX_SERVER_LIMIT 40000
# define DEFAULT_THREAD_LIMIT 256
# define MAX_THREAD_LIMIT 40000

編譯配置
優化編譯選項及配置apache可加載的模塊

# CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" /
> ./configure --prefix=/usr/local/apache2.2 --enable-mods-shared=all /
> --enable-so --with-mpm=worker --enable-deflate /
> --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache /
> --enable-proxy --enable-suexec

編譯及安裝

# gmake && make install

優化apache配置選項
修改MPM(多道處理器)參數

# cd /usr/local/apache2.2
# vi conf/extra/httpd-mpm.conf

找到如下選項,並改成對應的數值

ServerLimit 64
ThreadLimit 128
StartServers 8
MaxClients 8192
MinSpareThreads 50
MaxSpareThreads 256
ThreadsPerChild 128
MaxRequestsPerChild 0

修改apache2.2子進程所有者

# vi /usr/local/apache2.2/conf/httpd.conf
把daemon改爲nobody
User nobody
Group nobody

編譯SVN,遇到的問題和解決方法
使用默認的文件系統保存數據.

最終完整通過安裝和測試的編譯參數爲:

./configure --with-apxs=/usr/local/apache2/bin/apxs /
--with-apr=/home/src/server/httpd-2.2.2/srclib/apr /
--with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util

# make
# make install

其中 /home/src/server/ 爲 httpd-2.2.2 源代碼所在文件夾,根據實際情況調整一下.

遇到問題
–with-apr 和 –with-apr-util 如果沒有加上的話,即使編譯成功了也會出現
Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument

這樣的錯誤提示.

暫時不能使用 Berkeley DB [* 已解決]
svn保存文件更新數據庫的方法有兩個,一種是直接使用 fs (filesystem)來保存,另一種是通過Oracle提供支持的開源數據庫 Berkeley DB 進行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就會configure時就會報錯.

configure: error: APR-UTIL was installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

我想 apr-unit 暫時不支持吧,我們就用默認的fs好了.

在make 的時候可能會遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 兩個文件,找不到而make error.
解決辦法:/usr/local/apache2/lib/ 中找到,將其複製到源代碼文件夾相應的位置中.

UPDATE!!!
使用 BerkeleyDB 保存數據
安裝 BerkeleyDB

cd /usr/local/src
$ wget http://downloads.sleepycat.com/db-4.3.29.tar.gz
$ tar xzvf db-4.3.29.tar.gz
$ cd /usr/local/src/db-4.3.29/build_unix
$ ../dist/configure --enable-compat185
$ make
$ make install
更新apr和apr-util源代碼

# 清理編譯後的.la文件
$ cd /usr/local/src/httpd-2.2.3
$ make clean
$ cd /usr/local/src/subversion-1.3.2
$ rm -rf apr
$ rm -rf apr-util
$ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
$ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./
編譯安裝

# /configure --with-apxs=/usr/local/apache2/bin/apxs /
> --with-berkeley-db=/usr/local/BerkeleyDB.4.3 /
> --with-ssl
# make
# make install

遇到問題
BerkeleyDB 版本不能大於 4.3.否則同樣會出現以下錯誤.
configure: error: APR-UTIL was installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

主要是apr-util 暫時不支持4.4的版本.

必須更新apr,apr-util 源代碼.
subversion-1.3.2 自帶的 apr-util 的版本是0.9.6的,必須升級爲 1.2.7 雖然能編譯過去。但在 svn checkout 的時候會提示

svn: REPORT request failed on ‘/!svn/vcc/default’
svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server.

這個問題困擾了我很長時間,Google和官方論壇都無結果。後來昨天竟然自己無意中解決了,感動的得哭了:)

配置Apache和SVN,測試
成功編譯svn後會在 httpd.conf 中自動加上

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

兩個模塊,沒有的話,自行加上或檢測是否真的編譯成功.

假設我們現在要將一個名爲 Lair 的項目導入到 SVN中

Apache的配置
在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入


DAV svn
SVNPath /home/svn/Lair


可以參考以下apache的配置,實現數據加密傳輸,用戶身份驗證.

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl.

SSLPassPhraseDialog exec:/etc/sendsslpwd
SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex


DocumentRoot /var/SVNRoot
ServerName svn.yousite.com:443
ServerAdmin [email protected]


DAV svn
SVNPath /var/SVNRoot
AuthzSVNAccessFile /etc/svnserve.conf
Satisfy Any
AuthType Basic
AuthName “yousite SVN Repository”
AuthUserFile /etc/httpd-passwords.txt
Require valid-user


SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key


更詳細的配置說明文檔 http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html

配置,並且測試SVN,
創建一個新用戶,用了保存倉庫.

useradd -m svn

創建一個新模塊

# su daemon #(apache是以daemon用戶運行的,所以要切換身份,否則可能會報目錄訪問權限錯誤)
# svnadmin create --fs-type fsfs /home/svn/Lair

導入原來的項目

svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’

重新建立工作目錄

# rm -rf /var/www/Lair ##(注意備份!!)
# svn checkout http://localhost/svn/Lair

測試打開 http://localhost/svn/Lair

如能看到一個你項目錄列表,說明您成功了。

其它小結
數據轉移:
從 Windows 平臺 SVN 服務器轉移
如果windows svn儲存的格式也是dbd的話,直接將SVN的文件夾copy過來即可.然後
執行 svnadmin recover /var/SVNRoot 檢查一下數據庫是否損壞.

最後注意權限,確保 db 目錄下的所有文件可寫。

chmod 755 db
chmod 666 db/*

否則checkout時出現以下錯誤,多數是因爲 文件或者目錄權限問題 引起的,可以嘗試用 chown 或者 chmod 命令修改一下權限


Could not open the requested SVN filesystem


Could not open the requested SVN filesystem


另外一種方法沒有測試過,原理大致和mysqldump一樣,將svn導出爲文本文件,然後重新導入,好處是可以避免因爲存儲格式不同而導致的數據轉移困難。

# dump data to file (assuming a repo @ c:/repo):

svnadmin dump c:/repo > c:/repo.txt
# Copy the file over to linux:
mkdir /repo
svnadmin create /repo
svnadmin load /repo < /repo.txt

設置訪問控制
當 httpd.conf 中 設置 AuthzSVNAccessFile 時,可以設置不同用戶對不同目錄的訪問控制.以下是一個例子.

[groups]
root = admin.root
web = user1,user2
soft = user3,user4

[/]
@root = rw

[/www]

@web = rw

[/soft]
@soft = rw

詳細的說明文檔:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html

配置文件,使用其支持對文件中的 $Id$ 標籤每次提交的時候自動更新版本信息(自動屬性).
Windows : C:/Documents and Settings/%USERNAME%/Application Data/Subversion/config
Linux : ~/.subversion/config
[miscellany]

enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
*.html=svn:keywords=Id

關於自動屬性的更高級討論

幾條常用svn 命令
$ svn update
$ svn add “filename”
$ svn commit


參考
http://subversion.tigris.org/faq.html [FAQ]
http://svnbook.red-bean.com/ [文檔]
http://www.svnforum.org/ [論壇]
http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d
http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
http://www.germane-software.com/~ser/R_n_R/subversion.html#ftn.N45
http://zen.sh.nu/book/zh/index.html 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章