文系卒のWebエンジニアの成長と備忘録
エンジニア経験を生かして発信するメディアサイト

Vagrant + CentOS7 + Laravel5系のインストール方法

PHP Laravel

こんにちはYsです。
先日、こんなツイートをしました。

現在、マナブさん(@manabubannai)たちが現状開発している出会い系サービスのslackに参加させていただき、エンジニアの方々の開発フローなどを覗かせて頂いています。
その開発で使用されているのが、PHPフレームワーク【Laravel】でした。

このフレームワーク、PHPの世界では使用されている率が1位です。
僕は、PHPを実業務で使用していましたが、フレームワークは【Zend】というものを使用しており、【Laravel】は使用したことがありません。
その勉強を兼ねて、インストール方法から、使用法までまとめたものを当ブログで発信していきます。

Laravel 環境構築【入門】

※前提として、PC環境にVagrantをダウンロードしてある状態にしてください。
趣旨は違いますがVagrantのインストールは以下で行なっていますので参考にしてください。
≫ MacにVagrantとVirtualBoxをインストールする

流れとしては以下のように行います。

  1. CentOS7の雛形を作成
  2. PHP7のインストール
  3. PHP.iniの設定を変更 【PHP7用】
  4. Composerのインストール
  5. Laravelのインストール

CentOS7の雛形を作成 / 確認

VagrantでCentOS7の雛形を作成していく前に、適当なディレクトリを作成してそこに入れていきます。

# MyVagrantというディレクトリを作成する
$ mkdir MyVagrant

# MyVagrantのディレクトリに入る
$ cd MyVagrant

CenOS7の雛形を作成

雛形を作成するには、vagrant box add {BoxName} {Url}というコマンドを使用します。{BoxName}の部分は任意です。分かりやすい名前の方が良いので今回はCentOS7.1という名前にしています。

$ vagrant box add centos7.1 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box

上記のコマンドでは、centos7.1という名前でcentos7の仮想環境を作成するといった意味合いになります。

VirtualBoxのURLは以下から確認できますので、興味がある人はどんなの物があるのか覗くと良いと思います。
≫ Vagrantbox.es

ダウンロードが終わったらvagrant init {BoxName}というコマンドを使用して、VagrantFile(設定ファイル)を作成します。

$ vagrant init CentOS7.1

上記のコマンドのあと、MyVagrantというディレクトリにVagrantfileが作成されるはずなので、確認してください。このVagrantfileがある場所でVirtualBoxの起動、停止などを行います。

$ ls
Vagrantfile  

次に見慣れないコマンドかもしれませんが、以下のコマンドを実行してください。これは、Vagrantfileに記載があるipアドレスの記述を修正し、アクセス出来るように設定するコマンドです。

$ sed -i '' -e 's/# config.vm.network "private_network", ip: "192.168.33.10"/config.vm.network "private_network", ip: "192.168.33.10"/' Vagrantfile

これで雛形は完成しました。次に仮想環境の起動を行うためVagrant upというコマンドを打ちます。(初回起動時は時間がかかります)

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
[default] GuestAdditions 6.0.2 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/MyVagrant/
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.$ vagrant up

無事に起動できたら、vagrant statusというコマンドを打ってみて下さい。以下のようになっていれば起動している証拠です。

$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

これがpoweroff (virtualbox)になっていると止まっている証拠です。

これで雛形が完成しました。次に実際に仮想環境内に入り、必要なツール等をインストールしていきます。

仮想環境にログイン

仮想環境が起動したらvagrant sshというコマンドでログインします。無事にログインが出来るとターミナル画面が少し変わり[vagrant@localhost ~]という表記になっているはずです。

$ vagrant ssh
Last login: Tue May 21 00:55:56 2019 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ 

次の項目からは[vagrant@localhost ~]のなかで作業します。

PHP7のインストール

LaravelにはPHP7以上の環境が必要なので、インストールしますが今はPHPをインストールできる環境が何もないので必要なツールをインストールします。

# パッケージのupdate
[vagrant@localhost ~]$ sudo yum -y update

# Laravelのファイルで解凍コマンド必要な必要なためインストール
[vagrant@localhost ~]$ sudo yum -y install zip unzip

epelリポジトリの追加(PHPのインストールに必要な物と考えればOKです)

# epelのリポジトリ作成
[vagrant@localhost ~]$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHPとPHPモジュールのインストール

[vagrant@localhost ~]$ sudo yum install -y --enablerepo=remi,remi-php71 php-common php-pdo php-cli php-devel php-mysqlnd php-mbstring php-gd php-intl php-xml php-bcmath

