さくらの VPS で遊ぶ (WordPress 編)

昨日に引き続きまして、さくらさんの VPS。 今度は我らが WordPress のインストールに挑戦してみたいと思います。

WordPress なら VPS じゃなくて普通のレンサバでいいじゃないか、という声も聞こえてきそうですが、VPS の場合は レンサバでは自分で自由にいれることができない PHP アクセラレータとか memcached とか、MySQL のクエリーキャッシュとかをいじれるのがポイントになります。

まぁ面白そうだというのが一番だったりもしますです。 🙂

てなわけで さくら VPS は初期状態、本当にまっさらな感じなので、まずは Apache と PHP と MySQL のインストールから。

# yum update
# yum install httpd php php-mbstring php-mysql php-gd mysql-server

まぁこんな感じで…(SSH のログとばしてしまったので、間違っていたらすいません。。)

で、httpd.conf を設定します。 ここではこんな感じで。

   1: # cat /etc/httpd/conf/httpd.conf 
   2: <VirtualHost sakura.maple4ever.net:80>
   3:    ServerName sakura.maple4ever.net
   4:    DocumentRoot /home/apache/sakura.maple4ever.net/public_html
   5:    <Directory /home/apache/sakura.maple4ever.net/public_html>
   6:       AllowOverride all
   7:       Options -MultiViews
   8:    </Directory>
   9: </VirtualHost>

ディレクトリの権限などは chown –R apache:apache しておきます。 また、wp-config.php と .htaccess をつくらせるために public_html に書き込み権限を。 あとで落としてください。 (試験の適当設定なので本気でやるときはユーザを作成するなど注意深くやってください)

でもって、httpd と mysqld を起動して mysql にデータベースを作成。 ここではやってませんが、mysql のパスワードもちゃんと設定のこと。

# /etc/init.d/httpd start
# /etc/init.d/mysqld start
# mysql -u root -p
パスワードは初期状態なし
\ create database 'sakura' default character set utf8 collate utf8_general_ci;

あとはいつも通り、WordPress を public_html にいれて、URL にアクセスでございます。、 🙂

   1: # cd /home/apache/sakura.maple4ever.net/public_html
   2: # wget http://ja.wordpress.org/wordpress-3.0.1-ja.tar.gz
   3: # tar zxvf wordpress-3.0.1-ja.tar.gz
   4: # cp -R wordpress/* .
   5: # rm -Rf wordpress
   6: # cd ..
   7: # chown -R apache:apache public_html
   8: # chmod +w public_html

ということで、無事起動します。 データもプラグインも入っていないのでなかなかさくさく動きます。

いけるか!?。。

これだと実運用の動きが分からないので、hiromasa.another (ここ)のデータをインポートしてみました。 画像の http セッションも確認したかったので、画像も移して URL を置換しています。

いけ~。

[tegaki]きゅるるるるるる、ぼぼん![/tegaki]

ひろまさ「ずがーん、のこりメモリ 40MByte。。。。。」

ひろまさ「ちょっぱ~を寝かせてきます。」

Masayan「…」

失意のひろまさくん。

ちなみにこのブログで一番重い処理は、kougabu のサムネイル作成だったりします。 複数画像を非同期で縮小かけにいくので結構メモリをくいます。(そのため kougabu ではプログラムで一定数以上同時につくらないように動作を制限しています。 なかなかサムネイルできないときあるのはこの機能のせいです)

はたして残りメモリ 40M じゃ、PHP アクセラレータも memcached もいけんわなぁと思いつつ、せっかくだからと言うことでどうなるのか APC のインストールをしてみる。

PHP: 導入 – Manual

Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。

# yum install php-pear php-devel 
# pecl install APC
no と答えた
# vi /etc/php.ini
extension=apc.so # 入れる
# /etc/init.d/httpd restart

うまくはいると phpinfo() にこんなんでます。

sakura21 

そして、WordPress を表示して、いろいろアタックしてみたあとに free。

ひろまさ「なんと、のこりメモリ 200M キター!」

