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

Labels:  DevOps 投稿者: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エンジニア
フロントエンドエンジニア
インフラエンジニア
新卒エンジニア
その他採用情報

関連記事

開発環境のDocker化

インフラエンジニアの金澤です。 今回、ランサーズの開発環境をDocker化しましたので、その内容を紹介いたします。 Docker移行の決断 Dockerについては、ここ1年で技術的な調査はしていましたが、決定的なメリットを見出していたわけではなく、採用に踏み切 …

thumbnail
API仕様書をMarkDownで書き、GitHubをつかって運用する方法

こんにちは、tsuyoshiです。 API仕様書の作成や、その運用。皆さんはどうやっていますか? 現在自分が所属するチームでは、以下のツールを使って API をドキュメント形式で書いて管理しています。 - api blue print: APIドキュメントを …

ランサーズ リリースシステム 〜 Jenkins + Fabrics

こんにちわ。エンジニアの こじま です。 今回は,ランサーズのリリースシステムの紹介をします。 弊社プラットフォームは,1日に多い時は10回以上のコードのリリースを実施します。 ユーザ様によりよいプラットフォームを提供すべく日々,リリースをし改善を実施していま …