なぜこんなモジュールをいれてるかと言うとLaravelを動かすために必要な物だからです。
≫ Laravelのサーバー要件

上記のコマンドの後、PHPがインストールされたのか確認しましょう。以下のように出力されていればOK!

[vagrant@localhost LaravelProject]$ php -v
PHP 7.1.26 (cli) (built: Jan  9 2019 08:18:06) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

PHP.iniの設定を変更 【PHP7用】

少し話が脱線しますが、PHPの設定ファイルであるPHP.iniファイルというのがありますが、最低限やっておいた方がいい設定を書いておこうと思います。
※Wordpressの仕様上コマンドが攻撃と見なされるのか、表示できない不具合があります。
sudo sed -i -e を先頭に付与して実行して下さい。

  • ログ関連
  • タイムゾーン関連
  • 文字コード関連
  • メモリ関連
  • セキュリティ関連

ログ関連

phpに関連するエラーログをに吐くように設定

"/^;error_log = syslog$/a error_log=\/var\/log\/php\.log" php.ini

タイムゾーン関連

PHPのタイムゾーンを日本時間に設定。

's/^;date\.timezone =$/date\.timezone = "Asia\/Tokyo"/g' php.ini

文字コード関連

英語が苦手な人向けに日本語に設定

"s/;mbstring\.language = Japanese/mbstring\.language = Japanese/g" php.ini

メモリ関連

一度にPOST送信で送れるファイルサイズの上限を変更

"s/post_max_size = 8M/post_max_size = 16M/g" php.ini

セキュリティ関連

レスポンスヘッダにPHPのバージョン情報などが露呈してしまうため設定をOFFに(Chromeの拡張ツール使用すれば見れらるけど、念の為にOFF)

"s/expose_php = On/expose_php = Off/g" php.ini

セッション ID 文字列の長さを128bitに変更
これはPHP側が推奨しています。デフォルトでは32bitで用意されていますが、長ければ長いほどセキュリティが高まるので一応128bitに変更
≫ PHP: 実行時設定 – Manual

"s/session.sid_length = 26/session.sid_length = 256/g" php.ini

Coposerのインストール

LaravelのインストールにはComposerというPHPのパッケージ管理ツールを使用します。
公式サイトは以下になるのでこちらをダウンロードを行います。
上記のリンクに、Composerをインストールするコマンドが用意されているので、こちらをコンソール画面にコピペします。(一応、以下で同じコマンドを用意しました。)
Composer install

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

上記のコマンドを全て実行した後、最後にこういった文章が出力されていれば成功です。

Composer (version 1.8.3) successfully installed to: /home/vagrant/LaravelProject/composer.phar
Use it: php composer.phar

次にPATHの変更とアクセス権の変更を行います。
# アクセス権の設定と書いてある下のコマンドの行頭にsudo chmod を付与して下さい
※Wordpressのセキュリティの設定上貼り付けられません申し訳ないです…。

# Composerを使用できるようにPATHを変更
sudo mv composer.phar /usr/local/bin/composer

# アクセス権を設定
a+x /usr/local/bin/composer 

Composerが無事に使用できるかどうか確認します。以下のように出力されていればOK!

LaravelApp]$ composer --version
Composer version 1.8.5 2019-04-09 17:46:47

Laravelのインストール

先ほどインストールしたComposerを使用して、Laravelをインストールを行います。

[vagrant@localhost ~]$ composer global require "laravel/installer=1.1"

Laravelのインストールが終わったので、次にLaravelでプロジェクトを作成します。
create-project --prefer-dist laravel/laravel {project}で作成します。{project}は任意の名前でOK。今回はweb_sampleという名前で作成。

[vagrant@localhost ~]$ composer create-project --prefer-dist laravel/laravel web_sample

プロジェクトが作成されると、web_sampleというディレクトリが作成できるはずです。
そのプロジェクトの中身を確認します。以下のようになっていればOK

[vagrant@localhost ~]$ cd web_sample/
[vagrant@localhost web_sample]$ ls -ls
合計 188
  0 drwxr-xr-x 1 vagrant vagrant    224  5月 14 13:28 app
  4 -rwxr-xr-x 1 vagrant vagrant   1686  5月 14 13:28 artisan
  0 drwxr-xr-x 1 vagrant vagrant    128  5月 14 13:28 bootstrap
  4 -rw-rw-r-- 1 vagrant vagrant   1550  5月 14 13:28 composer.json
