Archive for 12月 22nd, 2011



22
12月

TortoisesvnでcommitしたらWWWのDocumentRootに自動で反映させる方法(+ポートフォワーディング)


掲題のことを実現するために、まずwebdav経由の方法を考えたのですが、自宅サーバーはcgiはsuexec、phpはsuphpにより実行権限がディレクトリのオーナー(ユーザ)権限で実行されるため、webdavは現実的ではないと判断。(webdav経由だとcommit等がapacheユーザで実行されてしまうため、権限の問題が出てしまうので・・・)

次に、ssh経由の方法を考えたのですが、これも難点があって現実的ではないと判断。

何故かというと、自宅サーバーは外部から接続する場合、ゴニョゴニョして接続元のIPを許可した後、秘密鍵を使ってログインできるようになっています。これだけならいいのですが、許可したIPは一定時間経過すると自動的に無効になるようにしてあるため、commit等を行う度に毎回ゴニョゴニョしてIPを許可して・・・なんて面倒なことをやっていられないわけです。

で、最終的に、sshでポートフォワーディングさせる方法に行き着いたわけです。

■サーバー側の準備
1.svn管理+WWW公開用のアカウントを作成(以下svnuser)
2.svnuserでパスワード無しの公開鍵と秘密鍵を作成

su - svnuser ssh-keygen -t rsa


3.公開鍵をリネーム
cd .ssh/ mv id_rsa.pub authorized_keys


4.秘密鍵(id_rsa)をTortoisesvnを使うクライアントPCに持ってくる
5.svn管理用ディレクトリを作成
mkdir /home/svnuser/svnrepos


6.svnリポジトリを作成
svnadmin create /home/svnuser/svnrepos/hoge(任意の名称)


7.WWWのドキュメントルートが自動更新されるようpost-commitを設置
cd /home/svnuser/svnrepos/hoge/hooks mv post-commit.tmpl post-commit vi post-commit ----- REPOS="$1" REV="$2" #commit-email.pl "$REPOS" "$REV" commit-watchers@example.org #log-commit.py --repository "$REPOS" --revision "$REV" /usr/bin/svn up /home/svnuser/public_html/hoge/ ----- chmod 755 post-commit


8.自動更新の対象となるWWWディレクトリを作成
mkdir /home/svnuser/public_html/hoge


9.自動更新対象のディレクトリをチェックアウト
cd /home/svnuser/public_html/hoge svn checkout file:///home/svnuser/svnrepos/hoge ./

■クライアント側の準備
1.Puttyの公式から「putty.exe」「pageant.exe」「puttygen.exe」をダウンロードしてTortoisesvnのbinフォルダに保存
2.TortoiseSVNの設定メニューからネットワークの設定メニューを出して、SSHクライアントをTortoisePlink.exe(若しくはPuttyの公式からダウンロードしたplink.exe)を選択しておく
3.puttygen.exeを起動して「Load」をクリックしサーバーで作成した秘密鍵(id_rsa)を読み込む(Putty用にコンバートするか?聞かれるのでYesを選択)
4.3が完了したら「save private key」をクリックして適当な名前で保存
5.putty.exeを起動して下記を設定

■Session HostName:SSHの接続先IPまたはホスト Port:SSHの接続先ポート Connection Type:SSH Saved Session:任意の接続名称(例:svnssh) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット ■Connection>SSH>Tunnels Source port:1024以上の任意のポート番号を設定(例:10022) Destination:localhost:22(自宅サーバーから自宅サーバーのSSHに接続) Addをクリックして保存


6.Sessionの項目に戻り「Save」をクリックして保存
7.putty.exeで続いて下記を設定
■Session HostName:localhost(クライアントPC自身のIP) Port:5のSource portで設定したポート番号(例:10022) Connection Type:SSH Saved Session:任意の接続名称(例:svntunnel) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット Addをクリックして保存


8.Sessionの項目に戻り「Save」をクリックして保存
9.pageant.exeを起動して「Saved Sessions」から「svnssh」>「svntunnel」の順に接続する

これでTortoisesvnでcommitすると「/home/svnuser/public_html/hoge」も自動で更新されるようになるし、毎回パスワードを聞かれることもありません。

これで開発が楽になりました( ´ー`)

See Also
Subversionへポートフォワード+puttyで自動ログイン
【Subversion】mod_dav_svn(apache)経由でCommitした時に自動的にupdateを行う