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 な動作確認はしてません。(こら