KUSANAGI Runs on Docker でDev/Rel環境を分離する

宮﨑悟

Docker-machineの提供終了

KUSANAGI Runs on Docker (以下 RoD) では、docker-machineを使用することで、別マシンのDocker環境での環境構築が可能でした。

しかしdocker-machineは現在開発中止されており、別の方法でDocker環境を構築する必要が出てきました。

AIで自動生成したイメージ画像

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環境を起動するには、以下の手順を実行します。

  1. Gitに登録したRoDリポジトリをgit cloneでクローン
  2. docker-compse up -d を実行
  3. 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の運用方法もご検討ください。

<< KUSANAGI Run on Docker 2022年の変更まとめ

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解