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

**1\. 安裝 Subversion 1.4**

    [https://subversion.apache.org/](https://subversion.apache.org/)

    [https://tortoisesvn.net/](https://tortoisesvn.net/)

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

**2\. 安裝 Apache 2.0 with OpenSSL**

    [http://httpd.apache.org/download.cgi](http://httpd.apache.org/download.cgi)

   下載這個檔 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

        參考：[https://web.archive.org/web/20230702061653/http://tud.at/programm/apache-ssl-win32-howto.php3](https://web.archive.org/web/20230702061653/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/
