ラベル Apache の投稿を表示しています。 すべての投稿を表示
ラベル Apache の投稿を表示しています。 すべての投稿を表示

2007年3月21日水曜日

即席リリーススクリプトを作成した

そろそろ、上げれるものが出来てきたので、リリーススクリプトが必要になってきた。
Subversionを使用しているのに、毎回チェックアウトorエクスポートしてFTP経由でサーバーに上げるのもナンセンスなので、サーバー上で動くリリーススクリプトを作成した。

とりあえず思いついた実装内容は、

  1. Subversionリポジトリから、指定のバージョンやタグのApacheのルート部分からごっそりExportする。
  2. CGIのパスを「c:/perl/bin/perl」から、「/usr/local/bin/perl」に書き換える
  3. MySQLの設定をローカルの物から、サーバー用に置き換える。
  4. 指定したディレクトリ(Apacheが外部に公開しているディレクトリ=/home/myways/www配下)へExportしたディレクトリを置き換えるor更新されている部分だけを上書きする。
複数あるローカルの環境はWindowsなので、2番は便利になる。
3番目も、ローカルの設定は同じなので便利になる。
サーバー上でSubversionからExportするには、

/home/myways/local/bin

にパスを通して、(.bashrcで通してある)

svn export --force file:///home/myways/var/svn/myway/trunk/htroot /home/myways/work/rel/

のコマンドで、
/home/myways/var/svn/myway/trunk/htrootから/home/myways/work/rel/へエクスポートが出来る。
シェルスクリプトを作成して、引数でSubversionのディレクトリと、Export先のディレクトリを設定できるようにする。
このコマンドを、

svn export --force /home/myways/var/svn/myway/$1 $2

とすれば、
第1引数で、Subversion上のディレクトリ、第2引数でExport先のディレクトリを指定できる。
Exportしたディレクトリ、ファイルに対して、
CGIのパスと、MySQLの設定を書き換え、置き換えするスクリプトを書くのですが、
シェルスクリプトで書くよりPerlで書いた方が楽だったので、Perlで該当の処理を記述。

長くなるので、コードは割愛して、
内容は、$1と$2を引数で与えて、$1から$2へディレクトリを作成しつつ、コピーをして、
ファイルの場合コピーをする際に、拡張子を見て、「.cgi」なら、
正規表現を使って、Perlのパスを書き換える。
MySQLの設定が記述されたファイルなら、これもまた書き換えるといった内容。
コマンドはこんな感じで実行。
/usr/local/bin/perl release.cgi $3 $2 >> release.log

出来上がったシェルスクリプトは、

#!/bin/sh

LOGFILE=release.log
SVNDIR=$1
EXPORTDIR=$2
TARGETDIR=$3

rm -r $EXPORTDIR
mkdir $EXPORTDIR
svn export --force file:///home/myways/var/svn/myway/$SVNDIR
$EXPORTDIR > $LOGFILE
if [$4 = "clean"]; then rm -r $TARGETDIR fi
perl
release.cgi $TARGETDIR $EXPORTDIR >> $LOGFILE
すべて絶対パスで記述。
第1引数 Subversion上のExportするディレクトリ
第2引数 ExportするWorkディレクトリ
第3引数 Exportしたファイルを配置するディレクトリ
第4引数 cleanなら第3引数のディレクトリを一回削除してから、コピーする
即席なのでこんなもんかな・・・
ログファイルのローテイトと、ディレクトリの確認ぐらいはすればよかったかな。

これを「.bashc」に使いそうなバージョンをaliasで登録しておけばOK。
alias mwyrel="/home/myways/work/rel/release.sh trunk/htroot
/home/myways/work/rel/svn /home/myways/www"

とかしようかなw
パターンが増えてきたらrelease用にsourceするファイルを作成する。

最後にサーバ上のシェルスクリプトのパーミッションの変更を忘れずにする。
chmod 700 /home/myways/work/rel/release.sh
chmod 700 /home/myways/work/rel/release.cgi

これで、FTPは用なしです。

2007年3月20日火曜日

Apacheのファイルインデックスを表示されないようにする(.htaccess)

さくらのApacheの仕様では、
インデックスのファイル(index.html等)がなかった場合、
ディレクトリのインデックス一覧が表示されちゃいます。
また、.htaccessにてOptionsの指定を行うこともできません。
.htaccessにてOptionsを指定した場合、Apacheがエラーをはきます。

さくらのFaqにて
◎ ひみつのフォルダにあるファイルの一覧を見られないようにしたい
より、
DirectoryIndex index.html /errmsg.html
でディレクトリのインデックスにエラー用HTMLを追加する。
とありますが、一個一個HTML作るのもな・・・

さくらの言われたとおりにファイルを作るのも・・・と思たんですが、
文言考えるのも面倒だし、他のいい案が思いうかばなかった。
しょうがないので、インデックスのファイルがないディレクトリはApache経由のアクセスは
全拒否ってことで、↓の記述を追加した。

deny from all

IP選択で拒否でも、なんでもよかったのですが・・・
一応、これで見られることはなくなった。
よく考えるとApache経由で見られてこまるようなファイルを、
Apache経由でアクセスできるディレクトリに置く方がおかしいので、
さくらのFaqのような対応が一番いいのかな。

もう少し対応を考えよう。

2007年3月5日月曜日

Apacheのルート配下のディレクトリ構成

外に見える、Apacheのルート配下のディレクトリ構成のローカルルール。
http://myways.sakura.ne.jp/以下で見えるディレクトリのこと。

ファイル名ルール
  1. htmlファイルの拡張子はhtmlで。
  2. 命名規則は、体は名を表すで、わかり易く。
  3. 英語は正しく使う。スペルミスとか後でわかると恥ずかしいし。(ローマ字はヘボン式)
  4. index.xxxにリンクを張るときは、ディレクトリを指定する。
    例1) http://myways.sakura.ne.jp/index.html ではなくて http://myways.sakura.ne.jp/
    例2) http://myways.sakura.ne.jp/index.cgi?q=myway  
      ではなくて http://myways.sakura.ne.jp/?q=myway
    理由は、拡張子とか中身を替えた時の対応がし易い為、inex.cgiをindex.phpに変えたときに変更が少なくてすむ
  5. 理由がない場合は、相対パスで指定する。CSSは絶対パスでもOK。
ディレクトリ構造
index.html
/js
 Javascript置き場

/css
 CSS置き場

/images
 画像ファイル置き場

/コンテンツのディレクトリ
 必要ならば、各コンテンツディレクトリにも、jsやcssとかimagesのディレクトリを掘るのもOK。
 管理が煩雑になるから、出来るだけ作らない。