Mac(Yosemite)のVagrant(ubuntu14.04 server)にPHP開発環境を構築する - Phalcon編
ビルドスクリプトを改造して、Phalconのインストールまで行えるようにする。(あとついでにSQLite3も入れる)
Phalconのインストール方法
ubuntuの場合、PPAからインストールできる。
sudo apt-add-repository ppa:phalcon/stable sudo apt-get update sudo apt-get install php5-phalcon
SQLite3のインストール方法
SQLite3とPHP用のライブラリを入れる必要がある。
sudo apt-get install sqlite3 sudo apt-get install php5-sqlite
ビルドスクリプト作成
上記を踏まえてスクリプトを作り直し、最終的に出来上がったのがこちら
#!/bin/bash
#MySQLパスワードを設定する
MYSQL_PASS="password"
CheckStatus()
{
if [ $? -eq 0 ]
then
echo "$1 : 成功"
else
echo "$1 : 失敗"
fi
}
#共有ディレクトリ設定
sudo /etc/init.d/vboxadd setup > /dev/null 2>&1
CheckStatus "共有ディレクトリ設定"
#aptリポジトリ更新
sudo apt-get update > /dev/null 2>&1
CheckStatus "aptリポジトリ更新"
#MySQLインストール
dpkg -l |grep mysql-server > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "mysql-server-5.5 mysql-server/root_password password ${MYSQL_PASS}" |sudo /usr/bin/debconf-set-selections
CheckStatus "MySQLパスワード設定"
echo "mysql-server-5.5 mysql-server/root_password_again password ${MYSQL_PASS}" | sudo /usr/bin/debconf-set-selections
CheckStatus "MySQLパスワード設定2回目"
sudo apt-get install mysql-server -y > /dev/null 2>&1
CheckStatus "MySQLインストール"
else
echo "MySQLは既にインストールされています"
fi
#Apacheインストール
dpkg -l | grep apache2 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install apache2 -y > /dev/null 2>&1
CheckStatus "Apacheインストール"
else
echo "Apache2は既にインストールされています"
fi
#Apache関連パッケージインストール
dpkg -l | grep apache2-utils > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install apache2-utils -y > /dev/null 2>&1
CheckStatus "Apache関連パッケージインストール"
else
echo "Apache2関連パッケージは既にインストールされています"
fi
#SQLite3インストール
#dpkg -l | grep sqlite3 > /dev/null 2>&1
which sqlite3 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install sqlite3 -y > /dev/null 2>&1
CheckStatus "SQLite3パッケージインストール"
else
echo "SQLite3パッケージは既にインストールされています"
fi
#PHPインストール
dpkg -l | grep php5 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install php5 -y > /dev/null 2>&1
CheckStatus "PHPインストール"
else
echo "PHPは既にインストールされています"
fi
#PHP関連パッケージインストール
dpkg -l | grep php5-mysql > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install php5-mysql -y > /dev/null 2>&1
CheckStatus "php-mysqlパッケージインストール"
sudo apt-get install php5-sqlite -y > /dev/null 2>&1
CheckStatus "php5-sqliteパッケージインストール"
else
echo "PHP関連パッケージは既にインストールされています"
fi
#Phalconインストール
dpkg -l | grep php5-phalcon > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-add-repository ppa:phalcon/stable > /dev/null 2>&1
CheckStatus "ppa:phalcon追加"
sudo apt-get update > /dev/null 2>&1
CheckStatus "aptリポジトリ更新"
sudo apt-get install php5-phalcon -y > /dev/null 2>&1
CheckStatus "Phalconパッケージインストール"
else
echo "Phalconパッケージは既にインストールされています"
fi
#mod_rewrite有効化
sudo a2enmod rewrite > /dev/null 2>&1
CheckStatus "mod_rewrite有効化"
#ドキュメントルート設定
ls /var/www/html | grep index.php > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo rm -rf /var/www/html
sudo mkdir /vagrant/docroot
sudo chown vagrant.vagrant /vagrant/docroot
sudo ln -s /vagrant/docroot /var/www/html
echo '<?php phpinfo();?>' > /vagrant/docroot/index.php
ls /var/www/html | grep index.php > /dev/null 2>&1
CheckStatus "ドキュメントルート設定"
else
echo "ドキュメントルート設定は既にされています"
fi
#Apache2再起動
sudo service apache2 restart > /dev/null 2>&1
CheckStatus "Apache2再起動"
変更点は
- ベースのイメージを作ってから時間が経って実行すると思うので、最初にaptリポジトリを更新する
- SQLite3のパッケージ有無をsqlite3でgrepする方法だとlibsqlite3で引っかかってコマンドが入らなくなるためwhichに変更
ビルドスクリプト実行
静的CMS開発環境でビルドを実行してみる。
ちなみに、共有ディレクトリのエラーがうざかったのでエラー解消版として新たに「base_ubuntu1404_1」を作成した
$ mkdir dev/vagrant/dev_phalcon01 $ cd dev/vagrant/dev_phalcon01 $ vagrant init base_ubuntu1404_1 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. $
Vagrantfileは以下を変更
# config.vm.network "private_network", ip: "192.168.33.10"
↓
config.vm.network "private_network", ip: "192.168.33.111"
#追記
config.vm.hostname = "dev-phalcon01"
config.vm.provision "shell", path: "/Users/zow/dev/vagrant/build_script/dev_php.sh"
起動!
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'base_ubuntu1404_1'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: dev_phalcon01_default_1421614217883_83617
==> 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 => 2222 (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: Warning: Connection timeout. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if its present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/zow/dev/vagrant/dev_phalcon01
==> default: Running provisioner: shell...
default: Running: /var/folders/yf/psgfw4xs3z5_dvfnyhtnx6c40000gn/T/vagrant-shell20150119-76183-8cuc6g.sh
==> default: stdin: is not a tty
==> default: 共有ディレクトリ設定 : 成功
==> default: aptリポジトリ更新 : 成功
==> default: MySQLパスワード設定 : 成功
==> default: MySQLパスワード設定2回目 : 成功
==> default: MySQLインストール : 成功
==> default: Apacheインストール : 成功
==> default: Apache関連パッケージインストール : 成功
==> default: SQLite3パッケージインストール : 成功
==> default: PHPインストール : 成功
==> default: php-mysqlパッケージインストール : 成功
==> default: php5-sqliteパッケージインストール : 成功
==> default: ppa:phalcon追加 : 成功
==> default: aptリポジトリ更新 : 成功
==> default: Phalconパッケージインストール : 成功
==> default: mod_rewrite有効化 : 成功
==> default: ドキュメントルート設定 : 成功
==> default: Apache2再起動 : 成功
$
共有ディレクトリのエラーが無くなったので、初回起動時のみ自動でプロビジョニングしてくれるようになった。素晴らしい
ブラウザでphpinfoを見てみる

ちゃんとphalconも追加されてる。
ここまで10分足らず。Vagrant素晴らしい
Phalcon デベロッパーツールインストール(追記)
実はPhalconにはデベロッパーツールがあって、スケルトン生成とかしてくれるらしい。
これはインストールしなければ、ということで関連パッケージ等々インストール
ここで気づいたんだけど、実はまだgit入れてなかったのでgitもインストール
git
sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git -y
composer.phar
curl -s http://getcomposer.org/installer | php
phalcon/devtoolsはcomposerで入れる。方法はこちら
で、編集したビルドスクリプトがこちら
#!/bin/bash
#MySQLパスワードを設定する
MYSQL_PASS="password"
CheckStatus()
{
if [ $? -eq 0 ]
then
echo "$1 : 成功"
else
echo "$1 : 失敗"
fi
}
#共有ディレクトリ設定
sudo /etc/init.d/vboxadd setup > /dev/null 2>&1
CheckStatus "共有ディレクトリ設定"
#aptリポジトリ更新
sudo apt-get update > /dev/null 2>&1
CheckStatus "aptリポジトリ更新"
#MySQLインストール
dpkg -l |grep mysql-server > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "mysql-server-5.5 mysql-server/root_password password ${MYSQL_PASS}" |sudo /usr/bin/debconf-set-selections
CheckStatus "MySQLパスワード設定"
echo "mysql-server-5.5 mysql-server/root_password_again password ${MYSQL_PASS}" | sudo /usr/bin/debconf-set-selections
CheckStatus "MySQLパスワード設定2回目"
sudo apt-get install mysql-server -y > /dev/null 2>&1
CheckStatus "MySQLインストール"
else
echo "MySQLは既にインストールされています"
fi
#Apacheインストール
dpkg -l | grep apache2 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install apache2 -y > /dev/null 2>&1
CheckStatus "Apacheインストール"
else
echo "Apache2は既にインストールされています"
fi
#Apache関連パッケージインストール
dpkg -l | grep apache2-utils > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install apache2-utils -y > /dev/null 2>&1
CheckStatus "Apache関連パッケージインストール"
else
echo "Apache2関連パッケージは既にインストールされています"
fi
#SQLite3インストール
#dpkg -l | grep sqlite3 > /dev/null 2>&1
which sqlite3 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install sqlite3 -y > /dev/null 2>&1
CheckStatus "SQLite3パッケージインストール"
else
echo "SQLite3パッケージは既にインストールされています"
fi
#PHPインストール
dpkg -l | grep php5 > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install php5 -y > /dev/null 2>&1
CheckStatus "PHPインストール"
else
echo "PHPは既にインストールされています"
fi
#PHP関連パッケージインストール
dpkg -l | grep php5-mysql > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-get install php5-mysql -y > /dev/null 2>&1
CheckStatus "php-mysqlパッケージインストール"
sudo apt-get install php5-sqlite -y > /dev/null 2>&1
CheckStatus "php5-sqliteパッケージインストール"
else
echo "PHP関連パッケージは既にインストールされています"
fi
#Phalconインストール
dpkg -l | grep php5-phalcon > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo apt-add-repository ppa:phalcon/stable > /dev/null 2>&1
CheckStatus "ppa:phalcon追加"
sudo apt-get update > /dev/null 2>&1
CheckStatus "aptリポジトリ更新"
sudo apt-get install php5-phalcon -y > /dev/null 2>&1
CheckStatus "Phalconパッケージインストール"
else
echo "Phalconパッケージは既にインストールされています"
fi
#Gitインストール
which git > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo add-apt-repository ppa:git-core/ppa > /dev/null 2>&1
CheckStatus "ppa:git-core追加"
sudo apt-get update > /dev/null 2>&1
CheckStatus "aptリポジトリ更新"
sudo apt-get install git -y > /dev/null 2>&1
CheckStatus "Gitパッケージインストール"
else
echo "Gitパッケージは既にインストールされています"
fi
#mod_rewrite有効化
sudo a2enmod rewrite > /dev/null 2>&1
CheckStatus "mod_rewrite有効化"
#ドキュメントルート設定
ls /var/www/html | grep index.php > /dev/null 2>&1
if [ $? -ne 0 ]
then
sudo rm -rf /var/www/html
sudo mkdir /vagrant/docroot
sudo chown vagrant.vagrant /vagrant/docroot
sudo ln -s /vagrant/docroot /var/www/html
echo '<?php phpinfo();?>' > /vagrant/docroot/index.php
ls /var/www/html | grep index.php > /dev/null 2>&1
CheckStatus "ドキュメントルート設定"
else
echo "ドキュメントルート設定は既にされています"
fi
#Apache2再起動
sudo service apache2 restart > /dev/null 2>&1
CheckStatus "Apache2再起動"
#composerインストール
which composer.phar > /dev/null 2>&1
if [ $? -ne 0 ]
then
mkdir -p /usr/local/phptools/composer
cd /usr/local/phptools/composer
sudo chown -R vagrant.vagrant /usr/local/phptools
CheckStatus "/usr/local/phptoolsオーナー変更"
CheckStatus "/usr/local/phptools/composerディレクトリ作成"
curl -s http://getcomposer.org/installer | php > /dev/null 2>&1
CheckStatus "composer.pharインストール"
sudo ln -s /usr/local/phptools/composer/composer.phar /usr/local/bin/composer.phar
CheckStatus "composer.pharシンボリックリンク設定"
else
echo "composer.pharは既にインストールされています"
fi
#Phalcon dev-toolインストール
which phalcon > /dev/null 2>&1
if [ $? -ne 0 ]
then
mkdir -p /usr/local/phptools
cd /usr/local/phptools
sudo chown -R vagrant.vagrant /usr/local/phptools
CheckStatus "/usr/local/phptoolsオーナー変更"
cat << EOT > composer.json
{
"require": {
"phalcon/devtools": "dev-master"
}
}
EOT
CheckStatus "composer.json作成"
composer.phar install > /dev/null 2>&1
CheckStatus "phalcon/devtoolsインストール"
ln -s /usr/local/phptools/vendor/phalcon/devtools/phalcon.php /usr/local/bin/phalcon > /dev/null 2>&1
CheckStatus "phalconシンボリックリンク設定"
chmod ugo+x /usr/local/bin/phalcon > /dev/null 2>&1
CheckStatus "phalconモード変更"
else
echo "phalcon/devtoolsは既にインストールされています"
fi
実行は既にしてしまったので再実行のログ
$ vagrant provision
==> default: Running provisioner: shell...
default: Running: /var/folders/yf/psgfw4xs3z5_dvfnyhtnx6c40000gn/T/vagrant-shell20150119-77177-xgz2zw.sh
==> default: stdin: is not a tty
==> default: 共有ディレクトリ設定 : 成功
==> default: aptリポジトリ更新 : 成功
==> default: MySQLは既にインストールされています
==> default: Apache2は既にインストールされています
==> default: Apache2関連パッケージは既にインストールされています
==> default: SQLite3パッケージは既にインストールされています
==> default: PHPは既にインストールされています
==> default: PHP関連パッケージは既にインストールされています
==> default: Phalconパッケージは既にインストールされています
==> default: Gitパッケージは既にインストールされています
==> default: mod_rewrite有効化 : 成功
==> default: ドキュメントルート設定は既にされています
==> default: Apache2再起動 : 成功
==> default: composer.pharは既にインストールされています
==> default: phalcon/devtoolsは既にインストールされています
$
ちょっと悩みどころなのがcomposer。
jsonでパッケージ指定しなきゃならないのだけど、今はヒアドキュメントでやってるから、もしもっと増えるようだとやり方考えなきゃならんなー。