Ansible+Vagrant(ansible_localプロビジョナ)でPHPのローカル開発環境を作る
注意
この記事ではVagrant1.8から導入されたansible_localプロビジョナを使用していますが、現在インストールされるansibleのバージョンが上がってしまいVagrant側がまだそれに対応していません。 issueにも上がっていますので近々対応されるかも・・?
なので現状うごきません・・!
進展があったら追記していきます。
追記(2016/06/18)
追記時点でVagrantのバージョン1.8.4が公開されており、このバージョンでは上記の不具合は解消されております。
使い方
git clone git@github.com:egapool/centos66-ansible.git cd centos66-ansible vi Vagrantfile // プライベートIPとsynced_folderを各自の環境に合わせて編集
vhosts.confに記載する内容のベースとなる情報(ドメインとパブリックディレクトリのパス)を予め与えると自動でvhostsに記述されます。 下の例のようにapache_vhosts_sslに記載するとSSL自己証明書の自動生成も行います。
(略) - role: apache apache_vhosts: - {servername: "local.example.com", documentroot: "/var/www/html/example/public"} apache_vhosts_ssl: - {servername: "local.sslexample.com", documentroot: "/var/www/html/sslexample/public"} (略)
準備が整ったら
vagrant up
基本的にはvagrant up
するだけですむようにしています。
デフォルトで以下の構成が構築されます。
Ansible
Ansibleとは構成管理ツールの一つです。類似のツールにchef,puppetなどがあります。構成管理ツールとはサーバーにインストールするミドルウェアや設定ファイルの内容などをテキスト(Ansibleではplaybookと呼びます)に書き起こし、それを元に状態を再現することを簡単にするためのツールです。これによって、大規模なサーバー管理が簡単になったり、サーバーに入り内容を確認しなくてもどんな状態かわかるなどのメリットがあります。
必要なもの
Ansibleを使用するにあたってローカルPC(ホスト側)にはVagrant以外なにも必要ありません。Ansibleすらインストールする必要がありません(後述します)。
事前知識
Ansibleの基本はこのチュートリアルをこなせば一通り学べると思います。1時間もかかりませんのでこれからAnsibleをやってみたいという方は是非チャレンジしてみてください。
Ansible チュートリアル | Ansible Tutorial in Japanese
こちらの書籍はAnsibleを使う上で必要十分な知識が載っています。値段もお買い得なのでおすすめです。
Amazon.co.jp: 入門Ansible eBook: 若山史郎: Kindleストア
また、playbookはYAMLで書きます。YAMLの文法はとても簡単なので一瞬で習得できます。こちらをオススメします。
Rubyist Magazine - プログラマーのための YAML 入門 (初級編)
ansible_localプロビジョナについて
Vagrant1.8からansible_localプロビジョナが追加されました。このプロビジョナを使うと、ゲストOSの方にansibleをインストールさせてから、ゲストOSがローカルに対してplaybookを実行します。今回はこれを使います。
roleついて
roleとはミドルウェアをインストールするひとまとまりの単位です。例えば「httpdのrole」や「phpのrole」など。一つのrole内でソフトウェアのインストールから設定ファイルの編集、再起動などを行わせます。roleはそれぞれ独立しています。
roleのディレクトリ配置(apacheの例)
└apache/ ├ defaults/ # roleで使う変数のデフォルト設定を置くディレクトリ │ └ main.yml ├ handlers/ # ハンドラータスクを置くディレクトリ │ └ main.yml ├ tasks/ # タスク用ディレクトリ。roleを実行するとこのmain.ymlが呼ばれる │ └ main.yml ├ templates/ # 設定ファイルなどのテンプレートを置くディレクトリ ├ meta/ │ └ main.yml # メタ情報を置くディレクトリ └ vars/ └ main.yml # 変数を置くディレクトリ
playbook全体のディレクトリ配置
playbook/ ├ hosts # インベントリファイル。今回はローカル開発環境ということでほぼ必要なし ├ site.yml # playbookの起点になる処理 └ roles/ # 各roleを配置する ├ commaon/ ├ repositries/ ├ git/ ├ apache/ ├ phpenv/ ├ mysql/ └ redis/
site.ymlについて
--- - hosts: localhost # hostsは何か指定しないといけない connection: local # localに対してplaybookを実行させる become: yes # コマンドをsudoユーザーで実行するかどうか roles: - role: common # 各ロールディレクトリのtasks/main.ymlを実行する - role: repositries ・ ・
apache
httpでもhttpsでもplaybook実行時にservernameとdocumentrootの組を配列で指定すると指定した分だけdocumentrootディレクトリの作成と対応するvhostの設定が記述されます。 また、httpsの場合はservernameごとに秘密鍵とサーバ証明書を生成します。
SSLの仕組みと各種必要なファイルの説明はこのポストが詳しいです。
オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている
apacheロールでは以下のモジュールをepel-httpd24レポジトリを使ってインストール。
- httpd24-httpd
- Apache HTTP server(2.4)
- httpd24-httpd-devel
- httpd24-mod_ssl
- opensslに対するインターフェース
- openssl
git
ソールからビルド。
git/defaults/mains.yml
でダウンロードするソースのバージョンを指定します。
phpenv
- CHHを使用
- php-fpmを使用
- PHPの各バージョンをビルドすると
/tmp/php-build/source/5.6.xx/sapi/fpm/init.d.php-fpm
に起動スクリプトが吐き出されるので/etc/init.d/
へコピーして、そのあとchkconfigに登録します
mysql
repositries
各種リポジトリをyumでインストールします。また、すべてのサードパーティ製リポジトリのenabledを0にします。
repositries roleはtask/main.yml以外使用しません。インストールするリポジトリを変数ファイルに切り出しても良いかなと思いましたがそんなにころころ変わるものでもないのでひとまずこれでいきます。
PHP BLT #3 発表まとめ! #phpblt
2016年3月1日、メルカリオフィスで開催されたPHPBLT#3に参加してきました!
オーディエンスより発表者の方が多いという血気盛んなこのイベント、LT枠以外にも「ブログ書く枠」が用意されていて自分はこの枠で参加してきました。
第3回の今回初参加でしたがめちゃくちゃ面白かったです!
もうすでに第4回の募集が始まってますのでまだ参加したことないPHPerの方々は是非!(一番↓にリンクあります)
写真撮り忘れていたので@uzullaさんのつぶやきを拝借・・
#phpblt だいぶ酔いが回ってきたぞ?? pic.twitter.com/xDCcpkryRC
— うずら (@uzulla) March 1, 2016
#phpblt すごいマイクだな pic.twitter.com/UazaTSkFaV
— うずら (@uzulla) March 1, 2016
#phpblt phpっぽくないはっぴょうだ pic.twitter.com/rqUDkQuk9I
— うずら (@uzulla) March 1, 2016
では発表を紹介していきます!
続きを読むyumのリポジトリの追加とか設定とか
サードパーティ製リポジトリを追加する(2016/02/01時点)
// epel sudo rpm -Uvh "http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm" //RPMForge sudo rpm -Uvh "http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm" // remi sudo rpm -Uvh "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm" //IUS sudo rpm -Uvh "https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-14.ius.centos6.noarch.rpm"
他のリポジトリはCentOSのWikiに記載されています。
AdditionalResources/Repositories - CentOS Wiki
インストールされているリポジトリ一覧を確認する
yum repolist
設定ファイルを確認する
// yumの設定ファイル /etc/yum.conf
各項目の内容はこちら
2.2 Yumの構成
// リポジトリごとの設定ファイル /etc/yum.repos.d/*.repo
/etc/yum.conf
にグローバルに設定して、/etc/yum.repos.d/*.repo
で個別に上書きします。
パッケージを探す/パッケージの情報を確認する
// httpdが名前または説明に含まれるパッケージを探す yum search httpd // mod_sslについてremiリポジトリを指定して探す yum search --disablerepo=* --enablerepo=remi mod_ssl // httpdのパッケージ情報を見る yum info httpd // httpd24uのパッケージ情報をIUSリポジトリを指定して見る yum info --disablerepo=* --enablerepo=ius httpd24u
雑記
基本はコマンド実行時に--enablerepo=xx
でリポジトリを指定して使っています。複数のリポジトリを使用して依存関係が混乱するより、リポジトリは少なくしてリポジトリにないものはソースからビルドするのが良いのかどうかとかその辺りはまだ良くわかっていません。
python始めるにあたって漁った記事など
自然言語処理楽しそうだなーとかPHP飽きたなーとかでpython始めました。
pythonの始めの一歩をスタートするために読んだ記事などをメモしておきます。
現在のpythonのバージョンは3系が最新らしいのでできるだけ2系は排除する。
PHPでいうところのPHP: The Right Wayのpython版があれば一番助かる感じです。見つかりませんでしたが。
ドキュメント
環境構築
Mac
Macでpyenv+virtualenv - Qiita
phpenv,rubyenv的な。~~envを使うことで各言語の任意のバージョンをプロジェクトディレクトリごとに変えることができて便利です。もしかしたら2系も使うかもしれませんのでこれで入れます。素晴らしすぎますね。。
Linux
PyenvをCentOS6.3でセットアップする(超かんたんリファレンス付き) - Qiita
パッケージ管理
pip
を使います。python3.4以降の場合は始めから付随してきます。
文法
Google Python スタイルガイド — PyGuide - 2.29
[python] 年末大感謝祭!初心者脱出のためのPythonTipsを50個紹介 | 私の小岩ホッチキス
Pythonらしいコードの書き方 - Kesin's diary
[python] 細かすぎて伝わりにくい、Pythonの本当の落とし穴10選 | 私の小岩ホッチキス
チュートリアル系
Pythonで学ぶWebアプリ開発のABC みんなのPython Webアプリ編 HTML版(無料) | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記
php プログラマのための Python チュートリアル — phpy 0.1 documentation
PHPからpythonへ移行するためのチュートリアルです。素晴らしい!僕にぴったりじゃないですか。
Pythonでつくる検索エンジン(Webクローラ, Mecab, MongoDB, Flask) - c-bata web
Webアプリケーションフレームワークとか
PythonのWebフレームワーク6種をかんたんに紹介 - モジログ
Pythonの軽量WebフレームワークBottleを試してみた(その1) - ルーティング編 (Advent Calendar 23日目) | アライドアーキテクツ エンジニアブログ
XdebugをLinux(CentOS6)に入れる。初期設定とかはまったとことか
ソースから入れる方法です。
// 最新のバージョンをダウンロード # wget http://www.xdebug.org/files/xdebug-2.3.3.tgz # tar xzvf xdebug-2.3.3.tgz # cd xdebug-2.3.3/ # phpize # ./configure --enable-xdebug # make # make install
phpizeで以下のようなエラーが発生する場合
Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "ja_JP.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "ja_JP.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
環境変数を指定あげるとうまくいきます。
# echo ”export LC_ALL=C” >> /root/.bashrc # source /root/.bashrc
make install
が成功すると以下のようなxdebug.soのパスが表示されます。
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
このパスを元にphp.iniを編集します。
phpinfoを使ってLoaded Configuration File
に指定されているphp.iniのパスを確認します。
もし指定されていなければその上のConfiguration File (php.ini) Path
のパスのディレクトリ以下にphp.iniファイルを作成します。
php.iniに以下を追記します。
;xdebug zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so xdebug.default_enable=1 xdebug.remote_enable=on xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.remote_autostart=1 xdebug.remote_host=localhost xdebug.var_display_max_children = -1 xdebug.var_display_max_data = -1 xdebug.var_display_max_depth = -1
サーバー再起動
# /etc/init.d/httpd restart
phpinfo内にxdebug
で検索して何か入っていたらだいたい成功です。
ブラウザ上でxdebugのオレンジ色のテーブルのエラーが表示されない場合、html_errors
がOffになっているかもしれません。
# vi php.ini html_errors = Off ↓ html_errors = On