XSERVERでssh接続→git最新版インストール→php5.6でlaravel deployまで

XSERVERで、laravelを動かすというプロジェクトがあったため、
ssh接続できるようにし、最新のgitをインストールして、laravelをdeployしたのでメモ

#全体の流れ
1. SSHでつながるようにする
2. gitをインストールする
3. パス(path)を通す
3. composerのインストール
3. laravelのプロジェクトを特定のディレクトリへデプロイ、インストール
5. デプロイした公開ディレクトリを、WEBの公開ディレクトリからリダイレクト


#XSERVERって
* https://www.xserver.ne.jp/
* いわゆるレンタルサーバー
* SSH接続が可能!!（これが出来るレンタルサーバーは少ない）
* root権限はないが、ミドルウェアのインストールはできる
* 対応しているPHPのバージョンが幅広い（7.0.7まで選択できる　2017/02/05現在）
* 機能についてはこちらを参考
    * https://www.xserver.ne.jp/functions/
* 最近のサーバーにはgitが既にインストールされているっぽい
    * 公式サイトでの記述は見当たらなかった、使ってるサーバーにもよるかも
* composerもインストールされていた（最新ではない）
    
```bash
#git version 1.8.3.1
$ /usr/bin/git --version

#Composer version 1.3.1
$ /usr/bin/composer --version
```
    

##1. SSHでの接続設定
* まずはXSERVERのコントロールパネルへログインします
* 次にSSH接続のボタンをクリック
* SSHの設定をONへ
* 今回は複数名でのプロジェクトなので、公開鍵認証用鍵ペア作成を作成し、複数人がSSH接続できるようにします
* パスフレーズを設定し、公開鍵認証用の鍵ペア作成を押下していくと、秘密鍵がダウンロードできます
* 参考）https://www.xserver.ne.jp/manual/man_server_ssh.php

###SSH接続
* 私はVagrant上のubuntuからssh接続をしているので、vagrantへダウンロードした鍵ファイルを設置します
* 場所はどこでも良いですが、仮で/home/vagrant/.ssh/へダウンロードしたhogehoge.keyを設置します
* この時、hogehoge.keyのパーミッションは600になるようにして下さい
![image](https://qiita-image-store.s3.amazonaws.com/0/69167/cd16a4c7-1c77-57c0-aaaa-03295edd2459.png)
* これで接続の準備は完了しました、早速SSH接続してみます
* XSERVERではsshのポートは10022です、接続ユーザー名、サーバー名は自分の環境に置き換えてください
* 接続例） `$ ssh -i ~/.ssh/hogehoge.key -p 10022 hogehoge@サーバー名.xserver.jp`
* 正しい情報で接続していると、パスフレーズを求められるのでパスフレーズを入力して接続します

##2. Gitのインストール
* gitのインストールにはgettextが必要との事なので、まずgettextをインストールします
* ちなみにGitが最新じゃなくても良いって人は元々はいっているGitを使われても良いと思います

```bash

#インストールディレクトリ
$ mkdir ~/opt
#作業ディレクトリ
$ mkdir ~/sysad

$ cd ~/sysad
$ wget "http://ftp.gnu.org/gnu/gettext/gettext-latest.tar.gz"
$ tar zxvf gettext-latest.tar.gz

#解凍されたディレクトリへ移動しmakeしてinstall 解凍ディレクトリ名はバージョンによって異なります
$ cd gettext-0.19.1
$ ./configure --prefix=/home/<USER>/opt
$ make install

##インストールされたか確認
### gettext (GNU gettext-runtime) 0.19.8.1 のようにバージョンが表示されれば成功
$ ~/opt/bin/gettext --version　

#git install
$ cd ~/sysad/
$ wget https://codeload.github.com/git/git/zip/master
$ unzip master
$ cd git-master
$ autoconf
$ ./configure --prefix=/home/<USER>/opt
$ make all
$ make install

##インストールされたか確認
### git version 2.11.GIT
$ ~/opt/bin/git --version
```

##3. パスを通す
* gitは~/opt/bin/gitへインストールされていますが、都度/opt/bin/gitは打つのが手間なので、pathを通しておきます
* zserverはbashで動いているので、~/.bashrcを変更します
* これにより、`$ /opt/bin/git clone git@hogehoge` ではなく、`$ git clone git@hogehoge` で実行できるようになります 

```bash
##バックアップの作成
$ cp ~/.bashrc ~/.bashrc.bk
##編集の実行
### export PATH=$HOME/opt/bin:$PATH の追加
$ vi ~/.bashrc

##変更内容の反映
$ source ~/.bashrc

##確認
### git version 2.11.GIT 
### ~/opt/bin/git --version と同一の結果になっていればOK
$ git --version
```
###変更後の.bashrc
```bash:~/.bashrc
# .bashrc

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

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

##4. composerのインストール
* 今回はphp5.6を使用するので、php5.6がインストールされているパスを指定します
* パスは以下より確認できます
* https://www.xserver.ne.jp/manual/man_program_soft.php
* php5.6は　/usr/bin/php5.6へインストールされているようです
* composerのインストールコマンドに従い、パスを通した~/optのbinへインストールします
* ここまでやってサーバー側に既にcomposerはインストールされていることに気づきました・・・しかも結構最新・・・
* `$ /usr/bin/composer --version`   1.3.1

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

#確認
##Composer version 1.3.2
$ composer --version
##サーバーに元からインストールされているバージョンが表示される場合は再度bashrcの再読込を実行
$ source ~/.bashrc
```

##5. laravelのプロジェクトを特定のディレクトリへデプロイ・インストール
* laravelのデフォルトの公開ディレクトリはpublicですが、XSERVERの公開ディレクトリは`public_html`、サブドメインの場合は、`public_html/サブドメイン名`が公開ディレクトリとなります
* このままだとプロジェクトの階層を変えたりと手間なので、新たに非公開領域へディレクトリを作成し、そこへデプロイを行い
* シンボリックリンクとhtaccessでapacheの公開ディレクトリと、プロジェクトのpublicをつなげたいと思います

###構造のイメージ
```
~/production/    プロジェクトディレクトリ　gitをcloneする場所
          /app
          /public      laravelの公開ディレクトリ

~/ドメイン名/public_html  ドメインの公開ディレクトリ
          /.htaccess 全てのアクセスをpublic配下へ移動させる
          /public  ~/production/publicへのシンボリックリンク
```

###deploy、composerの実行、laravel setup
```bash
##ソースコードの展開
$ mkdir ~/production
$ cd ~/production
$ git clone git@github.com:FullSpeedInc/ProjectName .
##ライブラリのダウンロード
$ composer install
##laravelの設定
$ /usr/bin/php5.6 artisan key:generate
$ chmod -R 777 storage
$ chmod -R 777 bootstrap/cache
##dbのmigration
$ /usr/bin/php5.6 artisan migrate
```

###6. デプロイした公開ディレクトリを、WEBの公開ディレクトリからリダイレクト
* 5の構造に合わせて、htaccessの作成とシンボリックリンクの設定をします

```bash
cd ~/ドメイン名/public_html
vim .htaccess
ln -s ~/production/public ./public
```

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