Laravelをレンタルサーバーに手動デプロイする手順

CPIの共用サーバーにLaravel5を手動デプロイするメモ。
難しいことはできない。

|         |バージョン |
|:------  |-------:|
| Laravel | 5.4.23 |
| PHP     | 7.1.1  |
| MySQL   | 5.6.30 |

パッケージ管理には`composer`を使う。
バージョン管理には`Git`を使う。

## デプロイの流れ

localにあるプロジェクトをレポジトリにプッシュ。
RemoteにSSHログイン。
Remoteからレポジトリのプロジェクトをクローンもしくはプル。


## プロジェクト作成

```
laravel new sample
```

開発はがんばる。


## SSH利用前準備

コントロールパネルの「公開サイトSSHを利用する」から公開鍵を登録しておく。
ついでにSSHのポート番号も確認しておく。
localの`~/.ssh/config`に設定を書いておくと、
`ssh 任意の名前`で接続できて便利だよ。

```
Host 任意の名前
  HostName ホスト名
  User ユーザーID
  Port ポート番号
```

## composerインストール

で、早速、SSHでログイン。

CPIでPHPコマンドを叩く時はこうする。

```
% php-7.1 -v
PHP 7.1.1 (cli) (built: Feb 17 2017 07:15:12) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
```

`php`コマンドはない。
ふーん。

composerインストール

```
curl -sS https://getcomposer.org/installer | php-7.1
```

`php-7.1 composer.phar`と叩いてバージョンが表示されればOK。


## プロジェクトインストール

ホスティングサービスはBitbucketを使用。
`https`でクローンしてくる想定。
URLはBitbucketからコピペしてくる。

```
git clone https://ユーザー名@bitbucket.org/ユーザー名/プロジェクト名.git laravel
```

プロジェクトルートへ移動。
パッケージインストール。

```
cd laravel/
php-7.1 ~/composer.phar install
```

`post-install-cmd`の箇所でエラーが出るので、手動で叩く。

```
php-7.1 artisan optimize
```

環境変数設定。

```
cp .env.example .env
vim .env
```

設定内容はこんな感じ。

```
APP_NAME=プロジェクト名
APP_ENV=production

# php-7.1 artisan key:generate
APP_KEY=作成したkey

APP_DEBUG=false
APP_LOG_LEVEL=debug
APP_URL=http://ドメイン名

# データベースはコントロールパネルの「MySQL 5.6 データベースの追加・削除」から作成しておくこと。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=データベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# メールは下記の設定で送れた
MAIL_DRIVER=sendmail
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=任意のメールアドレス
MAIL_FROM_NAME=任意

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
```

いくつかコマンドを叩く。

```
php-7.1 artisan config:cache
php-7.1 artisan route:cache
php-7.1 artisan migrate
chmod 777 bootstrap/cache
chmod 777 storage
```

シンボリックリンクを張る。

```
ln -s /usr/home/ユーザーID/laravel/public/index.php /usr/home/ユーザーID/html

# 適宜CSSやJS、storageにも張る。
```

ドキュメントルートに`.htaccess`設置

```
cp ~/laravel/public/.htaccess ~/html/.htaccess
cd ~/html
vim .htaccess
```

内容を下記のように修正

```
# デフォルトバージョン以外のPHPを使用する場合
AddHandler x-httpd-php71 .php

# ここにバージョンに対応したphp.iniを設置する
# コンパネの「プログラムのパスとサーバーの情報」→「PHP ini の設定情報」からコピペ
suPHP_ConfigPath /usr/home/ユーザーID/conf/

# シンボリックリンクの有効化
Options +SymLinksIfOwnerMatch

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    # RewriteCond %{REQUEST_FILENAME} !-d <--これをコメントアウトして
    RewriteRule ^(.*)/$ /$1 <--　こう修正する

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
```

これを削除しておく。

```
rm ~/html/index.html
```

以上。