Laravel5.4のためのローカル環境構築について

LaravelにはHomesteadという専用に開発環境があります。Homesteadを使った構築方法については別記事を閲覧下さい。

# 目的
- Windows10のVirtual BoxにCentOSをインストールする
- CentOSにPHP、MySQLをインストールする
- Homesteadを使わずに独自にLaravel用の開発環境を用意する

# 関連サイト
## 公式サイト
- VirtualBox
    - https://www.virtualbox.org/wiki/Downloads
-  Vagrant
    -  https://www.vagrantup.com/downloads.html

## 参考サイト
PhpStormでComposerを使えるようにしたいので、Windows上でComposerを使えるようにします。

- Windows 10 に PHP 7.1 と Composer をインストールする
    - https://mseeeen.msen.jp/install-php7-and-composer-in-windows-10/ 
- Vagrant(1.7.2)でCentOSをインストールする
    - http://qiita.com/ringo0321/items/f07ea1dfc9b7eb9326f8
- CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール
    - http://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e
- CentOSにEPELリポジトリを追加する
    - http://qiita.com/muniere/items/6c4923a070cbbd824f39
- 【yum入門】epel, remiなどのレポジトリをyumに追加する方法
    - http://uxmilk.jp/9315
- CentOS7でのサービス（デーモン）の起動・停止方法
    - http://www.server-memo.net/centos-settings/centos7/service-start.html
- 【5分で！】centOS6.5にMySQLの最新版をyum使ってインストールするぜ
    - http://qiita.com/ritukiii/items/f4e2fbae5d6e7b1aa5f9
- PhpStormでlaravel5.2を使う
    - http://qiita.com/ozy-san/items/d1a32941b43244f5c19d
- Laravelリファレンス
    - https://readouble.com/laravel/5.4/ja/installation.html

# 手順（Windows環境側）

## 複数の仮想環境を作ることを想定してそれらをまとめるフォルダを作る
Windowsに標準で付いているWindowsPowerShellを起動します

```php:memo.txt
// フォルダ作成
mkdir MyVagrant

// MyVagrantに移動する
cd MyVagrant

// 仮想マシンを作るフォルダを作る（MyCentOS）
mkdir MyCentOS_01

// MyCentOSに移動する
cd MyCentOS
```
## 仮想環境へOSをインストール
```php:memo.txt
// Boxへの追加
vagrant box add centos7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box

// インストールされているboxの確認
vagrant box list

// 仮想マシン設定用のVagrantfileを作る
vagrant init centos7.1
または vagrant init bento/centos-7.2

// Vagrantfileを編集して仮想マシンのIPアドレスを192.168.33.10などの任意のIPにする
作成したファイルを開き、private_network部分を編集する

// 仮想マシンを起動する
vagrant up

// 仮想マシンの状態を確認する
vagrant status
```

# 手順（仮想環境側：仮想環境へのログインが必要）
## 下準備
```php:memo.txt
// OSを最新状態にアップデート
sudo yum -y update

// gitとvimをインストール
sudo yum -y install git vim

// treeコマンドのインストール
sudo yum -y install tree

// EPELとRemiリポジトリを追加
// CentOS7公式リポジトリにはepel-releaseパッケージが含まれているので以下コマンドでダウンロードできる
sudo yum -y install epel-release.noarch
sudo yum -y install epel-release
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

// EPELとRemiの一次利用に設定を変更しておく（enabled=0にする）
sudo vim /etc/yum.repos.d/epel.repo
```

## apacheのインストール

```php:memo.txt
// インストール
sudo yum -y install httpd

// バージョン確認
httpd -v

// Apacheを起動し、常時起動にする
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

// ファイアウォールを切る（ローカルの仮想環境の時のみ）
sudo systemctl stop firewalld
sudo systemctl disable firewalld
```

## PHPのインストール

