目次
今どきはコンテナ化しちゃうのがアプリケーションとしては何かと楽(それはそれで別の大変さがある)なのだけれど、ぼくの個人的な管理下のとあるサーバはまだまだコンテナの波に乗れていないので、なんかこう便利なやつを使いたかった。というわけで AnsibleGalaxy に行き着いたのだった。
ansible? AnsibleGalaxy?
Infrastructure as Code...コードじゃないんだよな Infrastructure as YAML といわれるようなソリューション。 インフラ…に限らず、やりたいことを YAML で書いて、そのとおりにポンッと反映することができるすごいもの。
AnsibleGalaxy は、そのやりたいこと、を共通化して、コミュニティベースで使いまわしを出来るようにしたもの。 PHP での composer とか Docker の docker hub とかそういうイメージ。
AnsibleGalaxy で PHP を扱う
何も考えたくない...
geerlingguy.php_roles を使う。 Readme に書いてあるけど、シュッと好きなバージョンの PHP 環境が構築される。
tideway, xhprof, xdebug あたりが入っているのがつおい。べんりなじだいだなあ
ぼくのケース
とはいえまあ、そんな、色々全部入りじゃなくても…。と思ったのでこういう感じにした。
1. requirements.yml を準備
簡単にいうと使う role を定義しておくファイル ansible-galaxy コマンドで利用することで、記述されているものを手元に持ってくることができる。 (python のある requirements.txt から来てるのかな、このネーミング。)
書き方はこのあたりに書いてある。 Galaxy User Guide — Ansible Documentation > Installing multiple roles from a file
最低限 geerlingguy.php
があれば PHP をインストールできるが、バージョンアップとかリポジトリ都合も考えるとこんな感じにした。
# php roles
- name: geerlingguy.repo-remi
- name: geerlingguy.php
- name: geerlingguy.php-versions
# other roles
- name: ...
ansible なコマンドを覚えるのがなかなかつらいので、いったん、こんな Makefile のタスクも用意しておいた。
.PHONY: install-requirements
install-requirements:
ansible-galaxy install -r requirements.yml -p roles
このタスクによって requirements.yml に書いた内容を roles ディレクトリにダウンロードすることができる。
2. playbook を書く
ダウンロードしてきた role を指定すれば OK
- hosts: my-server
vars:
php_version: "7.4"
php_packages:
- php
- php-cli
- php-common
- php-bcmath
- php-json
- php-mbstring
- php-pdo
- php-pecl-memcache
roles:
- geerlingguy.repo-remi
- geerlingguy.php-versions
- geerlingguy.php
- 他のroleいろいろ
どんな vars があるかは geerlingguy.php を見るのがはやい 。
php.ini で指定できるよく使うものは選択できる。それ以外で自由にやりたくなったら template にすれば OK
3. 実行したよ
$ ansible-playbook -i hosts my-server.yml
...
で、しばらくしたら終わるので、確認。
$ ansible my-server -a "php -v"
my-server | CHANGED | rc=0 >>
PHP 7.4.6 (cli) (built: May 14 2020 10:39:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
はい、指定したバージョンの PHP が使えるようになりました。おわり