ぼのを「…」

どうやら APC でバイトコードをつくるとメモリ使用量がずいぶん減るようです。(たぶん) しかも速度が 1.5倍くらい速くなりました。

Powered by WordPress. Built on the Thematic Theme Framework. (75 queries.1.902seconds.)

最初は 3秒以上くらいかかっていたのでだいぶいい感じです。

そして調子に乗って memcached も導入して、WordPress コアのクエリなどをキャッシュしてみます。

# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
# yum install memcached php-pecl-memcache
# /etc/init.d/memcached start
# cd /home/apache/sakura.maple4ever.net/public_html/wp-content
# wget http://plugins.trac.wordpress.org/export/285287/memcached/trunk/object-cache.php
# chown apache:apache object-cache.php

これで、PHP から memcached がみえて WordPress が使ってくれるハズです。

sakura20 

で、キャッシュを効かせる感じで、ブラウザからぽちぽちあくせす。。 🙂

Powered by WordPress. Built on the Thematic Theme Framework. (28 queries.1.415seconds.)

1.9 秒かかっていたのが、1.4 秒になりました! (昔やったときはクエリ 4 くらいまで落ちたのですが、テーマとかプラグインなど対応していない SQL のせいかもです。 チューニングの余地あり)

で、しばらく触った後のメモリを観測。

# free
             total       used       free     shared    buffers     cached
Mem:        510532     504212       6320          0       3372     111752
-/+ buffers/cache:     389088     121444
Swap:      2048276      28984    2019292
# memcached-tool 127.0.0.1 display
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1      96B       478s       1       3      no        0        0    0
  2     120B       478s       1       3      no        0        0    0
  3     152B      1068s       1       4      no        0        0    0
  4     192B       963s       1       3      no        0        0    0
  5     240B      1062s       1       3      no        0        0    0
  7     384B       574s       1      34      no        0        0    0
  8     480B       957s       1      62      no        0        0    0
  9     600B       957s       1     145      no        0        0    0
 10     752B       957s       1      32      no        0        0    0
 11     944B      1640s       1       5      no        0        0    0
 13     1.4K      1640s       1       3      no        0        0    0
 14     1.8K      1640s       1       2      no        0        0    0
 16     2.8K      1654s       1       3      no        0        0    0
 17     3.5K       958s       1       4      no        0        0    0
 18     4.4K      1655s       1       4      no        0        0    0
 19     5.5K       958s       1      10      no        0        0    0
 20     6.9K      1644s       1       4      no        0        0    0
 21     8.7K      1655s       1       2      no        0        0    0
 22    10.8K       958s       1       5      no        0        0    0
 23    13.6K       958s       1       4      no        0        0    0
 24    16.9K       958s       1       4      no        0        0    0
 25    21.2K       958s       1       6      no        0        0    0
 26    26.5K         0s       1       0      no        0        0    0

のこり 121M キター。 これならいける。 いける。

さすがに VPS なので CPU 的な部分はやはり遅いようで、ここのコアサバの表示速度には及びませんが(ちなみに最近ひどく調子がいい。 0.3秒くらいでレンダリング終了します)、必ず一定の速度で動けて、その他工夫次第でチューニングもできるので遊ぶには面白いのではないかと思います。

ちなみに今回動かしたサイトは、こんなかんじです。 (そのうち消えます)

ひろましゃ.さくらVPS :o)

というわけで、もうすこしいろいろな角度から検証は必要そうですが、APC いれるとなかなかいけそうな気がします。 もちろん使い方、サイトの規模にもよると思いますので、やられる方は2週間の試用期間で確認するといいと思います。 🙂

以上、デプロイ田中でした。

DVC00012

あ、関係ない。(笑)

さくらの VPS で遊ぶ (Redmine + Subversion 編)

さくらインターネットさんが低価格 VPS をはじめたということで、さらに2週間のお試し期間もあるということで、どういった感じか見るために早速登録してみることにしました。

