サイト案内

運営してるひと: @sters9

妻と娘と猫と神奈川県に住んでいます。最近は Go, Ruby, Rails, Kubernetes, GCP, Datadog あたりをしていますがもっといろいろやりたい!

サイト案内

開発環境の紹介

プライバシーポリシー

tools.gomiba.co

サイト内検索

アーカイブ

2024/04 (7) 2024/03 (4) 2024/01 (3)

2023/12 (1) 2023/11 (3) 2023/10 (1) 2023/09 (1) 2023/08 (2) 2023/05 (4) 2023/04 (4) 2023/03 (4) 2023/02 (2) 2023/01 (1)

2022/12 (1) 2022/11 (4) 2022/10 (3) 2022/09 (2) 2022/08 (4) 2022/07 (5) 2022/06 (4) 2022/05 (9) 2022/04 (8) 2022/03 (10) 2022/02 (21) 2022/01 (8)

2021/12 (11) 2021/11 (1) 2021/10 (4) 2021/09 (2) 2021/08 (1) 2021/07 (2) 2021/06 (5) 2021/05 (10) 2021/04 (1) 2021/03 (8) 2021/02 (12) 2021/01 (8)

2020/05 (2) 2020/04 (2) 2020/02 (2) 2020/01 (1)

2019/12 (3) 2019/11 (2) 2019/10 (5) 2019/09 (3) 2019/07 (6) 2019/06 (4) 2019/04 (3) 2019/01 (2)

2018/12 (6) 2018/10 (4) 2018/09 (6) 2018/08 (7) 2018/07 (16) 2018/06 (7) 2018/05 (7) 2018/04 (5) 2018/03 (3) 2018/02 (10) 2018/01 (6)

2017/12 (8) 2017/11 (6) 2017/10 (10) 2017/09 (12) 2017/08 (12) 2017/07 (3) 2017/06 (1) 2017/01 (4)

2016/12 (5) 2016/10 (3) 2016/09 (1) 2016/07 (2) 2016/06 (1) 2016/04 (1) 2016/02 (1) 2016/01 (2)

2015/12 (1) 2015/10 (1) 2015/09 (3) 2015/06 (1) 2015/01 (1)

2014/08 (2) 2014/07 (3) 2014/05 (1) 2014/01 (7)

2013/12 (2) 2013/11 (4) 2013/10 (1) 2013/09 (1) 2013/08 (3) 2013/07 (4) 2013/06 (5) 2013/05 (2) 2013/04 (7) 2013/03 (1)

AnsibleGalaxy で php を入れる

この記事は公開されてから1年以上経過しており、最新の内容に追従できていない可能性があります。

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