ConohaVPS上でUbuntu+Nginx+Vaporを構築する

ConohaVPS上でUbuntu + Nginx + Vaporの簡単なアプリを動かしてみます。
Conohaちゃん可愛い&価格でConohaVPSを選びました。

### サーバーインスタンスを作成

Ubuntuの16.04 のインスタンスを作ります。Swiftは最新の18系ではサポートされていないので気をつけてください。

![conoha.png](https://qiita-image-store.s3.amazonaws.com/0/63855/169381e1-b97d-45e8-62ae-849e0214134c.png)

作成したVPSにSSHでログインします。

``` bash
$ ssh root@IP_ADRESS
```

OSの情報はこんな感じです。

``` bash
$ cat /etc/os-release
```

```
NAME="Ubuntu"
VERSION="16.04.1 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.1 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
```

本来は証明書を作ったり、rootログインを禁止しないといけないのですが省略します。
NginxをAPTでインストールし起動します。

``` bash
$ apt-get install nginx
$ nginx
```

ブラウザからアクセスし、Nginxの初期画面が表示されていることを確認します。

![nginx.png](https://qiita-image-store.s3.amazonaws.com/0/63855/a48627fb-5199-0146-2f4f-546c7244885a.png)

次にNginxでリバースプロキシをするための設定していきます。
`/etc/nginx/nginx.conf` ファイルを編集し、`include /etc/nginx/sites-enabled/*;` の行をコメントアウトします。

``` bash
cd /etc/nginx/
vi nginx.conf
```

```conf:nginx.conf
include /etc/nginx/sites-enabled/*;
# include /etc/nginx/sites-enabled/*;
```

`/etc/nginx/conf.d`　に`vapor.conf` ファイルを作成し、以下のように記述します。
これでVaporのデフォルトのポートである8080番にNginxがポートフォワードしてくれます。

``` bash
cd conf.d
vi vapor.conf
```

```conf:vapor.conf
server {
    listen 80;
    listen [::]:80;
    server_name  localhost;

    location / {
            proxy_pass http://localhost:8080;
    }
}
```

Nginxの設定ファイルのを変更を反映させます。

``` bash
nginx -s reload
```

この状態でブラウザからアクセスすると「502 Bad Gateway」と表示されているはずです。

次にSwiftとVaporをインストールし、Vaporのプロジェクトを作成します。
以下のスクリプトでVaporのリポジトリをAPTで参照できるようにし、APTでSwiftとVaporをインストールします。
この辺りはアドベントカレンダー初日の記事を良かったら参考にしてみてください。
[Install on Ubuntu](https://docs.vapor.codes/3.0/install/ubuntu/) (公式)
[Swift製Webフレームワーク Vaporの紹介2018](https://qiita.com/tako3ika3/items/78c979929dd69c53a4e0)

``` bash
$ eval "$(curl -sL https://apt.vapor.sh)"
$ sudo apt-get install swift vapor
```

Webテンプレートでプロジェクトを作成、ビルド、起動します。

``` bash
$ cd /root
$ vapor new Hello --template=web
$ cd Hello
$ vapor build
$ vapor run
```

ブラウザからアクセスするとVaporのロゴが表示されているはずです。

```
                         **
                       **~~**
                     **~~~~~~**
                    **~~~~~~~~~~**
                  **~~~~~~~~~~~~~~**
                **~~~~~~~~~~~~~~~~~~**
               **~~~~~~~~~~~~~~~~~~~~~~**
              **~~~~~~~~~~~~~~~~~~~~~~~~**
             **~~~~~~~~~~~~~~~~~~~~~~~~~~**
            **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
            **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
            **~~~~~~~~~~~~~~~~~~~~~++++~~~**
             **~~~~~~~~~~~~~~~~~~~++++~~~**
               ***~~~~~~~~~~~~~~~++++~~~***
                 ****~~~~~~~~~~++++~~****
                   *****~~~~~~~~~*****
                      *************
               _       __    ___   ___   ___
              \ \  /  / /\  | |_) / / \ | |_)
               \_\/  /_/--\ |_|   \_\_/ |_| \
               a web framework for Swift
           Project "Hello" has been created.
    Type `cd Hello` to enter the project directory.
Use `vapor cloud deploy` to host your project for free!
                         Enjoy!
```

### おまけ

Nginxのコマンド

``` bash
nginx -s stop
nginx -s reload
```

Vaporをバックグラウンドで起動する

``` bash
$ control + z
$ jobs
$ bg 1
```