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でパッケージ指定しなきゃならないのだけど、今はヒアドキュメントでやってるから、もしもっと増えるようだとやり方考えなきゃならんなー。