VPS のポイントは何はなくてもそのメモリ。 さくらさんのは 512M ということで、まずは確実にちょっと厳しいことが予想される、Java + Serlvet + PostreSQL アプリからやってみました。 まぁ実験と言うことで。 🙂

ターゲットは最近おなじみ Redmine と Subversion サーバです。

さくらのVPS|VPS(仮想専用サーバ)はさくらインターネット

さくらのVPSは、仮想化技術を用いて1台の物理サーバ上に複数の仮想サーバを構築し、お客様だけの仮想専用サーバとしてご利用いただけるサービスです。専用サーバの自由度と共用サーバの低価格、そして仮想サーバならではの機能を合わせ持ったホスティングサービス、さくらのVPSをぜひご利用ください。

仮想化 VPS ということで、OS (標準で CentOS 5.5 64bit版)の root のパスワードがもらえます。 root があればどんなアプリ動作環境でもライブラリでも、好きに入れることができるのが最大の嬉しいところ。 ここでは、一般のいわゆるレンタルサーバではサポートされていない、Java + サーブレットの環境をつくってアプリを配置してみました。

ちなみに、コントロールパネルより root のパスワード通知のメールが少し遅れてきて、初期パスワードをどこだどこだと最初に探したのはここだけの秘密です。。

さて、さくらさん VPS で面白いなと思ったのが、コンソールログインがブラウザ上からできること。 JavaScript で実装されている?! top コマンドとかもちゃんとでてすごいですね。

redmine31

これのおかげで、まちがって SSH のサービスおとしちゃったとか、iptables ミスってネットワークログインできなくなっちゃったとかも回復することができます。 他には、OS の起動停止やリソースの閲覧が可能です。 残念ながら仮想マシンのスナップショットバックアップはとれませんが、これは低価格ゆえ仕方がないところでしょう。

では Java + Tomcat6 + PostgreSQL + mod_dav_svn(Subversionサーバ) をインストールしてみます。 まずは気になる初期状態のメモリは以下のような感じでした。 (起動して yum update しただけの状態)

# free
             total       used       free     shared    buffers     cached
Mem:        510532     433784      76748          0      53672     340188
-/+ buffers/cache:      39924     470608
Swap:      2048276          0    2048276

起動サービスはたいぶ初期状態でしぼってあり、バッファ、キャッシュを除いて 470M ほど Free な感じです。

これに mod_dav_svn をインストール。 rpmforge から yum install mod_dav_svn しています。 で、Apache とともに起動。

# free
             total       used       free     shared    buffers     cached
Mem:        510532     442624      67908          0      53804     341040
-/+ buffers/cache:      47780     462752
Swap:      2048276          0    2048276

まぁ起動させただけなので、、460M ほど Free。

次に Redmine で使う PostgreSQL をインストール。 yum install postgresql-server の感じで。

# /etc/init.d/postgresql start
Initializing database:                                     [  OK  ]
Starting postgresql service:                               [  OK  ]
[root@www1431u opt]# free
             total       used       free     shared    buffers     cached
Mem:        510532     483876      26656          0      11332     416120
-/+ buffers/cache:      56424     454108
Swap:      2048276         80    2048196

まぁこちらも起動しただけなので、450M。

で、Tomcat6 をインストール。 jsvc を使ってデーモン起動しています。

まず、jsvc (commons-daemon-1.0.2-native-src) をコンパイルするために、JDK の64bit 版を (jdk-6u21-linux-x64-rpm.bin)をインストールしています。 でもって、起動シェルを以下の感じで。

# cat /etc/rc3.d/S80tomcat6 
#!/bin/sh
#
# chkconfig: - 80 20
# description: jsvc
 
# Source function library.
. /etc/init.d/functions
 
JAVA_HOME=/usr/java/default
CATALINA_HOME=/opt/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS="-Xmx256M -Xms128M"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc
 
start(){
    #
    # Start Tomcat
    #
 
    echo -n "Starting tomcat6: "
    $DAEMON \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
 
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        touch $LOCKFILE
    else
        echo_failure
    fi
    echo
}
 
