さくらの VPS と Apache Tomcat7

突然ですが、さくらの VPS を借りてみることにしました。 🙂

当初はこの VPS に家から VPN でつなぎっぱなしにして、うちのローカルサーバの一部の機能を外に出す使い方を考えていたのですが、まぁ実際そこまでする要件もなさそうなので断念(一応、Android からの接続もできたのですが)。

というわけで、Groovy とか Rails とか PHP 以外のアプリケーションが動作するお遊びサーバとしてスタートです。

最近だとたまにこのサイトでもでてきます、Cloud Bees とか dotCloud とか無料の PaaS つかってもその手のアプリは割と簡単に動かすことができるのですが、無料だとドメインマッピングに制限があったり、ちょっと不自由。 お金を払うとなると VPS と同じくらいかもっと高い料金になりますので、自由度の高いほうに転んだ感じです。

あ、ちなみにここ .another はそのままコアサバです(笑)

というわけで、アプリケーションサーバ選択。 OS はさくら標準の CentOS 5.5 のままです。

Jetty にしようか Tomcat6 、いやいや Tomcat7 でしょ、とか、ここで GlashFish とか。。 しばし考えて、あまり根拠もなく Tomcat7 が選択される。 7 は初めて触りますが、勝手知ったるなんとかでなんとなかるでしょう? 😀

Java6 は Oracle 提供の .rpm を、Apache httpd と PostgreSQL は CentOS のパッケージのものを。 Tomcat7、Groovy は それぞれからの提供のものを /opt に展開インストール。

そういえばバーチャルホストでトム設定するの初めてだったので微妙にてこずりました。。

Groovy のパス設定。(ファイルつくる)

[root@capibara ~]# cat /etc/profile.d/groovy.sh 
# groovy
PATH=/opt/groovy-1.8/bin:${PATH}

ポスグレの表領域位置指定。(標準で /home にパーティションきられているので表領域を /home/postgres に移動。 サービス起動前に前に以下のファイルつくる)

[root@capibara postgres]# cat /etc/sysconfig/pgsql/postgresql 
PGDATA=/home/postgres
[root@capibara postgres]# chkconfig postgresql on
[root@capibara postgres]# service postgresql start

ポスグレ initdb 等。(たとえばユーザつくって redmine の DB 作成の図)

[root@capibara home]# su - postgres
-bash-3.2$ 
-bash-3.2$ initdb -D /home/postgres/
-bash-3.2$ createuser -P redmine
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
-bash-3.2$ createdb redmine -O redmine
CREATE DATABASE

Tomcat7 バーチャルホスト設定。 $CATALINA_HOME/conf/server.xml の Engine に追加。

<Engine name="Catalina" defaultHost="localhost">
  <Host name="apps.maple4ever.net"
     appBase="apps.maple4ever.net"
     unpackWARs="true"
     autoDeploy="true" />
</Engine>

$CATALINA_HOME/apps.maple4ever.net のディレクトリを作成。 ちなみに adduser tomcat して、$CATALINA_HOME 配下を tomcat 権限に、また Tomcat は同ユーザで commons-deamon 起動しています。クラスパスの jar が 6 と違うので要注意。

このディレクトリに .war 入れるとファイル名をコンテキストパスとしてデプロイされます。

Apache のバーチャルホスト及び mod_proxy_ajp 設定。 指定のコンテキストパスを Tomcat になげます。 /etc/hosts や /etc/sysconfig/network なども設定のこと。

[root@capibara www]# cat /etc/httpd/conf.d/proxy_ajp.conf 
 
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
 
NameVirtualHost *:80
 
<VirtualHost *:80>
   ServerName unknown 
   <Location />
      Order deny,allow
      deny from all
   </Location>
</VirtualHost>
 
<VirtualHost *:80>
   ServerName apps.maple4ever.net 
   <Location /captcha-grails>
      ProxyPass ajp://apps.maple4ever.net:8009/captcha-grails
   </Location>
   <Location /click-examples>
      ProxyPass ajp://apps.maple4ever.net:8009/click-examples
   </Location>
</VirtualHost>

Location でおしり / なしにすると、スラつけなくてもいい感じに飛ばしてくれるようです。

てなかんじで、端折っているのであんまりメモにもなっていませんが(笑) 実際には、iptables の設定なども加わるでしょう。

Groovy + Grails のサンプルアプリ。(そのうち消えます)

sakura2011072402

Apache Click のサンプルアプリ。(そのうち消えます)

sakura2011072403

[tegaki]やぁ、動いた![/tegaki]

さすがに JVM だけあってさくさく動きますね。

sakura2011072401

さくら VPS はメモリ 1G のサーバにしていますが、これで残りメモリ 400M ほど。 ポスグレがフル稼働していないのでなんともですが、アプリが 1つか 2つは動きそうな感じです。

さて、何して遊びましょう。 🙂

スマートフォン対応。

このサイトをスマートフォン表示対応してみました。 対応といっても基本 WordPress 3.2 のデフォルトテーマ twentyeleven にしただけなのですが。。(笑) リキッドデザインでそのまんま横幅が狭いブラウザで表示される感じで面白いですね。 🙂

