Homebrew で Apache, MySQL, Phpbrew, rbenv, nodebrew, pyenv をお手柔らかにお願いします

即効性の回答を提供するのでは無く、何故それを使用するに至ったのか、それを使ってどうだったか、という方面に重きを置いています。(キリッ!
なので、藁をもすがる思いで辿り着いた方には非常に申し訳無く思います。
いや…その…自分がやりたいのは「環境構築」ではなく、「そこから先」なんですがねぇ…ヤレヤレですわ…いやーフロントエンドマターなのか、アーキテクトマターなのか何ともですが、いずれにせよ、この辺を事も無げにできる方々ってスゴイ、と。

ついでに VirtualBox, Vagrant で PHP 5.3, MySQL 5.0 もお手柔らかにお願いします

…誤字ではなく2016年の話。
色々あって…なお、これは2016年9月下旬に構築。

そもそも

return to toc

差し迫って、この環境で構築された業務系システム( Apache/MySQL/PHP )の面倒を見なければならない…かも?という状況になる…かも?という曖昧な状況になってきた。
最悪、現在の MBA の PHP 5.6 、 MySQL 5.7 ( Homebrew でバージョンアップした)でやるしかないかなぁ、だったが、動かなくなる事はおそらく無いだろうけど、ワーニングが大量に出る・開発環境で書いたコードが本番系で動かない、動いたフリをして実は妙なデータを突っ込んでいた、だと嫌なので(特に後者)、余裕のある今のうちに環境構築をしようかと。

当初、 Phpbrew で PHP 5.3 を導入して MySQL は現状で我慢する予定だった。
特に MySQL はそこまでトリッキーな処理、例えばトリガを使ってるとか、その様な処理は一切無く、 MyISAM でそれ程インデックスも張ってない作りだったので。

なので Phpbrew で PHP 5.3 を導入しようとしたのだが…ちょっと自力では無理かと…
原因は…覚えていない…コンパイルが通らなかった記憶が…少なくとも phpbrew known では対象外でもあるので仕方無いかと…

となると、 VirtualBoxVagrant かなぁ、 DockerChef 、その他モロモロまでは良く分かりません、手が回りません勘弁して下さい、と。
なお、以前 VCCW で軽く触った経験があるので、初見では無い。
ただ…120GBしか無い環境を利用している者としての印象は、容量を結構食う…現在でも Gulp で使わなくなった node_modules ディレクトリは消すようにしている程なので、正直、数Gバイトずつ容量を食う環境には抵抗があるのは事実だが、どこかで妥協しないといけないなぁと、MBA購入時から、こんな日が来るかもと覚悟はしていたが。

2016年9月下旬現在の注意点

return to toc

VirtualBox は最新版で問題無し、ただし、 Vagrant の最新版は自力対応できる人はともかく、そうでない人は入れない方が良いと思う。

今の自分の環境。

$ VBoxManage -v
5.1.6r110634
$ vagrant -v
Vagrant 1.8.4

当初良く分からず、 VirtualBox までアンインストールしようとしたのだが…コレがまた…
コマンドラインから find した結果の rm という方法もある模様だが、自分は dmg ファイルの VirtualBox_Uninstall.tool をクリック…できないんだな…
なので、「MacでVirtualbox、Vagrantをインストールするときにいつまで経っても検証が終わらない場合の対処法としてコマンドラインからインストールする – SIS Lab」を参考にコマンドラインから sudo で、ただし、「VirtualBox を Homebrew でインストールし直す – Qiita」にある「右クリック・開く」が使えたのかもしれないが未確認。

なるほど hdiutil(1) コマンドですか…と言うか、近頃のOSXはチョットねぇ…お陰様で現在 FTP ・ Diff 難民… FTP はともかく、 Diff はかつて使えたアプリがインストールや実行で弾かれる…数千円も払えない貧乏人と言われるとそれまでだが…
もうね、このままのイケイケでセキュリティ強めて(それ自体は是が非でも必要な機能だとは思う、思うが)だと、OSX辞めて Linux/BSD に移行する時が来るのではと…つまり MBA(が、いつまで今のままで続くのか不明だが)買ってまず最初にするのは、 Linux への入れ替えという、かつて Windows ノートを買ってまず最初にするのが付属ソフトのアンインストール…だとゴミが残る可能性があるので、クリーンフォーマットから、みたいな。
そして OSX は Boot Camp を使わず VirtualBox で動かす…という未来もあり得る気がしてきた…便利なのだが Homebrew で導入される(依存関係にある)パッケージが何か関わっている気もするし…と、今はパッケージの二重管理っぽい気がして。

Vagrant の BOX

return to toc

必要とする PHP/MySQL のバージョンがバージョンなので、古い Linux ディストリビューションを。
ただ、ざっと見で、そのバージョンのインストール時に導入される(実際はOSインストール後に導入するので、変な言い方だが)これらのバージョンまでは不明だったので、ともかく各種ディストリビューションの古いバージョンを Vagrantbox.es から手当たり次第に、だった。
そこから LAMP 環境の構築になるのだが…この辺は逆に古い情報が役に立ったが、当然ながら今は当時のパッケージリストが存在しないだとか色々と…

正直このあたりのgdgd・茶番、一体自分は何をしているのかと…自分がやりたいのはその先なのに…と半分キレ気味…

…という状況の中で、 puppetlabs の「Puppetlabs CentOS 5.9 x86_64, VBox 4.2.10」。

心情的には CentOS よりは Debian なんですがと思いながらも、インストールや実行で本番環境は多分コレじゃないのかとアタリを引いた気が。
このBOXは何も考えないと PHP 5.1, MySQL 5.0 を導入する事になり、次いで PHP 5.3 に入れ替えれば良いのではないかと。
と言うか、何か変なバージョンの組み合わせだなぁと思っていたのだが、これをベースにサービスを提供しているのではないかと。

vagrant box add 以降

return to toc

おそらく間違い無く下記だけでは足りない筈だが、導通試験的なイメージで最小限動く事確認した、という段階。
また、下記は一連の整然とした?流れとして記述しているが、構築時は紆余曲折で、何度も vagrant box add をやり直したり、都度、稼働確認を挟んだり、 vagrant reload (自分は阿呆みたいに vagrant haltvagrant up で対応したが)を行った結果、下記が一番早いなぁと。
手数が固まったら当然、プロビジョニングという手段もあると思うが、そこまで対応はしない予定。

なお、今後実際に例の業務プログラムを動かして「足りない」ならば設定を付与・付加するし、最悪…別の BOX に移る必要があるかもしれないが現状不明。

タイムゾーン・ロケール

return to toc

…の前に、 ls のエイリアスの確認…この辺は .bashrc のコメントアウトを外すなどの Debian とはポリシーが違うなぁと。

Apache/MySQL/PHP のインストール

return to toc

自動起動はせず、都度手動起動の方針。
phpMyAdmin は…後日考える…

MySQL は文字コードを修正、ただしこれは一連のインストール作業後の PHP/MySQL 連携稼働確認作業で気付いた。
にしてもこの頃の /etc/my.cnf はシンプルだなぁと…

なお、 Apache ・ MySQL の起動・停止は下記の様に、明示的にフルパスを指定する必要があった。

$ sudo /sbin/service httpd start
$ sudo /sbin/service httpd stop

$ sudo /sbin/service mysqld start
$ sudo /sbin/service mysqld stop

PHP 5.1 から PHP 5.3 へ

return to toc

該当するパッケージを全て削除、そのパッケージ名に 53 を付加してインストール、というイメージ。
更に /etc/php.ini のタイムゾーン( date.timezone )の設定。

VirtualBox/Vagrant と連動させるための Apache の各種設定

return to toc

Vagrant の共有ディレクトリに関するモロモロの設定で、 httpd.conf の修正と SELinux をユルくるす必要がある。

および、ホスト側の Vagrantfile の最小限の修正。
これで http://localhost/8888 でアクセス可能…になる筈。
ポートを変えているのは、 OSX の Apache が 8080 を使っているので。
また、 config.vm.network "private_network" の設定は…正直良くわかってない…

config.vm.network "forwarded_port", guest: 80, host: 8888

順番的には逆かも、だが、 iptables を停止。

Vagrant の共有ディレクトリ設定

return to toc

改めて…歳のせいなのか、思い込みや勘違いが激しくて…

  • ゲスト側へ vagrant ssh すると、ログイン時のホームディレクトリ /home/vagrant とは別に、 /vagrant が存在…ルートディレクトリ直下なのでビビった…
  • ホスト側の Vagrantfile を修正していないと、 ssh ログインでホスト側の vagrant up したディレクトリと、ゲスト側の /vagrant が共有される
  • つまり何が言いたいのかと言うと、ゲストOSの /home/vagrant が共有されるのではない、と

当初、 vagrant up したディレクトリとは別のディレクトリをアサインしようと思った。

…のだが失敗。
多分、上記最初の「vagrant ssh接続できなくなったり」と、多分、ディレクトリの制定…ホスト・ゲストを逆にしてsshの情報を消してしまった?とか。

なので素直に下記の素直な方法で。

MySQL と PHP の文字コード

return to toc

まぁ今更関係無いけど一応…
セキュリティの関係で mysql_query ではなく、mysql_set_charset で明示的に文字コードを指定する、および、そもそもの関数名の mysql_ が、 mysqli_ に変更されている、のが現状自分が把握しているトコロか。
あーこのMySQL 改良版拡張モジュールって 5.5 からの変更なのね…多分間違い無く今の PHP 5.6 on Phpbrew だと引っかかってたなぁ…

<?php
  $link = mysql_connect('localhost', 'hoge_user', 'hogehoge');
  if (!$link) die('接続失敗です。'.mysql_error());

  $db_selected = mysql_select_db('hoge_db', $link);
  if (!$db_selected) die('データベース選択失敗です。'.mysql_error());
  // mysql_query('SET NAMES utf8', $link);
  mysql_set_charset('utf8');
    :

Vagrant の MySQL に Sequel Pro から接続

return to toc

phpMyAdmin のインストールが面倒に思えたので、と言うか自分一度も phpMyAdmin のインストールを行った事が無い…
なので Sequel Pro から接続できないかとWeb検索したら、そこそこヒットしたので、同じ様に考えている人が多いのだなぁと。
ただ、至極個人的な問題になるが、何だかんだと phpMyAdmin にカラダが馴染み過ぎて Sequel Pro のユーザインタフェースに未だ馴染んでいない点か。

それと、 Sequel Pro の仕組み上、「やったー繋がったー」で次回繋ごうとすると、設定を保存し忘れている事が多々あり。
および、初回接続時のみ、SSHがどうのこうのと確認ダイアログが出るかもしれない。

とりあえず

return to toc

あくまでも導通イメージなので…
例えば Apache/MySQL/PHP のログ出力ディレクトリの変更、もしかして PHP で足りないモノがあるかもしれないし、などなど…

Menu of this post

  1. 1. はじめに…
  2. 2. Homebrew で Apache, MySQL, Phpbrew, rbenv, nodebrew, pyenv をお手柔らかにお願いします
  3. 3. ついでに VirtualBox, Vagrant で PHP 5.3, MySQL 5.0 もお手柔らかにお願いします
  4. 4. お手柔らかにお願いしてのモロモロ
  5. 5. 補足)個人用チートシート(もどき)