Vagrant + CentOS7 + Laravel5系のインストール方法
こんにちはYsです。
先日、こんなツイートをしました。
マナブさん(@manabubannai )の出会い系サイトの開発用slackを見ていたら、Laravelの勉強をしたくなったので、今日から始めます。https://t.co/Kbrl7ka788
— ys (@sy_sh7711) 2019年1月31日
現在、マナブさん(@manabubannai)たちが現状開発している出会い系サービスのslackに参加させていただき、エンジニアの方々の開発フローなどを覗かせて頂いています。
その開発で使用されているのが、PHPフレームワーク【Laravel】でした。
このフレームワーク、PHPの世界では使用されている率が1位です。
僕は、PHPを実業務で使用していましたが、フレームワークは【Zend】というものを使用しており、【Laravel】は使用したことがありません。
その勉強を兼ねて、インストール方法から、使用法までまとめたものを当ブログで発信していきます。
Laravel 環境構築【入門】
※前提として、PC環境にVagrantをダウンロードしてある状態にしてください。
趣旨は違いますがVagrantのインストールは以下で行なっていますので参考にしてください。
≫ MacにVagrantとVirtualBoxをインストールする
流れとしては以下のように行います。
- CentOS7の雛形を作成
- PHP7のインストール
- PHP.iniの設定を変更 【PHP7用】
- Composerのインストール
- 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をインストールするコマンドが用意されているので、こちらをコンソール画面にコピペします。(一応、以下で同じコマンドを用意しました。)
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のインストールを行いました。
これから、Laravelを使用した記事も公開していきます。
参考≫ VagrantでCentOS7を立てたが、httpアクセスが繋がらない時にやったこと
参考≫ CentOS 7 firewalld よく使うコマンド
参考≫ 【PHP】PHPをインストールしたらやっておきたい設定
≫ こちらはCentOS6の手順なのでかなり廃止になっているものや非推奨になっているものがあります。