156 -rw-r--r-- 1 vagrant vagrant 159029  5月 20 05:49 composer.lock
  0 drwxr-xr-x 1 vagrant vagrant    480  5月 14 13:28 config
  0 drwxr-xr-x 1 vagrant vagrant    192  5月 14 13:28 database
  4 -rw-rw-r-- 1 vagrant vagrant   1125  5月 14 13:28 package.json
  4 -rw-rw-r-- 1 vagrant vagrant   1156  5月 14 13:28 phpunit.xml
  0 drwxr-xr-x 1 vagrant vagrant    288  5月 14 13:28 public
  8 -rw-rw-r-- 1 vagrant vagrant   4151  5月 14 13:28 readme.md
  0 drwxr-xr-x 1 vagrant vagrant    192  5月 14 13:28 resources
  0 drwxr-xr-x 1 vagrant vagrant    192  5月 14 13:28 routes
  4 -rw-rw-r-- 1 vagrant vagrant    563  5月 14 13:28 server.php
  0 drwxr-xr-x 1 vagrant vagrant    160  5月 14 13:28 storage
  0 drwxr-xr-x 1 vagrant vagrant    192  5月 14 13:28 tests
  0 drwxr-xr-x 1 vagrant vagrant   1312  5月 20 06:01 vendor
  4 -rw-rw-r-- 1 vagrant vagrant    538  5月 14 13:28 webpack.mix.js

Laravel用のサーバーを立ててみる

Laravelにはビルドインサーバーというものがあり、Apacheなどがなくてもサーバーが立ち上がります。ローカルで使用することが目的なので、基本的には開発向け。
そのための設定を行います。

設定1ファイアーウォールの設定を解除する
CentOS7の仕様なのか、ファイアーウォールの設定がされているとビルドインサーバーを立ち上げても接続が出来ません。そのため解除します。systemctl status firewalld.serviceというコマンドを使用して、状態を確認します。

[vagrant@localhost web_sample]$ systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon

   Active: active (running) since 火 2019-05-21 01:36:00 UTC; 3h 29min ago
     Docs: man:firewalld(1)
 Main PID: 2385 (firewalld)
 5月 21 01:35:59 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
 5月 21 01:36:00 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.

上記のように、Active: active (running)となっているとファイアーウォールが動いてる状態です。そのためこれを解除します。解除するコマンドはsystemctl stop firewalld.service

コマンドを打つと、1か2か選ぶ選択肢が出てくるので2を選びパスワードはvagrantと記入します。(※パスワードは打っても文字が出てこないです)
COMPLETEと出ていれば設定完了!

[vagrant@localhost web_sample]$ systemctl stop firewalld.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Multiple identities can be used for authentication:
 1.  veewee
 2.  vagrant
Choose identity to authenticate as (1-2): 2
Password: 
==== AUTHENTICATION COMPLETE ===

再度、セキュリティの設定を確認します。Active: inactiveになっていればOK!これでサーバーに接続できる状態になりました。

 [vagrant@localhost web_sample]$ systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Active: inactive (dead) since 火 2019-05-21 05:12:11 UTC; 4min 11s ago
     Docs: man:firewalld(1)
 Main PID: 2385 (code=exited, status=0/SUCCESS)

 5月 21 01:35:59 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
 5月 21 01:36:00 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.

設定2サーバーを立ち上げる
サーバーを立ち上げる前にkeyを生成し、サーバーを立ち上げます。
※ここで立ち上げるサーバーのIPはVagrantfileに記載があるものです。
調べると192.168.33.10が使用できるのでこれをhostとして指定しサーバーを立てます。

# Keyの生成が行われます
[vagrant@localhost web_sample]$ php artisan key:generate
Application key set successfully.

# 使用できるIPのチェック
[vagrant@localhost web_samp]$ ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
    inet6 fe80::7cf3:a13d:e25e:e26f/64 scope link noprefixroute 
    inet 192.168.33.10/24 brd 192.168.33.255 scope global noprefixroute eth1

# サーバーを立てる
[vagrant@localhost web_samp]$ php artisan serve --host 192.168.33.10 --port 8000
Laravel development server started: <http://192.168.33.10:8000>

出てきたURLhttp://192.168.33.10:8000がLaravel側で立てられたサーバーのURLになります。これにアクセスすると以下のような画面が出てくるので出てきていれば成功です。

Laravel welcome画面


Laravelのインストールを行いました。
これから、Laravelを使用した記事も公開していきます。

参考≫ VagrantでCentOS7を立てたが、httpアクセスが繋がらない時にやったこと
参考≫ CentOS 7 firewalld よく使うコマンド
参考≫ 【PHP】PHPをインストールしたらやっておきたい設定
≫ こちらはCentOS6の手順なのでかなり廃止になっているものや非推奨になっているものがあります。

\記事のシェアをお願いします!/