注意書き
作業後に書き直しため、間違いがあるかもしれません。
後で確認して、修正します。
はじめに
複数のPaaSでSkinny Frameworkをデプロイする方法を試したので、まずは、OpenShiftの方法を記載します。
(CloudBeesでは、DBサービスがMySQLのみなので再検討中)
スタンドアローンでの実行なども出来ると思いますが、
今回は、warファイルをTomcatにデプロイする方法を取りました。
また、同一インスタンス上のPostgreSQLを利用しています。
OpenShiftについて
RedHat提供のPaaSサービスを使って、3インスタンスまで、無料で使えます。
特徴としては、OpenStack準拠で、標準のカートリッジを使えば自動でセキュリティーパッチのメンテナンスを行ってくれることでしょうか。
現時点(2014/5/10)において、日本在住の設定では有料登録ができないようです。
OpenShift登録手順
OpenShiftのサイトを開いたあと、
- サインアップ
- メールアドレスの確認
- 規約同意
の順におこないます。
Tips
- アカウントもパスワードもRedHat全体のアカウントと共通になります。
- サインイン後にエラー画面に入る場合は、ブラウザーのクッキーを削除します。削除対象は、「redhat.com」を含むものになります。
RHCコマンドラインツールの導入手順
以下を参考に説明します。
- コマンドラインツールのインストール方法
OpenShiftのコマンドラインツールは、RubyのGEMとして用意されているのでRubyが必要です。
OSXの場合は、
$ sudo gem install rhc --no-rdoc --no-ri
でインストールできます。
次に、アカウントを紐付けます。セットアップ作業中に、自動でsshの公開鍵のアップロードなども行われます。
# アカウント設定します。
$ rhc setup
OpenShift Client Tools (RHC) Setup Wizard
This wizard will help you upload your SSH keys, set your application namespace,
and check that other programs like Git are properly installed.
Login to openshift.redhat.com: <登録メールアドレス>
Password: ************
OpenShift can create and store a token on disk which allows to you to access the
server without using your password. The key is stored in your home directory and
should be kept secret. You can delete the key at any time by running 'rhc
logout'.
Generate a token now? (yes|no) yes
Generating an authorization token for this client ... lasts about 1 month
Saving configuration to /Users/foobar/.openshift/express.conf ... done
Checking for git ... found git version 1.8.5.2 (Apple Git-48)
Checking common problems .. done
Your client tools are now configured.
足りない時
- ドメインの設定
- sshの公開鍵
sshの設定ができなかった場合は、Webコンソールの設定画面から公開鍵を追加します。
$ pbcopy < ~/.ssh/id_rsa.pub
で、クリップボードにコピーして追加しましょう。
コマンドラインからOpenShiftアプリを作成
GUIから設定する方法は、公式ドキュメントのはじめよう から確認して下さい。
OpenShiftアプリのおおまかな作成手順は、
1. フレームワークを選択
2. DBなどのカートリッジを追加
3. コードをGitでアップロード
になります。
コマンドラインからおこなうと、1,2,3がセットで行えます。
# tomcat7 + postgres9.2 のカートリッジを利用
# rhc app-create <アプリ名> <カートリッジ> [<追加カートリッジ>]
$ rhc app-create skinnyapp jbossews-2.0 postgresql-9.2
Application Options
-------------------
Domain: foobar
Cartridges: jbossews-2.0, postgresql-9.2
Gear Size: default
Scaling: no
Creating application 'skinnyapp' ... done
PostgreSQL 9.2 database added. Please make note of these credentials:
Root User: adminxxxxxx
Root Password: xxxxxxxxxxxx
Database Name: skinnyapp
Connection URL: postgresql://$OPENSHIFT_POSTGRESQL_DB_HOST:$OPENSHIFT_POSTGRESQL_DB_PORT
Waiting for your DNS name to be available ... done
Cloning into 'skinnyapp'...
The authenticity of host 'skinnyapp-foobar.rhcloud.com (255.255.255.255)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'skinnyapp-foobar.rhcloud.com,255.255.255.255' (RSA) to the list of known hosts.
Your application 'skinnyapp' is now available.
URL: http://skinnyapp-foobar.rhcloud.com/
SSH to: xxxxxxxxxxxx@skinnyapp-foobar.rhcloud.com
Git remote: ssh://xxxxxxxxxxxx@skinnyapp-foobar.rhcloud.com/~/git/skinnyapp.git/
Cloned to: /Users/foobar/skinnyapp
Run 'rhc show-app skinnyapp' for more details about your app.
DBの情報
Root User: adminxxxxxx
Root Password: xxxxxxxxxxxx
Database Name: skinnyapp
サーバの情報
URL: http://skinnyapp-foobar.rhcloud.com/
SSH to: xxxxxxxxxxxx@skinnyapp-foobar.rhcloud.com
Git remote: ssh://xxxxxxxxxxxx@skinnyapp-foobar.rhcloud.com/~/git/skinnyapp.git/
Gitクローン先の情報
Cloned to: /Users/foobar/skinnyapp
サーバーにgitリポジトリがあり、
また、sshでログインも出来ます。
作成した、アプリを一度開いてみましょう。
#
$ open http://skinnyapp-foobar.rhcloud.com/
gitリポジトリを自前でクローンしたいときは、
# クローン
$ git clone ssh://xxxxxxxxxxxx@skinnyapp-foobar.rhcloud.com/~/git/skinnyapp.git skinnyapp
$ cd skinnyapp
とします。
skinnyを用意
今回は公式チュートリアルを元に、ざっくり、下記の手順で準備します。
- ダウンロード
- モデル作成
- DBマイグレート
- サーバ起動
- ページ確認
Skinny Frameworkのサイトから、まずは、スケルトンをダウンロードしてきます。
「skinny-blank-app-with-deps.zip (80MB)」
など書いてある物になります。
ZIPファイルを展開して、ターミナルを開き、フォルダ内に移動して
まずは、development環境でコマンドを実行します。
# Membersを用意
$ ./skinny g scaffold members member name:String activated:Boolean luckyNumber:Option[Long] birthday:Option[LocalDate]
# DBマイグレート(SQLite)
$ ./skinny db:migrate
# サーバ起動
$ ./skinny run
サーバが起動したら別のターミナルを開き、コマンドラインからブラウザを表示します。
```bash:
トップ画面をブラウザで表示
$ open http://127.0.0.1:8080/
memberの一覧画面をブラウザで表示
$ open http://127.0.0.1:8080/members
```
OpenShiftデプロイ用の設定
ここからは、OpenShift環境に合わせた設定変更をおこないます。
PostgreSQL用のJDBCドライバーを追加します。
```scala:Build.scala
"com.h2database" % "h2" % "1.4.177", // your own JDBC driver
"org.postgresql" % "postgresql" % "9.2-1004-jdbc4", // your own JDBC driver
OpenShift用のデータベース設定に変更します。
```bash:application.conf
development {
db {
default {
driver="org.h2.Driver"
url="jdbc:h2:file:./db/development;MODE=PostgreSQL;AUTO_SERVER=TRUE"
user="sa"
password="sa"
poolInitialSize=2
poolMaxSize=10
}
}
}
test {
db {
default {
driver="org.h2.Driver"
url="jdbc:h2:file:./db/test;MODE=PostgreSQL;AUTO_SERVER=TRUE"
user="sa"
password="sa"
poolInitialSize=2
poolMaxSize=10
}
}
}
staging {
db {
default {
driver="org.postgresql.Driver"
url="jdbc:postgresql://"${?OPENSHIFT_POSTGRESQL_DB_HOST}":"${?OPENSHIFT_POSTGRESQL_DB_PORT}"/"${?PGDATABASE}
user=${?OPENSHIFT_POSTGRESQL_DB_USERNAME}
password=${?OPENSHIFT_POSTGRESQL_DB_PASSWORD}
poolInitialSize=5
poolMaxSize=20
}
}
}
production {
db {
default {
driver="org.postgresql.Driver"
url="jdbc:postgresql://"${?OPENSHIFT_POSTGRESQL_DB_HOST}":"${?OPENSHIFT_POSTGRESQL_DB_PORT}"/"${?PGDATABASE}
user=${?OPENSHIFT_POSTGRESQL_DB_USERNAME}
password=${?OPENSHIFT_POSTGRESQL_DB_PASSWORD}
poolInitialSize=5
poolMaxSize=20
}
}
}
warファイルを作成して、OpenShiftのGitフォルダにコピーします。
#war作成
$ ./skinny package production
#ファイルコピー(Tomcat上にwarファイル名で展開されるので、ファイル名を変更)
$ cp ./build/target/scala-2.10/skinny-blank-app_2.10-0.1.0-SNAPSHOT.war /User/foobar/skinnyapp/deployments/skinnyapp.war
OpenShift環境にDBマイグレート
OpenShiftのインスタンス上のPostgreSQLにDBマイグレーションするには、ポートフォワーディングをつかいます。
# ポートフォワード作成
$ rhc port-forward shinnyapp
Checking available ports ... done
Forwarding ports ...
To connect to a service running on OpenShift, use the Local address
Service Local OpenShift
---------- -------------- ---- ----------------
java 127.0.0.1:8080 => 127.4.227.1:8080
postgresql 127.0.0.1:5432 => 127.4.227.2:5432
Press CTRL-C to terminate port forwarding
次に、DB設定用の環境変数を揃えます。
```bash:
環境変数を取得する
[shinnyapp-foobar.rhcloud.com]> export|egrep "OPENSHIFT_POSTGRESQL_DB_PORT|PGDATABASE|OPENSHIFT_POSTGRESQL_DB_PASSWORD"
declare -x OPENSHIFT_POSTGRESQL_DB_PASSWORD="xxxxxxxx"
declare -x OPENSHIFT_POSTGRESQL_DB_PORT="5432"
declare -x PGDATABASE="skinnyapp"
ローカルにも環境変数を反映して、DBマイグレートを実行します。
```bash:
#ローカル環境に環境変数をエクスポート
declare -x OPENSHIFT_POSTGRESQL_DB_PASSWORD="mjIwfERH7B3s"
declare -x OPENSHIFT_POSTGRESQL_DB_PORT="5432"
declare -x PGDATABASE="jbossews"
#ポートフォワーディングのため、ここだけ違う
declare -x OPENSHIFT_POSTGRESQL_DB_HOST="127.0.0.1"
#OpenShiftにDBマイグレート
./skinny db:migrate production
OpenShift環境にwarファイルをアップロード
最後に、先ほどコピーしたwarファイルをGit経由でアップロードします。
$ git add .
$ git commit -m "Inital commit."
$ git push
...再起動に関するログ...
別のターミナルで、ログを開いてみましょう。
# ログを表示
$ rhc log skinnyapp
しばらくして、ブラウザを開いて、動作を確認しましょう。
$ open http://shinnyapp-foobar.rhcloud.com/shinnyapp/members
おわりに
ソースに修正があれば、再びwarファイルを作成して、デプロイしてみましょう。
以上で終わりです。