apache2 + fcgid + typo とりあえずなまとめ

mysql なバージョンはナニとして環境構築できたんでまとめを以下に。
パケジのインストールについては詳細を略しますが、大体以下のパケジが入ってればセーフだと思います。環境は言うまでもなく Debian GNU/Linux (testing)。

# dpkg --get-selections|grep apache2
apache2                                         install
apache2-common                                  install
apache2-mpm-worker                              install
apache2-utils                                   install
libapache2-mod-fcgid                            install
# dpkg --get-selections|grep mysql|grep ruby
libmysql-ruby                                   install
libmysql-ruby1.8                                install
#

で、現状の /etc/apache2/mods-available/fcgid.conf は以下。どこからコピペしたんだか忘れた。

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
 
 IdleTimeout 3600
 ProcessLifeTime 7200
 MaxProcessCount 8
 DefaultMaxClassProcessCount 2
 IPCConnectTimeout 8
 IPCCommTimeout 60
 DefaultInitEnv RAILS_ENV production
</IfModule>

社内ブログな環境を構築すべく色々ヤッてたんですが、当初はユーザ毎に typo をインストールして ... と考えておりまして apache2 なドキュメントルート配下に blog というディレクトリを掘って、そこに各ユーザのディレクトリを配置するという形で検討してました。
いちいち手動で typo をインストールするのもナニと思い、スクリプトを作成しております。svn で co した typo をプロトタイプとして使っています。
ちなみに現時点では、typo 内でユーザを作成できる、という事と DB 分けちゃうのってあんまオモシロくないという理由により上記の方針は撤回されてる感じでーす。

スクリプトを以下に。

#!/bin/sh

BLOG_DIR=/var/www/blog

# 1. copy from /var/www/blog/proto to /var/www/blog/$1
proto_setup() {
    cp $BLOG_DIR/proto $BLOG_DIR/$1 -r
    mkdir $BLOG_DIR/$1/cache
    chown -R www-data:www-data $BLOG_DIR/$1
}

# 2. app/controllers/application.rb setup
application_setup() {
    patch $BLOG_DIR/$1/app/controllers/application.rb <<EOF
5a6
>   before_filter :set_charset
59a61,64
>   
>   def set_charset
>     headers["Content-Type"] = "text/html; charset=utf-8"
>   end
EOF
}

# 3. create database
createDB() {
    mysql -u root <<EOF
create database $1 ;
grant all on $1.* to '$1@localhost' identified by 'password' ;
EOF

# migration update
    UPDATE_FILE=$BLOG_DIR/$1/db/migrate/015_convert_mysql_to_innodb.rb 
    cp $UPDATE_FILE $UPDATE_FILE.old
    sed -e 's/ENGINE=InnoDB/ENGINE=InnoDB DEFAULT CHARSET=utf8/' \
        $UPDATE_FILE.old > $UPDATE_FILE

    sed -e 's/ENGINE=InnoDB;/ENGINE=InnoDB DEFAULT CHARSET=utf8;/' \
        $BLOG_DIR/$1/db/schema.mysql.sql | mysql -u root $1

#    mysql -u root $1 < $BLOG_DIR/$1/db/schema.mysql.sql
}

# 4. config/database.yml create
createYAML() {
    cat > $BLOG_DIR/$1/config/database.yml <<EOF
login: &login
  adapter: mysql
  username: $1@localhost
  password: password
  socket: /var/run/mysqld/mysqld.sock
  encoding: utf8

development:
  database: $1_dev
  <<: *login

test:
  database: $1_tests
  <<: *login

production:
  database: $1
  <<: *login
EOF
}

# 5. setup 4 apache2
setup4apache2() {
    APACHE2ROOT=/etc/apache2
    TYPO_HOME=$BLOG_DIR/$1

    cat >$APACHE2ROOT/sites-available/$1 <<EOF
Alias /blog/$1/ "$TYPO_HOME/public/"
Alias /blog/$1 "$TYPO_HOME/public"

<Directory $TYPO_HOME/public/>
    Options ExecCGI FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>
EOF

    ln -s $APACHE2ROOT/sites-available/$1 $APACHE2ROOT/sites-enabled/$1

    patch $TYPO_HOME/public/.htaccess <<EOF
2c2,3
< AddHandler fastcgi-script .fcgi
---
> #AddHandler fastcgi-script .fcgi
> AddHandler fcgid-script .fcgi
21a23
> RewriteBase /blog/$1/
EOF
}

# main

if [ ! -d $BLOG_DIR ] ;
then
    echo "no such directory $BLOG_DIR"
    exit
fi

cd $BLOG_DIR

if [ 0 -eq $# ] ;
then
    echo "no user specified" >&2
    exit
fi

if [ "" = $1 ] ;
then
    echo "no user specified" >&2
    exit
fi

proto_setup $1
application_setup $1
createDB $1
createYAML $1
setup4apache2 $1

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

typo に限らず、apache2 + fcgid + rails でやんなきゃ、な設定はスクリプト読めれば大体分かるんではないかな、と。

ちなみに utf8 な動作確認はしてません。(こら