Docker-machineの提供終了
KUSANAGI Runs on Docker (以下 RoD) では、docker-machineを使用することで、別マシンのDocker環境での環境構築が可能でした。
しかしdocker-machineは現在開発中止されており、別の方法でDocker環境を構築する必要が出てきました。
 
Gitを使用したWordPressの管理
CI/CDやGitOpsなどの手法では、Gitによって管理されたコードで環境を管理します。RoDも、git を使用した環境の管理が可能です。
Gitリポジトリへの登録
まずは、Git へ docker-compose などの設定ファイルを登録する必要があります。RoDでは、kusanagi-docker provision コマンド実行後にgit init を実行するため、Gitの初期化まで完了しています。最初にローカル環境で作成したRoDを開発(Dev)環境とします。
つぎに、GitHubやGitLabなど、CI/CDを実行できるGitリポジトリへgitに登録したコードをpushし、登録します。
機密情報の扱い
RoDでは、.kusanagi*等の環境変数を定義したファイルや、WordPressで使用する wp-config,php 等のファイルには、DB接続情報やAdminユーザ名/パスワードなどの機密情報を平文で記述しています。そのため、Gitリポジトリへの登録する際には、これら機密情報を除外する必要があります。git rm コマンドを実行し、機密情報ファイルを Git リポジトリから削除します。そして、.gitignore に、機密情報ファイル名を入力し、Git の管理対象外とします。
しかし、これら機密情報はどこかに保存する必要があります。GitHubやGitLabでは、環境ごとの環境変数を指定可能です。これを使用して、.kusanagi* 内の環境変数の値として登録します。また、wp-config.php の内容をファイルとして登録します。
また、wp-config.php を環境変数として扱うため、docker-compose.yml を以下のように変更する必要があります。
  php:
    container_name: wordpress_php
    image: primestrategy/kusanagi-php:8.3.1-r1
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.php
      - .kusanagi.mail
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
      - ./wp-config.php:/home/kusanagi/wordpress/wp-config.php:roこれは、環境変数で指定した wp-config.php をファイルとして配置するためです。
リリース環境の構築
リリース環境は、開発環境とは別に作成します。リリース環境でGitに登録したRoD環境を起動するには、以下の手順を実行します。
- Gitに登録したRoDリポジトリをgit cloneでクローン
- docker-compse up -dを実行
- kusanagi-docker restoreを実行
この作業で、RoD環境が別マシンで構築できます。この作業は、GitHubならば GitHub Actions、GitLabならばGitLab runner を使用して行い、指定した環境変数やファイルを展開した状態で実施します。
WordPressの運用
このような仕組みでは、まず開発環境でプラグインやテーマの設定し、git pushでGit リポジトリに登録します。そしてリリース時の処理をGitHub/GitLabなどのツールでgit pullした内容を元にリリースします。間違いが発生した際でも、Git で過去の内容に変更することで、即時にロールバック可能です。
この方針を推し進めると、投稿やページの追加などの操作を開発環境でだけ行い、リリース環境では変更処理を行わないルールにもできます。この場合、以下の修正しPHPでの書き込みを許可しない設定にすると、より安全です。
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi:ro
      - ./wp-config.php:/home/kusanagi/wordpress/wp-config.php:roまた、データベースとして外部DBを使用すると、可用性が上がります。DBの内容を、開発環境とリリース環境で分けることも可能です。
終わりに
今回は、廃止となった docker-machineの代わりに、Git を使用したリリース環境への展開方法を紹介しました。最近は、DevOpsやGitOpsなど、アプリケーションだけでなくアプリケーション環境構築も git ベースで行うことが多くなっています。また、作業を自動化することで、安全性を確保したり、運用コストが軽減できます。
今回の紹介のようなWordPressの運用方法もご検討ください。
 
					




