ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  CakePHP, PHP 投稿者:numahe

Vagrant上で PHP7 & CakePHP3の開発環境構築

こんにちは!2017年新卒のnumaheです。

現在インターン期間中なのですが、cakephpを勉強する!ためにvagrantで開発環境を構築しました。「どうせだったら最新のphpとcakephpで作ろうか」という上司の一声もあり、今回はPHP7とCakephp3で動かしてみます。

Vagrantのダウンロード & セットアップ

下記のURLからvagrantをダウンロード。

ダウンロードが完了したら
vagrant boxを追加(http://www.vagrantbox.es/)

ディレクトリを作成

vagrant init

vagrant up

vagrant ssh
していきます。

※今回boxはDebian Jessie 8.0 Release x64 (Minimal, Shrinked, Guest Additions 4.3.26)
を使用します。

vagrant box add Debian/Jessie8.0 https://github.com/holms/vagrant-jessie-box/releases/download/Jessie-v0.1/Debian-jessie-amd64-netboot.box
mkdir cakephp_test
cd cakephp_test
vagrant init Debian/Jessie8.0

ここで、作成されたVagrantfile private_networkをコメントアウトを外します。

vi Vagrantfile

 config.vm.network "private_network", ip: "192.168.33.10"
vagrant up
vagrant ssh

これで無事vagrant sshできました。

php7 & Apache & MySQL のインストール

vagrant の仮想環境上で諸々インストールしていきます。

# PHP 7.0インストール
# /etc/apt/sources.list に http://packages.dotdeb.org を追加
vi /etc/apt/sources.list
http://packages.dotdeb.org

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg
sudo apt-get update
sudo apt-get install php
php -v
PHP 7.0.12-1~dotdeb+8.1 (cli) ( NTS )
# Apache/2.4.10インストール
sudo aptitude -y install apache2
vi /etc/apache2/conf-enabled/security.conf
# 26行目:変更
ServerTokens Prod

sudo apache2 -v
Server version: Apache/2.4.10 (Debian)
# Mysql5.7.16インストール
mkdir ~/src
cd ~/src
wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb
sudo dpkg -i mysql-apt-config_0.6.0-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
Server version: 5.7.16 MySQL Community Server (GPL)

完了です。

composerのインストール & cakePHPプロジェクトの作成

今回は、cakephpの公式のインストール方法として, Composerを使用します。

アプリ名はtest_app

cd /vagrant
curl -s https://getcomposer.org/installer | php
php composer.phar create-project --prefer-dist cakephp/app test_app
Problem
 - cakephp/cakephp 3.3.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.


どうやらintlという拡張機能が必要らしいです。

apt-cache search intl
# intlと検索し、php7.0のintlをインストールします。
sudo apt-get install php7.0-intl
# 一度test_appを削除してプロジェクトを再作成します。
rm -rf test_app
php composer.phar create-project --prefer-dist cakephp/app test_app
Problem
- cakephp/cakephp 3.3.7 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.


mbstringという拡張機能も必要らしいです。

apt-cache search mbstring
# 同じようにmbstringと検索し、php7.0のmbstringをインストールします。
apt-cache search mbstring
sudo apt-get install php7.0-mbstring
rm -rf test_app
php composer.phar create-project --prefer-dist cakephp/app test_app
# もう一度test_appを削除してプロジェクトを再再作成します。

今度はうまくいきました。

database設定

次にデータベースの設定を行っていきます。
データベースを作成し、test_appの設定を書き換えます。

mysql -uroot -p
# パスワードを入力してmysql にログインします。
mysql> create database test_app_db;
exit;
bye

app.default.php

'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'root',
            'password' => ‘xxxx',
            'database' => ’test_app_db',
            'encoding' => 'utf8',
            'timezone' => '+09:00',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,

ついでにbootstrap.phpのtimezoneも変更
bootstrap.php

date_default_timezone_set('Asia/Tokyo’);

ブラウザで確認

ここまで設定したら、最後にブラウザで確認してみましょう。

bin/cake server -H 192.168.33.10

ブラウザでに接続
cakephpの画面が表示されました。
これでPHP7とCakephp3の開発環境が完成しました。

ついでに

また新しく同じ仮想環境を作成したい場合面倒なので、この環境をcustam_debian_cakephpという名前でbox化してしまいます。

#vagrantからログアウト
vagrant halt
vagrant package
vagrant box add custam_debian_cakephp package.box

これですぐに開発環境が構築できます。
こんなに簡単に様々な環境が作れるなら、いろんな環境を作ってみるのもおもしろそうです。
以上です!

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。

PHPエンジニア
Rubyエンジニア
フロントエンドエンジニア
インフラエンジニア
新卒エンジニア
その他採用情報

関連記事

CakePHP 3.4 Console で Rails Console のように SQL クエリログを表示する方法

ステラ・ルーのぬいばが欲しい nakajiman です。 Rails Console と同じように CakePHP 3 Console を使いたいんですが、CakePHP Console ってモデルを操作しても、Console にクエリログが表示されないんです …

CakePHP 3.4 ORM のクエリを調べてみた exists 編

愛犬のダックスをサマーカットし過ぎて失敗した nakajiman です。毛並みがチクチクして痛いのです。 CakePHP 3.4 ORM がどんなクエリを発行しているのか調べてみます。まず、簡単なところで、レコードが存在するかどうか調べる exists を見て …

AWSでWordPressのスケールアウト

インフラエンジニアの金澤です。 今回は、AWS上のWordPressサーバーをスケールアウトするために行った手順について紹介いたします。 ランサーズで運用しているWordPressサービス ランサーズでは10以上のWordPressサービスをAWSで運用してい …