gitを使ってエックスサーバーでLaravelアプリをデプロイする

今回はエックスサーバーでwebアプリのデプロイの方法をまとめました！

最近はfirebaseやherokuを使っている方も多いですが、独自ドメインを使ってサービスを公開したい！と思う方も多いはず。

というわけで、レンタルサーバーの一つであるエックスサーバーでのアプリのデプロイ方法をまとめました！


[エックスサーバーとは](https://www.xserver.ne.jp/)
[エックスサーバーを使ってみた所感](http://sisutemuenjinia.com/rentalserver/gyousya/xserver.html)


# 前提

- エックスサーバーと契約して、ドメインとるところまでできている

エックスサーバーはドキュメントがわかりやすいし、調べたら結構何でも出てくるので、ドメイン取るのは楽勝だと思います（お金払えば終わり）


# 1. エックスサーバーで秘密鍵を作る

[SSH設定](https://www.xserver.ne.jp/manual/man_server_ssh.php)

こちらの公式ドキュメント通りに進めていけば、できます。
ちなみに、「公開鍵認証用鍵ペアの生成、公開鍵の登録」以降はやる必要ありません。

ダウンロードされたkeyは、~/.ssh/xserverに入れましょう
（本当はどこでもいいけど、今回はとりあえずこれで）

```
$ mkdir ~/.ssh/xserver
$ mv /path/to/********.key ~/.ssh/xserver/
```

`mv ~~~`のコマンドは、SSH設定でダウンロードしたkeyを`~/.ssh/xserver`に入れています。
macやwindowsなどで場所が変わるかもしれないので、それぞれ合わせてください。
macなら`mv ~/download/*****.key ~/.ssh/xserver/`でいけると思います。


# 2. ssh接続する
設定ができたので、接続しましょう！

コマンドはこれです！

```
$ ssh -i ~/.ssh/サーバーID.key -p 10022 サーバーID@サーバー名.xserver.jp
```

サーバーIDは、ダウンロードされたkeyの名前にもなっている名前です。xserverにログインしても確認できますが、ダウンロードされた`*****.key`の`***`を見ればOKでしょう。


サーバー名は[こちら](https://secure.xserver.ne.jp/xserver/sv7003/?action_user_serverinfo_index=true)から調べられます。


Enter passphrase for keyと言われるので、設定したパスフレーズを入れてください！


# 3. エックスサーバー内でgitコマンドが使えるようにする準備をする

デフォルトでgitが入っていないんですよねえ。入っていたとしてもバージョンが超古いという噂（よく知りませんけど、、）

gitを入れるために、gettextを導入します。
[gettextの公式サイト](http://ftp.gnu.org/gnu/gettext/)から最新バージョンを確認してください
わかりにくいけど、日付と数字で判断します。


そして、sshで接続した状態で。以下のコマンドを実行してください！

```
$ wget http://ftp.gnu.org/pub/gnu/gettext/公式サイトにある最新のファイルの名前の拡張子がtar.gzのやつ
$ tar zxvf ファイル名
```

やってることとしては、指定したURLのファイルをダウンロードして、解凍しています。

ちなみに僕がやった時は親切にもファイル名がlatestでした。
なので、こんな感じになりました。サイトは日々更新されるので、みなさんが同じようにできるとは限りません。

```
$ wget http://ftp.gnu.org/pub/gnu/gettext/gettext-latest.tar.gz
$ tar zxvf gettext-latest.tar.gz
```


そして、ファイルをダウンロードした後は、インストールしていきます。

（僕が解凍した後のファイル名はgettext-0.19.8.1でした。lsコマンドで確認してみてください。）

```
$ cd gettext-0.19.8.1 (ファイル名は各自確認してください)
$ ./configure --prefix=/home/サーバーID/opt (サーバーID入れてください)
$ make && make install
```

インストール終わったら、このコマンドで、インストール成功しているか確認してみてください

```
$ ~/opt/bin/gettext --version
```


# 4. エックスサーバー内でgitが使えるようにする

gitを入れます

3行目、サーバーIDいれてくださいね〜


```
$ wget https://codeload.github.com/git/git/zip/master
$ unzip master
$ cd git-master && autoconf && ./configure --prefix=/home/サーバーID/opt
$ make all && make install
```

これが終わったら、インストールされているはずですので、確認していきましょう！


```
$ ~/opt/bin/git --version
```

そして、gitにパスを通していきます。

bashrcを開く

```
$ vi ~/.bashrc
```

bashrcをこんな感じで修正

```
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
export PATH=$HOME/opt/bin:$PATH        <----------追記
```

終わったらsourceコマンドで変更を反映させる

```
$ source ~/.bashrc
```

パスを通したことで、/opt/git ~~って打たなければならなかったものが、普通にgit ~~~って打てるようになります。

試しに、`$ git --version`でgitコマンドが打てるか確認してみましょう！

で、gitの設定を少しだけ。
以下のコマンドを実行してください
```
$ git config --global user.email "gitのメールアドレス"
$ git config --global user.name "gitのユーザー名"
```

# 5. composerのインストール

```
$ cd ~/opt/bin
$ curl -sS https://getcomposer.org/installer | php
$ mv ~/opt/bin/composer.phar ~/opt/bin/composer
```

これで`composer --version`でcomposerが使えるか確認してみてください！

使えるようになっているはずです！

# 6. gitでssh接続できるようにする

gitでgithubなどのサービスと連携していきたいので、gitでssh接続できるようにします。

```
$ cd ~/.ssh
$ ssh-keygen
（公開鍵の保存場所を聞かれるけどデフォルトで良いので、何も入力せずにEnterを押し、passphraseを入力する）
```

公開鍵ができたか確認

```
$ ls ~/.ssh/id_rsa.pub
```
id_rsa.pubを開いて、中身をコピーする

```
vi ~/.ssh/id_rsa.pub
```

で、githubにssh keyを登録します（new SSH Keysを押して、タイトルを適当に自分がわかりやすいタイトルを入れて、Keyにコピーしたやつを全部貼り付けます）

[githubのkeyを設定する場所](https://github.com/settings/keys)


# 7. phpのバージョンを変える

https://rensaba.mugen-loop.net/plan/xserver/article-6.html

これに書いてある通りで変えられます。まさかのデフォルトがphp5系っていう

# 8. npmを使えるようにする

これ通りにやればいけます！
[XserverにNode.jsをインストールしてみる](https://nori-life.com/xserver-vue-js/#Nodejs)

親切すぎて、何もいうことがない

# 8. プロジェクトをクローンしてシンボリックリンクを貼る

`~/production/`というディレクトリを作成してそこにgit cloneします
そのアプリと、ドメインの公開ディレクトリを紐づければいいってわけですね！


```
$ cd ~
$ mkdir ~/production
$ git clone git@github.com:******/*****;
```

Laravelなので、ちょっと初期設定をします

- gitcloneでは.envはローカルに入らないので、自分でサイド作る必要があります。

- Laravelならではの初期設定がいろいろあります。


```
$ php artisan key:generate
$ composer install
$ npm install
```


そして、シンボリックリンクを貼ります。

```
$ cd ~/ドメイン名/public_html
$ ln -s ~/production/プロジェクト名/public ./public
```

`.htaccess`は重要なので、一旦コピーしてバックアップを取っておきます

```
$ cp ./.htaccess ./.htaccess-copy
$ vim ./htaccess
```

.htaccessにはこのように記述すればOK!

```
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]
```

これで、public以降のファイルを参照してくれるようになります！



# 以上！

これで以上になります。

レンタルサーバーを使用してアプリをデプロイする際はぜひ参考にしてみてください！！


# 詰まったところ補足（ほぼ自分用）

エックスサーバーでmysqlのjsonカラムを使用したい場合、
json型はlongtext型と同義だそうで、
json型でマイグレーションするとエラー発生するが、longtext型だといけました