CPI ACE01 2015へComposerでLaravelをインストールしてログインするまで

CPIのホスティングサービス ACE01 2015 で Laravel を動かす手順メモ。
共用サーバーなので root 権限がなく色々制約はありますが、大丈夫です。


#1. composer をインストールします
###① SSH でサーバーにログインします
 - CPI のコントロールパネルから設定して、SSH 接続します。
 - Windows 環境なら **TeraTerm** でショートカット作っちゃう方法が、Mac 環境なら ~/ssh 以下に **.config** を設定するとアクセスが楽です。

###②composer をインストールします
```
$ cd ~/
$ mkdir bin
$ curl -sS https://getcomposer.org/installer | php-7.0 -- --install-dir=bin --filename=composer
```
時間かかるのでその間にローカルのディレクトリ決めたり(S)FTPを設定して待ちましょう

#2. Laravel をインストールします

###① Laravel をインストールします
```
$ php-7.0 ~/bin/composer create-project --prefer-dist laravel/laravel
```
※通常と大きく違う部分です
※パーミッション変更はあまり必要なかったように思います

###②圧縮してローカルに落としてきます
```
$ cd ~/
$ tar zcvf laravel.tar.gz laravel
```
ダウンロードしてきます
Windows 環境の場合、ローカル側では cygwin を使うと Linux 感覚そのまま作業することができますね！
ローカルで ```$ tar zxvf laravel.tar.gz``` して解凍します

###③ルートディレクトリを変更します

ルート権限が無くルートディレクトリを変更できないので、Laravel の設定からルーティングを変更します
public 以下をそのまま、root/html にコピーします
root/html/index.php を編集します

[ 変更前 ]

``` php:root/html/index.php
require __DIR__.'/../vendor/autoload.php';
.
.（中略）
.
$app = require_once __DIR__.'/../bootstrap/app.php';
```

[ 変更後 ]

``` php:root/html/index.php
require dirname(__DIR__).'/laravel/vendor/autoload.php';
.
.（中略）
.
$app = require_once dirname(__DIR__).'/laravel/bootstrap/app.php';
```

root/html/.htaccess を CPI に合わせて3か所追記します

```root/html/.htaccess
AddHandler x-httpd-php71 .php #追記

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

    Options +SymLinksIfOwnerMatch #追記
    RewriteEngine On
    RewriteBase / #追記
    .
    .
    .
```

root/html 以下をアップロードして、index.html をサーバーから削除します

###④アクセスしてみます
ブラウザでサイトURLを叩いてアクセスしてみます
表示がおかしければサーバーログか storage/logs/Laravel.log を参照してみてください


#3. 認証を実装します

###① SSHでサーバーにログインします
###② 認証を有効化します

```
$ cd ~/laravel
$ php-7.0 migrate make:auth
```
ちなみにここでブラウザを再読み込みすると、右上にLOGIN, REGISTER のリンクが増えています

###③データベース設定を変更します
.env を編集します

```
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=*データベース名*
DB_USERNAME=*データベースユーザー名*
DB_PASSWORD=*データベースパスワード*
```
※DB_PORTはMySQL5.5なら3306 / 5.6なら3307です

###④操作用のモデルを作成します

```
$ php-7.0 artisan make:model Model/MyUser
```

``` php:app/Model/MyUser.php
class MyUser extends Model
{
    protected $table = 'users';
    protected $dates = ['deleted_at'];
    protected $guarded = ['id'];
    protected $hidden = ['password', 'remember_token'];
}
```

###⑤ DatabaseSeeder を設定してマスターデータを登録します。
###⑥ DBをmigrateします（同時にSeederを実行してテストデータを入れていきます）

```
$ php-7.0 artisan migrate --seed
```
※migration でエラーが出るようなら多分文字数制限の設定だと思います。 解決してから

```
$ php-7.0 artisan migrate:refresh --seed
```
※～～ **already exists** 的なエラー出るようなら、phpMyAdmin 等で一度 DB を空にして、再度 migrate してください

###⑦ アクセスしてログインしてみます
ブラウザでサイトURLを叩いてアクセスしてみます
Loginからログイン操作をしてみます

###⑧ ログアウトします
上手くいけばログアウトもしておきます



#4. メールアドレス以外で認証できるようにカスタマイズしてみます
　[【参考】 Laravel 5.4 の認証機能とそのカスタマイズ](https://qiita.com/naga3/items/4f3defde59b31a1a797e) が非常にわかりやすく、大変参考になりました。

###① マイグレーションファイルを編集します
今回はlogin_idとpasswordでの認証に変更します

``` database/migrations/***_create_users_table.php
    ...（前略）

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('login_id', 100); // 追加
```

###③ DatabaseSeeder を更新します
###④ DB を migrate します

```
$ php-7.0 artisan migrate --seed
```

###⑤ ログインフォームを編集します
```resources/views/auth/login.blade.php``` のE-mail欄をuser_idに変更します。

###⑥ 認証メソッドを追加します
``` php:app/Http/Controllers/Auth/LoginController.php
class LoginController extends Controller
{
    ... （中略）

    public function username()
    {
        return 'login_id';
    }
}
```
を追加します

###⑦ アクセスしてログインしてみます
ブラウザでサイトURLを叩いてアクセスしてみます
Loginからログイン操作をしてみます

###⑧ ログアウトします
上手くいけばログアウトもしておきます