よく分かってないで、デフォルトから子テーマでちょこちょこソースに手を入れてしまっているので、たぶん iPad とかでみるとおかしなことになる予感なのですが、、とりあえず手持ちの Galaxy と iPod touch のブラウザでなんとなく見えたので良しとします。。

PC 版。

smart03

Galaxy SII webkit 版。

 smart02

iPod touch Safari 版。

smart01

twentyeleven テーマ設定で 1カラムにしていますが、2カラムでもうまいことサイドバーがおちて表示できるようになっているようです。

ぼくが修正した点としては、画像表示についてデバイスの横幅を超えると横幅合わせはしてくれるのですが、アスペクト比はにょろ~んと狂ってしまうようでしたので固定ピクセル指定して収まるようにしています。 ソースコード表示ととか、youtube 貼り付けがはみ出すのは仕様ということで。。(笑)

まだまだ直したいところあるのですが、とりあえずスモールスタート。 少しずつ変えていきたいと思います。

あ、そうそう。 ブログ始めて 5年? 6年? 初めてのワンカラムです。

MMRT の影響か!?。(←いつの話だ

プログラミング Groovy キタ!

楽しみにしていました書籍「プログラミング GROOVY」が Amazon さんより到着しました。 日本初(発)の Groovy 本ということで、著者の方々も Web で Groovy のこと検索すると必ずお世話になる方ばかりですごいす :)。。

てなわけで早速。

groovy20

出たばかりの Groovy 1.8 についても網羅されていますし、 イデオムや GDK の API が一覧できるとても良い本でした。 Groovy の歴史的経緯など背景的なことなども知ることができて楽しく読み終えることができました。 ぼくはまだ全然 Groovy のボキャブラリが少ないので、今後も座右の書として活躍です。 🙂

同僚の人が、仕事で Groovy をやりはじめたようなのでお勧めしておきましょう。(←どうやら貸さないらしい(笑)

最近ぐるぐる言い出したのは、実はふと買ってみた Groovy In Action が面白すぎたせいなのです。 おもしろい技術書というの非常に大切な存在ですね。 In Action 1st は既に絶版(Amazon で 1.5万円くらい。。)ですので、プログラミング Groovy がその役目を果たすのではないかと思います。 🙂

てなわけで(??)、本日は Groovy スクリプトをひとつかいてみました。

以前、shiroica さんがつくられていました XREA/CORESERVER への SSH 許可ホストを登録する Python スクリプトの Groovy 移植版です。 なんとなく移植(笑)

XREAのサーバーに設置したWordPressを自動バックアップする環境を整える

さて、とりあえず手動で登録すればよいことは分かりましたが、登録の有効期限は30日間だけに限られています。また、出先でSSHで繋ぐために別の IPアドレスを登録した場合、上書きされてしまい、再度登録しないと繋がらなくなってしまいます。そのため、ホスト情報の登録も自動化する必要があります。そこでこんなスクリプトをPythonで書いてみました。

Groovy は JVM と Groovy の jar ひとつあれば動作しますので Windows でも動作させやすいのではないかと思います。(下のソースは手元の Ubuntu で動かしていますので1行目にシェバングが入っています)

動作環境のグローバル IP アドレス調べて、レンタルサーバの管理画面に GET で送信してあげるプログラムです。

#!/opt/groovy-1.8.0/bin/groovy
 
// ここを書き換えてください
def server = 'サーバ名'
def username = 'ユーザ名'
def password = 'パスワード'
def ipaddressResponder = 'グローバルIPを教えてくれるPHP等のURL'
 
def adminURL = "http://$server/jp/admin.cgi"
 
if(!(ipaddressResponder.toURL().text ==~
    /\d+\.\d+\.\d+\.\d+/)) {
    println "Failed ($ipaddress)"
    System.exit(1)
}
 
def values =
    [ 'id' : username, 'pass' : password,
    'remote_host' : ipaddress, 'ssh2' : 'SSH登録']
def param = ""
values.each {
    param += 
        "${it.key}=${URLEncoder.encode(it.value, "UTF-8")}&"
}
param = param[0..param.size()-2]
 
if(!("$adminURL?$param".toURL().getText("Shift_JIS") =~
    /データベースに追加しました。/)) {
    println "Failed (unmutch)"
    System.exit(1)
}
 
System.exit(0)

 

Linux で groovy シェルを動かすと Exception したときに echo $? が 1 返してくれるようなので、例外処理は思い切って削除しちゃいました。

ほとんど調べることなくホントにのりでかけますので便利ですねぇ。 こんな感じじゃない?って書き方が普通に動くのはちょっと感動します。 Java だけでなく、Web 制作で PHP とかやられている人にもとっつきやすいのではないでしょうかっ。

さて大抵の OS でいけるこの Groovy スクリプトの簡単な動作のさせ方は、、

  1. とりあえず上のソースの 1行目を消す。 ソース内にあるサーバ設定とかする。
  2. Groovy をダウンロード してきて、アーカイブの中に入っている embeddable\groovy-all-1.8.0.jar を上のソースを保存したファイル(たとえば registhost.groovy)といっしょのフォルダに置く。
  3. コマンドプロンプトやコンソールをそのディレクトリに開いて以下のコマンドを入力。
java -jar groovy-all-1.8.0.jar registhost.groovy

 

Keep on Groovy – ing!