OpenShiftOnline+NginxでWebサーバー構築

###はじめに

OpneShiftOnlineでNginxを使ってWebサーバーを立てるまでの手順をまとめました。
使い方が全く分からず苦労したのでこれから使おうという人の参考になれば。


###OpenShiftのプロジェクトを作成
右上の"Create Project"を選択し、プロジェクト名・表示名・説明を入力しプロジェクトを作成。
![openshift1.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/07f3a96c-e28e-7f8a-6fc7-013c0b14eeb6.jpeg)

###プロジェクトにアプリケーションを追加
プロジェクトを選択し、右上の"Add to Project"から"Browse Catalog"を選択。
![openshift2.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/723a0d6a-c3ae-7269-cdff-50acd46aa20a.jpeg)

##アプリケーション選択
表示されたアプリケーション一覧からNginxを選択・・・しようとするが
![openshift3.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/06eed172-6075-b805-9523-3a3f7b3c4c65.jpeg)
**Nginxが無い！**

##docker imageを探してみる
用意されたカテゴリに無いので仕方なく"Deploy Image"からNginxのdocker imageを検索。
![openshift4.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/0c23bc69-8001-381c-7273-1bf60c7ecf77.jpeg)

![openshift5.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/250091a3-72c8-ef21-4b80-8b191f7aceb1.jpeg)

##Nginxのイメージを発見
![openshift6.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/4c927941-5398-e50b-83c7-6f463a86af1e.jpeg)
Nginx公式が公開しているdocker imageのようですが何やら注意書きがあります。
どうやら**このNginxのイメージはクラスタが許可してないかもしれないルートユーザ権限で起動しますよ**と言っているらしい。なんのことやら。

##イメージを追加
なんだか分からないがとにかく追加してみよう、ということで右下の"Deploy"からアプリケーションを追加する。
すると
![openshift8.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/53d76ce1-aa8b-5747-8674-3649f8178cab.jpeg)
勝手に構築が始まっているようだ。いけそうかな？と見ていると

![openshift9.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/e86f7cdf-3b8d-9241-75d5-ce4f877121a0.jpeg)
**失敗。**なにか良からぬことが起きたようだ。

##構築失敗の原因
エラーメッセージの"view log"から何が起きたのか見てみる。
![openshift10.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/f11df96a-1055-c5f6-a291-a82f88d58b8c.jpeg)
"Crash loop back off"と出ているがどうもmkdirコマンドが権限エラーで弾かれている模様。何故だ。

色々と調べてみると、OpneShiftはルート権限でのコンテナ操作を**禁止**しているようだ。
さっきの注意文言のルート権限で動かすよ、というのはこのための注意か・・・

##解決方法
という訳で、発見したdocker imageは残念ながら使えなかったので別の方法を探してみる。
すると、[RedHatが公開しているNginxのdocker image](https://access.redhat.com/containers/?tab=overview&platform=openshift#/registry.access.redhat.com/rhscl/nginx-112-rhel7)がOpenShiftでも使えるらしい。
早速試してみる。

###ようやく構築完了
さっきの"deploy image"から検索しても出てこないのでOpenShiftを操作するOCツールというのを使う。
上部メニューにある"Command Line Tool"から落としてきます。
![openshift11.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/52c0263c-08ad-4f8d-1441-acc3b7b1fadb.jpeg)

落としてきたら、解凍してコマンドプロンプトから解凍フォルダに移動して下記のコマンドをコピーして叩く。これで自分のプロジェクトにログイン出来た状態になる。
![openshift12.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/594bf063-84d2-7762-678a-65b6f7b82e3c.jpeg)

その後にアプリケーション追加の下記コマンドを入力。

```
>oc new-app registry.access.redhat.com/rhscl/nginx-112-rhel7~[gitリポジトリ]
```

gitリポジトリにはWebサーバに乗せたい資産が入ったリポジトリを入れてください。
そしてOpneShiftOnlineで確認すると・・・
![openshift13.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/37ec650a-4aa1-1027-6581-7de8d34ae5cd.jpeg)
**構築出来てる！**

あとはルートディレクトリを指定すれば
![openshift14.jpg](https://qiita-image-store.s3.amazonaws.com/0/222268/843e54d7-c8b9-7423-c51c-fa3048b86650.jpeg)
gitリポジトリにあるページが表示できました。**長かった・・・**

###まとめ
なんとか構築出来ましたがよく分からんままになってるところが多い（PODって何？Nginxコンフィグはどこ？）のでまだまだ調べ足りない。。
また、docker imageは自分でルート権限じゃなくても起動出来るような設定にして作れば自作のimageでも構築は出来るようです。

参考記事：
[How to run nginx on openshift and deploy website?](http://keyangxiang.com/2017/10/24/How-to-run-nginx-on-openshift-and-deploy-website/)