PHP
Composer
laravel
CPI
ace01

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 を編集します

[ 変更前 ]

root/html/index.php
require __DIR__.'/../vendor/autoload.php';
.
.中略
.
$app = require_once __DIR__.'/../bootstrap/app.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
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 の認証機能とそのカスタマイズ が非常にわかりやすく、大変参考になりました。

① マイグレーションファイルを編集します

今回は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に変更します。

⑥ 認証メソッドを追加します

app/Http/Controllers/Auth/LoginController.php
class LoginController extends Controller
{
    ... 中略

    public function username()
    {
        return 'login_id';
    }
}

を追加します

⑦ アクセスしてログインしてみます

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

⑧ ログアウトします

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