ansible-galaxy で php を入れる

今どきはコンテナ化しちゃうのがアプリケーションとしては何かと楽(それはそれで別の大変さがある)なのだけれど、ぼくの個人的な管理下のとあるサーバはまだまだコンテナの波に乗れていないので、なんかこう便利なやつを使いたかった。というわけで ansible-galaxy に行き着いたのだった。

ansible? ansible-galaxy?

Infrastructure as Code...コードじゃないんだよな Infrastructure as YAML といわれるようなソリューション。
インフラ…に限らず、やりたいことを YAML で書いて、そのとおりにポンッと反映することができるすごいもの。

ansible-galaxy は、そのやりたいこと、を共通化して、コミュニティベースで使いまわしを出来るようにしたもの。
PHP での composer とか Docker の docker hub とかそういうイメージ。

ansible-galaxy で 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 が使えるようになりました。おわり