```php:memo.txt
// 古いバージョンを削除
sudo yum remove php-*

// インストール
sudo yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd  php-xml php-mysqlnd

// Laravelを使うための環境確認
rpm -qa | grep php-xml
php -v

// php.iniを編集
sudo vim /etc/php.ini

date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.detect_order = auto
mbstring.encoding_translation = On
mbstring.substitute_charset = none

// Apacheの再起動
sudo systemctl restart httpd.service
```

## MySQLのインストール

```php:memo.txt
// 不要なDBを削除する
sudo yum -y remove mariadb-libs
rm -Rf /var/lib/mysql/

// 最新版のMySQLのリポジトリを追加する
sudo yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum -y install mysql-community-server
sudo service mysqld start

// パスワード確認
grep 'temporary password' /var/log/mysqld.log
http://qiita.com/ozawan/items/648bdc146041ceb2e390

// 自動起動確認、自動起動設定
systemctl is-enabled mysqld.service
sudo systemctl enable mysqld.service

// 文字コードの変更
sudo vim /etc/my.cnf

// 最終行に追加する設定値
character_set_server=utf8
skip-character-set-client-handshake
```

## phpMyAdminの導入
http://qiita.com/saboten10/items/006ac4f14b9dc6ce5052
sudo mv phpMyAdmin /var/www/html/

## MySQLのデータベース作成
mysql -u root -p
create database hogehoge_laravel;
grant all on hogehoge_laravel.* to yunomi@localhost identified by 'hogehoge';

# Laravelの導入（PhpStorm2017）
## プロジェクトの作成
1. 新規プロジェクトを作成
2. 作成時の選択肢として「Composerプロジェクト」->「laravel/laravel」を選択する

![2017-08-27_21h07_24.png](https://qiita-image-store.s3.amazonaws.com/0/164066/1cc93e28-4cb7-4cca-8b18-632e0da74ae8.png)

## 設定の変更
- .envファイルの設定変更
    - 下記の内容を設定した内容に沿うように変更する
        - DB_DATABASE=hogehoge
        - DB_USERNAME=hogehoge
        - DB_PASSWORD=hogehoge
- app.php環境変更
    - 下記の内容に変更する
        - 'timezone' => 'Asia/Tokyo',
        - 'locale' => 'ja',
        - mysqlの部分を変更
            - 'charset' => 'utf8',
            - 'collation' => 'utf8_general_ci',

- パーミッションの変更
    - storageとbootstrap/cacheディレクトリをWebサーバーから書き込み可能にする。設定しないとLaravelが正しく実行できない。高いセキュリティを確保する必要がない開発環境においては全ユーザーに対して書き込みを許可する指定でよい。

```php:memo.txt
sudo chmod -R a+w storage/*
sudo chmod -R a+w bootstrap/cache
```
- URLへのアクセスを簡易にする
    - https://readouble.com/laravel/5.4/ja/installation.html#pretty-urls
    - http://ysklog.net/mod-rewrite/related02.html

## Laravel用の便利なコンポーネントを追加（--devを付けておく方が良い）
1. .envファイルを選択し、下記のコンポーネントを追加する
    - laravel-debugbar
    - laravel-ide-helper
    - doctrine/dbal
2.  config/app.phpの「providers」に下記を追加する
    - Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
    - Barryvdh\Debugbar\ServiceProvider::class,
3.  config/app.phpの「aliases」に下記を追加する
    - 'Debugbar'  => Barryvdh\Debugbar\Facade::class,
4. 以下のコマンドをPhpStormのターミナルで実行する
    - php artisan ide-helper:generate
    - php artisan ide-helper:meta  

## Laravelの開発で使える便利なPhpStormプラグインを追加する

- [PhpStormプラグイン](http://childhooddream.sakura.ne.jp/2017/08/12/jetbrains%E8%A3%BD%E5%93%81%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/)

## サーバーと内容を同期させる

- [PhpStormでデータを同期する方法](http://childhooddream.sakura.ne.jp/2017/07/16/phpstorm%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%90%8C%E6%9C%9F%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)
- すべての変更が完了したらローカルの内容をサーバーにアップロードする