stop(){
    #
    # Stop Tomcat
    #
    echo -n "Shutting down tomcat6: "
    $DAEMON \
    -stop \
    -pidfile $PIDFILE \
    org.apache.catalina.startup.Bootstrap
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        rm -f $PIDFILE $LOCKFILE
    else
        echo_failure
    fi
    echo
}
 
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $DAEMON
        RETVAL=$?
        ;;
    *)
        echo $"Usage: jsvc {start|stop|restart|status}"
        exit 1
        ;;
esac

CATALINA_OPTS="-Xmx256M -Xms128M" として最大 256M を JavaVM に割り当てみました。 あと、mod_proxy_ajp で Apache を経由させています。

ではいってみましょう。

[tegaki]きゅるるるるるる…、ぼぼん![/tegaki]

redmine30

動きました!

気になるメモリは、、

[root@www1431u logs]# free
             total       used       free     shared    buffers     cached
Mem:        510532     504736       5796          0       3528      33020
-/+ buffers/cache:     468188      42344
Swap:      2048276     382568    1665708

42M。(笑)

この状態でブラウザ操作レベルで、多重アクセスの負荷をかけてみましたがさすがに5多重くらいにすると OutOfMemoru Exception で落ちてしまうようです。

Subverion へ大量ファイル(WordPress のファイル)のコミットもしてみました。 こちらはうまくいきましたが、バックで Redmine を操作するとやはり厳しい模様。 また、tag と trunk など大量の差分比較も難しそうです。(broken pipe してた)

てなわけで、やる前から厳しいなとは思っていたのですが、Java のアプリは 512M だとなかなか厳しそうです。 Redmine に関しては(未検証ですが)素直に Passenger(mod_rails) を使えばうまくいくような気もしますが、ここは実験ということで。 🙂

Tomcat に関しては標準で入っている manager アプリとかおとして、768M メモリだったらいけそうなので、実におしい。。 デプロイ田中もにっこり。

それにしても VPS は手軽面白いですね。 実践的に Linux で遊べるという部分で 1台もっていると何かと嬉しいかもしれません。

てなわけで、次は WordPress を入れてみたいと思います。 お楽しみに。 😀

Redmine を Tomcat6 にデプロイ

先日インストールしましたプロジェクト管理ツールの Redmine ですが、1.0.1 として 1系の正式版がでました!

というわけで、先日は mod_rails で動作させていましたが、せっかくなので今度は JRuby を使って Tomcat6 上にデプロイしてみたいと思います。

なにか利点があるかって話ですが、1パッケージにして JavaVM で動作させておけば、OS にのっている Ruby 実行環境に依存しなくて済むのがいいところ。 gem のバージョン依存とか考えなくていいし、Servlet の実行環境さえあればどこにでも乗せられるのでなかなか便利かもしれません。

とりあえず、.war 玉をつくる作業した環境は以下の通りです。

[hiromasa@localhost ~]$ java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
[hiromasa@localhost ~]$ jruby -v
jruby 1.5.2 (ruby 1.8.7 patchlevel 249) (2010-08-20 1c5e29d) (Java HotSpot(TM) Client VM 1.6.0_21) [i386-java]
[hiromasa@localhost ~]$ sudo /opt/tomcat6/bin/version.sh 
[sudo] password for hiromasa: 
Using CATALINA_BASE:   /opt/tomcat6
Using CATALINA_HOME:   /opt/tomcat6
Using CATALINA_TMPDIR: /opt/tomcat6/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/tomcat6/bin/bootstrap.jar
Server version: Apache Tomcat/6.0.29
Server built:   July 19 2010 1458
Server number:  6.0.0.29
OS Name:        Linux
OS Version:     2.6.18-194.11.1.el5
Architecture:   i386
JVM Version:    1.6.0_21-b06
JVM Vendor:     Sun Microsystems Inc.

まずは、JRuby のインストールから。

