2013年9月21日土曜日

さくらのVPSでPlay Frameworkを動かす:Apacheの設定をする

Apacheの設定を行います。

vim /etc/httpd/conf/httpd.conf

phpもindexに設定しておきます。

DirectoryIndex index.html index.html.var index.php

セキュリティ対策として以下を設定しておきます。

ServerTokens Prod
ServerSignature Off

Apacheを再起動します。

service httpd restart



さくらのVPSでPlay Frameworkを動かす:Apache,MySQL,PHPのインストール

以下の設定をします。

文字コードの設定

vim/etc/sysconfig/i18n
#LANG="C"
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

http://support.sakura.ad.jp/manual/vps/ossetup.html

yum パッケージの更新

yum update

chkrootkit インストール

yum install chkrootkit

Apache,MySQL,PHPのインストール

yum install httpd httpd-devel mod_ssl mysql mysql-server mysql-devel php php-pdo php-mysql php-mbstring php-mcrypt php-xml gd php-gd php-devel php-pear php-openssl
自動起動の設定をしておく

chkconfig mysqld on
chkconfig httpd on



さくらのVPSでPlay Frameworkを動かす:iptablesの設定をする

さあVPSコントロールパネルからVPSを起動したらまずはiptablesの設定をします。

sshでのセキュリティを高めるために以下の設定を行います。

  • rootによるログインの禁止
  • パスワードによるログインの禁止
  • ポートの変更

まずはrootでログインします。

ssh root@IPアドレス -p 22

ログイン用のユーザーを作成します。

useradd USER_NAME -G wheel
passwd USER_NAME
あとで root になれるユーザを制限するために wheel に所属させておきます。

セキュリティ対策のため、もろもろ設定をしていきます。
vim /etc/ssh/sshd_config
ログインするためのポート番号を変更します。
Port SSH_PORT
rootによるログインを禁止します。
PermitRootLogin no
パスワード入力によるログインを禁止します。
PasswordAuthentication no
作成したユーザーによるsudoコマンド実行の設定を行います。
vim /etc/pam.d/su
auth required pam_wheel.so use_uid
の行のコメントアウトを外します。
vim /etc/login.defs
SU_WHEEL_ONLY yes
sudo visudo
# %wheel ALL=(ALL) ALL
の行のコメントアウトを外します。

公開鍵の設定を行っていきます。

新たに作成したユーザーのディレクトリに公開鍵を保存するためのsshフォルダを作成します。

su - USER_NAME
mkdir ~/.ssh/
chmod 700 ~/.ssh/

Macから接続するので、Terminalで次のコマンドを実行します。

ssh-keygen -f /Users/tyongeri/.ssh/id_rsa.IPアドレス

作成された公開鍵を転送します。
cd .ssh
scp id_rsa.IPアドレス.pub root@IPアドレス:/home/USER_NAME/.ssh/authorized_keys
サーバ側で再び作業をします。

su - USER_NAME
cd .ssh
sudo chown USER_NAME:USER_NAME authorized_keys
chmod 600 authorized_keys
さて、新しく作ったアカウントでsshログイン出来るか確認してみます。

ssh USER_NAME@IPアドレス -i id_rsa.IPアドレス -p 22
ついでにsudoが出来るか確認しておきます。
sudo su -
sshの設定変更を反映させます。
/etc/init.d/sshd restart
改めて変更したポートでアクセスできるか確認します。

ssh USER_NAME@IPアドレス -i id_rsa.IPアドレス -p SSH_PORT

ついでにrootでのログインが出来なくなっているか確認します。

ssh root@IPアドレス -p SSH_PORT
Macから接続する際に毎回鍵ファイルやポートの指定は手間なので、設定に記載します。

vim ~/.ssh/config
Host IPアドレス
    HostName IPアドレス
    Port SSH_PORT
    User USER_NAME
    identityfile ~/.ssh/id_rsa.IPアドレス
設定が出来ました。
ssh IPアドレス
で接続できることを確認します。


さくらのVPSでPlay Frameworkを動かす:VPSサーバを契約する

さくらのVPSでPlay Framework for Java 2.1.3を動かしてみたいと思います。

今回契約したのはさくらのVPS 1Gのプランです。

メモリ:1GB
ディスク容量:100GB
CPU:仮想 2コア

というスペックになっています。
果たしてPlay Frameworkはストレスなく動作してくれるのでしょうか。

最終的に構築したいのはこういった構成です。


フロントをApacheにして、プロキシ経由でPlay Frameworkにアクセスします。
バックエンド処理をPlay Frameworkに任せて、フロントのアプリケーションはCakePHPとかで作ることも想定しています。

あと、今回作るシステムでコアになっている部分は自作ライブラリとしてjarファイルにしていますが、jarファイルを作る環境がないので、Jenkinsも立ち上げてGithubからソースコードを取得してjarファイルの生成もしてもらうように考えています。

さくらのVPSを契約すると30分ほどでVPSが生成されます。
以前はサーバが起動した状態でホイッと渡されて環境を構築していましたが、最近はサーバを停止した状態で渡されるようになっています。

おそらくサーバを渡されてから構築するまでの間に起動したまま放置しておいてrootアカウントを乗っ取られるとか結構起きてサーバを停止した状態で渡されるようになったんじゃないかと思います。

さ、サーバの準備ができたらコントロールパネルからサーバを起動します。


2013年9月4日水曜日

Java Play framework 2.0のebeanで、Expr.containsを使ってのOR検索

一言多いプログラマーの独り言: Java Play framework 2.0のebeanで、OR検索


に触発されたので、書いてみる

public static Page page(int page, int rows, String sortBy, String order, String filter) {
    return 
        find.where("name like :keyword OR detail like :keyword")
            .setParameter("keyword", "%" + filter.trim() + "%")
            .orderBy(sortBy + " " + order)
            .findPagingList(rows)
            .getPage(page);
}

のように記載されていますが、Expr.containsを使ってこういう方法も使えるかと思います。

public static Page page(int page, int rows, String sortBy, String order, String filter) {
    return
        find.where().or(Expr.contains("name", filter.trim()), Expr.contains("detail",filter.trim()))
            .orderBy(sortBy + " " + order)
            .findPagingList(rows)
            .getPage(page);
}
http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Expr.html#contains(java.lang.String, java.lang.String)