The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Win32 安裝 Apache 2.0 with OpenSSL + Subversion 1.4

1. 安裝 Subversion 1.4

    http://subversion.tigris.org/

    http://tortoisesvn.tigris.org/

    安裝完成後,設定「系統環境變數」Path 加入 c:\Program Files\Subversion\bin 目錄

2. 安裝 Apache 2.0 with OpenSSL

    http://httpd.apache.org/download.cgi

    http://apache.cdpa.nsysu.edu.tw/httpd/binaries/win32/

    下載這個檔 apache_2.0.59-win32-x86-openssl-0.9.7j.msi

    安裝時要用「自訂安裝」與用 Port 8080 不要自動啟動影響原本 IIS 的運作

    安裝完成後,先編輯設定檔

        C:\Program Files\Apache Group\Apache2\conf\httpd.conf

            LoadModule dav_module modules/mod_dav.so

            LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
            LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"

            LoadModule ssl_module modules/mod_ssl.so

            # 新增下面設定到 httpd.conf 設定檔的最下方

-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=
<Location /repos>
  DAV svn
  SVNParentPath "C:/SVNRepos"

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile "C:/SVNRepos/passwd.ini"
 
  # only authenticated users may access the repository
  Require valid-user

  # For any operations other than these, require an authenticated user.
  #<LimitExcept GET PROPFIND OPTIONS REPORT>
  #  Require valid-user
  #</LimitExcept>

  # our access control policy
  AuthzSVNAccessFile "C:/SVNRepos/authz.ini"                
 
</Location>
-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=

        C:\Program Files\Apache Group\Apache2\conf\ssl.conf

            將所有 443 改成 3443

    產生 SSL Cert & Key

        參考:http://tud.at/programm/apache-ssl-win32-howto.php3

        建立 C:\Program Files\Apache Group\Apache2\conf\ssl 目錄
        建立 C:\Program Files\Apache Group\Apache2\conf\ssl.key 目錄
        建立 C:\Program Files\Apache Group\Apache2\conf\ssl.crt 目錄

        下載 http://tud.at/programm/openssl.cnf 到 C:\Program Files\Apache Group\Apache2\conf\ssl 目錄下

        進入指令模式執行以下指令:

        # 註解:密碼都用 0000 即可
        openssl req -config openssl.cnf -new -out server.csr


        Country Name (2 letter code) []:TW
        State or Province Name (full name) []:Taiwan
        Locality Name (eg, city) []:Taipei
        Organization Name (eg, company) []:My Company Inc.
        Organizational Unit Name (eg, section) []:R&D Team
        Common Name (eg, your websites domain name) []:svn.mydomain.com
        Email Address []:svn@mydomain.com

        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:0000

        openssl rsa -in privkey.pem -out server.key

        openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
        openssl x509 -in server.crt -out server.der.crt -outform DER

        將 server.crt 移至 C:\Program Files\Apache Group\Apache2\conf\ssl.crt 目錄
        將 server.key 移至 C:\Program Files\Apache Group\Apache2\conf\ssl.key 目錄

    測試一下 Apache2 with SSL 有沒有成功

        C:\Program Files\Apache Group\Apache2\apache.exe -D SSL

    註冊 Apache2 服務

        cd C:\Program Files\Apache Group\Apache2\bin
        Apache.exe -k install
        Apache.exe -k config -D SSL

    啟動 Apache 2

        Apache.exe -k start

3. 建立 SVN Repository 環境

    建立 D:\SVNRepos 目錄

    建立 Apache 的認證的密碼檔 passwd.ini

        d:
        cd \SVNRepos

        "c:\Program Files\Apache Group\Apache2\bin\htpasswd.exe" -c passwd.ini [帳號]
        或
        "c:\Program Files\Apache Group\Apache2\bin\htpasswd.exe" -bc passwd.ini [帳號] [密碼]

    建立 Subversion 的權限檔 authz.ini

-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=
# 先定義群組
[groups]
pm = user1
developers = user1,user2,user3
everyone = *

# 預設拒絕所有人進入瀏覽
[/]
* =
-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=

    建立第一個 SVN Repository

        d:
        cd \SVNRepos

        svnadmin create project1

        備註:不用再修改 project1/conf/svnserve.conf 檔案了,因為都定義在 Apache 的 httpd.conf 裡了

    修改 Subversion 的權限檔 authz.ini

        新增下列幾行到 authz.ini 最下面

-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=
# 語法 ==>  〔儲存庫:專案路徑〕

# 要讓 PM 能 Import 最初始的專案,所以要全部能寫入
[project1:/]
@pm=rw
@developers=r

# 開發人員只能 commit 到 trunk
[project1:/trunk]
@developers=rw

# 只有 PM 可以決定何時該 Release 版本
[project1:/tags]
@pm=rw

# 只有PM 才可以決定是否進行分支開發,若分支開發需要再進行設定權限
[project1:/branch]
@pm=rw
-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=-*=

    匯入專案資料


        - 建立 Working Folder

            D:\Projects
            D:\Projects\Project1
            D:\Projects\Project1\branches        - 先預留空白
            D:\Projects\Project1\tags        - 先預留空白
            D:\Projects\Project1\trunk        - 將所有一開始要開發資料放到這裡!

            D:\Projects\Project1\trunk\docs    - 將所有開發文件放到這裡!
            D:\Projects\Project1\trunk\Website    - 將網站開發的原始檔放到這裡!

        - 匯入專案到 Repository

            cd D:\Projects\Project1

            svn import . https://svn.mydomain.com:3443/repos/project1/

    測試網頁瀏覽SVN儲存庫

        https://svn.mydomain.com:3443/repos/project1/