$ sudo wget http://jruby.org.s3.amazonaws.com/downloads/1.5.2/jruby-bin-1.5.2.tar.gz
$ sudo tar zxvf jruby-bin-1.5.2.tar.g
$ cat /etc/profile
export JRUBY_HOME=/opt/jruby-1.5.2
export PATH=$PATH:$JRUBY_HOME/bin

でもって、必要な gems を入れていきます。 ぼくは PostgreSQL で動作させているため、jdbc はポスグレのになります。

$ sudo jruby -S gem install rail
$ sudo jruby -S gem install activerecord-jdbcpostgresql-adapter
$ sudo jruby -S gem install warbler
$ sudo jruby -S gem install rack --version '~> 1.0.1

warbler というのが、Rails のアプリを .war 玉にしてくれるありがたいものです。 あと、rack が 1.0.1 じゃないと後で Redmine を動かしたときに Exception するので入れておきます。

でもって、Redmine をダウンロードしてきて、普通に config を設定していきます。 config/database.xml については以下のように。

[hiromasa@localhost redmine-1.0.1]$ cat config/database.yml
# MySQL (default setup).
 
production:
  adapter: jdbcpostgresql
  driver: org.postgresql.Driver
  database: [dbname]
  host: localhost
  username: [username]
  password: [password]
  encoding: utf8
  scheme_search_path: public

以下、Redmine のファイルを置いた直下のディレクトリにて。

これで DB のマイグレーションができるハズです。(ここでは .war をつくるのと同じ環境に入れてます)

$ sudo jruby -S rake db:migrate RAILS_ENV="production"

でもって、いよいよ warbler で .war をつくります。 まずは config をつくってもらいます。

$ sudo jruby -S warble config

ほいでもって、できた config を編集。

config/warble.rb

config.dirs = %w(app config lib log vendor tmp lang)
config.gems << "activerecord-jdbcpostgresql-adapter"
config.gem_dependencies = true
config.webxml.rails.env = 'production'
config.gems["rack"] = "1.0.1"

最後の rack のバージョン指定をしないと依存関係でおちるようです。(新しい方が使われてしまう)

できたら、いよいよ。

   1: $ sudo jruby -S warble

 

[root@localhost redmine-1.0.1]# ls -laF redmine-1.0.1.war 
-rw-rw-rw- 1 root root 17230199  8月 28 16:01 redmine-1.0.1.war

 

[tegaki]キター![/tegaki]

こころを込めて配置します。 ここでは、war つくった環境と同じなのでそのまま…

$ sudo /etc/init.d/tomcat6 stop
$ sudo cp redmine-1.0.1.war /opt/tomcat6/webapps/redmine.war
$ sudo /etc/init.d/tomcat6 start

無事デプロイ成功。 起動しました。 🙂

redmine20

でもって、添付ファイルについてが気になって調べてみたのですが、どうやら WEB-INF/files に置かれる模様。 こんなところに置いてたらちょっとしたことで消えちゃういますのでシンボリックリンクで対応。

$ sudo ln -s /home/apache/redmine/files/ files

デプロイするたびにですが、しょうがないですね。 設定とか実はあるのかもしれませんがとりあえず。 あとは必要なら mod_ajp でつなぐなど。

というわけで、できあがった redmine.jar と Tomcat さえあればどこでも動くようになりました。 とりあえず事務所に持って行きます。。(笑)

DB マイグレーションは、 .war 作成でつかった JRuby 自体もただコピーするだけで他に持って行けると思うので、それでマイグレーション動かするのが良さそうですね。

エクスポートインポートでいければ Stax Networks とかにもデプロイできるかもしれません。(ただしファイルがかけないため、添付ファイルはだめだと思われる)

さて気になる .war ファイルですがほどいてみると以下のようになっていました。

redmine21

画像が小さくて見にくいですが、WEB-INF/gems/gems に依存する gems が格納されるようです。 あとは、ひとつの filter から jruby を起動して .rb を動的コンパイルしつつ動作という感じでしょうか。

動きはきびきびして、いい感じです。 先ほど入れて一通り動作見たばかりなので、もうちょっと動作させてみたいと思います。

以上、デプロイ田中でした。 ざっ。