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の運用方法もご検討ください。