OpenShift Online使ってみた

## 参考

* [Herokuの移行先としてOpenShiftを選択する - Qiita](http://qiita.com/syui/items/e6d1d7981f89a5df10a8)
* [OpenShift Online Monthly Plan Comparison](https://www.openshift.com/pricing/plan-comparison.html)
* [OpenShift で Crystal を動かす方法 - Qiita](http://qiita.com/pine613/items/6be6a266871f6b34c3f8#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
    * ミドルウエアのバージョンが古いのでDIYコンテナでビルドすればよい。
    * [Search · OpenShift diy · GitHub](https://github.com/search?utf8=%E2%9C%93&q=OpenShift+diy&type=Repositories&ref=searchresults)でいろいろ見つかる。

## 準備

* [Create an account | OpenShift Online by Red Hat](https://www.openshift.com/app/account/new)にて新しいアカウント作成
    * クレジットカード登録不要

```
sudo gem install rhc
```

```diff:セットアップ
+ $ 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.
  
  If you have your own OpenShift server, you can specify it now. Just hit enter to use the server for
  OpenShift Online: openshift.redhat.com.
+ Enter the server hostname: |openshift.redhat.com| 空欄のままEnter
  
  You can add more servers later using 'rhc server'.
  
+ 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
  ...(略)
+ Please enter a namespace (letters and numbers only) |<none>|: ユーザ名にしておく
```

## アプリケーション作成

```bash:
$ rhc create-app php1 php-5.4
Application Options
-------------------
Domain:     user1
Cartridges: php-5.4
Gear Size:  default
Scaling:    no

Creating application 'php1' ... done
Your application 'php1' is now available.

  URL:        http://php1-user1.rhcloud.com/
  SSH to:     XXXXXXXXXXXXXXXXXXXXXXXX@php1-user1.rhcloud.com
  Git remote: ssh://XXXXXXXXXXXXXXXXXXXXXXXX@php1-user1.rhcloud.com/~/git/php1.git/
  Cloned to:  /home/user1/php1

Run 'rhc show-app php1' for more details about your app.
```

## ssh接続

* ssh接続ができる(数分で自動ログアウトさせられる。root権限はない)
* `nohup`でバックグラウンド起動させれば起動しっぱなしにできる。
* tmuxが利用できる。(screenは起動できない)
* メモリが潤沢、CPU速度も早いので安いVPS借りるより良い
* 設定ファイルの場所
   * /var/lib/openshift/XXXXXXXXXXXXXXXXXXXXXXXX/php//configuration/etc/conf.d/

```text:
$ echo $HOME
/var/lib/openshift/XXXXXXXXXXXXXXXXXXXXXXXX/

$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.7 (Santiago)

$ uname -a
Linux ex-std-node128.prod.rhcloud.com 2.6.32-573.12.1.el6.x86_64 #1 SMP Mon Nov 23 12:55:32 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

$ free -m
             total       used       free     shared    buffers     cached
Mem:         14939      12238       2700        924         35       2690
-/+ buffers/cache:       9512       5426 
Swap:        51199      12576      38623 

$ grep CPU /proc/cpuinfo
model name	: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
model name	: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
model name	: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
model name	: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz

$ netstat -anp | more
...(略)
/proc/net/tcp: 許可がありません
...(略)

$ python -m SimpleHTTPServer 59901
...(略)
socket.error: [Errno 13] Permission denied

$ cat .gitconfig
...(略)
[gc]
  auto = 100
[pack]
  windowMemory = 10m
  packSizeLimit = 20m
```

```bash:メール送信可能
date | mail 自分のメールアドレス
```

* `/var/mail/`に書き込めないのでメール受信できないと思う。

### ssh鍵の管理

```bash:
$ rhc sshkey --help
```

## カートリッジの追加

* [OpenShift で PHP から MySQL 5.5 を使う - Qiita](http://qiita.com/takatama/items/1b0f0fd8f6807b526d3e)

```bash:
rhc add-cartridge mysql-5.5 --app アプリケーション名
rhc add-cartridge cron-1.4 --app アプリケーション名
```

```bash:カートリッジ一覧
$ rhc cartridges
jbossas-7                JBoss Application Server 7              web
jboss-dv-6.1.0 (!)       JBoss Data Virtualization 6             web
jbosseap-6 (*)           JBoss Enterprise Application Platform 6 web
jboss-unified-push-1 (!) JBoss Unified Push Server 1.0.0.Beta1   web
jboss-unified-push-2 (!) JBoss Unified Push Server 1.0.0.Beta2   web
jenkins-1                Jenkins Server                          web
nodejs-0.10              Node.js 0.10                            web
perl-5.10                Perl 5.10                               web
php-5.3                  PHP 5.3                                 web
php-5.4                  PHP 5.4                                 web
zend-6.1                 PHP 5.4 with Zend Server 6.1            web
python-2.6               Python 2.6                              web
python-2.7               Python 2.7                              web
python-3.3               Python 3.3                              web
ruby-1.8                 Ruby 1.8                                web
ruby-1.9                 Ruby 1.9                                web
ruby-2.0                 Ruby 2.0                                web
jbossews-1.0             Tomcat 6 (JBoss EWS 1.0)                web
jbossews-2.0             Tomcat 7 (JBoss EWS 2.0)                web
jboss-vertx-2.1 (!)      Vert.x 2.1                              web
jboss-wildfly-10 (!)     WildFly Application Server 10           web
jboss-wildfly-8 (!)      WildFly Application Server 8.2.1.Final  web
jboss-wildfly-9 (!)      WildFly Application Server 9            web
diy-0.1                  Do-It-Yourself 0.1                      web
cron-1.4                 Cron 1.4                                addon
jenkins-client-1         Jenkins Client                          addon
mongodb-2.4              MongoDB 2.4                             addon
mysql-5.1                MySQL 5.1                               addon
mysql-5.5                MySQL 5.5                               addon
phpmyadmin-4             phpMyAdmin 4.0                          addon
postgresql-8.4           PostgreSQL 8.4                          addon
postgresql-9.2           PostgreSQL 9.2                          addon
rockmongo-1.1            RockMongo 1.1                           addon
switchyard-0             SwitchYard 0.8.0                        addon
haproxy-1.4              Web Load Balancer                       addon
```

## ベンチマーク

* 利用規約にベンチマークの結果を載せるなと書いてあった。
    * 無料枠なので期待しないこと

## クラウド比較

* [Heroku vs OpenShift Online - Cloud Computing Comparison](http://cloud-computing.softwareinsider.com/compare/281-286/Heroku-Inc-vs-Red-Hat-Inc)
* [Best Platform as a Service (PaaS) Software in 2016 | G2 Crowd](https://www.g2crowd.com/categories/platform-as-a-service-paas)