メインコンテンツまでスキップ

インフラ構築の自動化

Docker がもたらしてくれるもの

インフラ構築自動化の必要性

重要度とコストの章で、「必要な時だけサーバーを立ち上げる」ことや、「ローカルサーバーの構築が完璧に成されている」ことに、言及しましたが、これらを実現するにあたって、インフラの構築を自動化出来ることは、大変有用です。

そのために使っていきたいのが、Dockerというプラットフォームです。

Dockerってなに?

1台のPC上に複数の仮想実行環境(コンテナ)を作成・実行できるプラットフォームです。

仮想サーバーの新設はもちろん、移転なども、複雑な手順を省いて行うことが出来るよう、整備されています。

プロダクションサーバーの構築内容をDockerコンテナで再現することはもちろんですが。

最近のクラウドサーバーでは、むしろ逆で、Dockerコンテナをそのまま本番環境の構築に使用します。

より進化したMAMP(XAMPP)と捉えると分かりやすいかも

ちょっと一部から怒られるかもしれませんが(笑)

より自由に、より細かく、よりポータブルになったMAMPであると理解すると分かりやすいかもしれません。

Dockerは、「共有」を前提に作られている

たとえば、Dockerコンテナの設定は、プロジェクトフォルダにymlファイルで定義することになっています。

このファイルが、サーバーの必要要件一式を表現しています。

このファイルが置かれているフォルダで、docker-compose up とコマンドを打つだけで、ymlで書かれた内容で仮想環境が構築されます。

定石では、ymlファイルは、Gitに乗って、全ての関係者へ配布します。

docker-compose.yml

  version: '3'

services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./import-tmp:/import-tmp
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: somewordpress
MYSQL_PASSWORD: somewordpress

wordpress:
depends_on:
- db
image: wordpress:php7.4
ports:
- "8000:80"
restart: always
volumes:
- ./dist/:/var/www/html
- ./dist/themes/:/var/www/html/wp/wp-content/themes
working_dir: /var/www/html/wp
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: true
WORDPRESS_CONFIG_EXTRA: |
define('DB_CHARSET', 'utf8mb4');
define('WPLANG', 'ja');
define('WP_HOME', 'http://localhost:8000');
define('WP_SITEURL', 'http://localhost:8000/wp/');
define('WP_DEFAULT_THEME', 'theme');
define('WP_ENV', 'dist');
define('FORCE_SSL_ADMIN', false);
define('WP_DIR', '/wp/');
define('WP_CONTENT_URL', WP_HOME);
define('WP_CONTENT_DIR', '/var/www/html');
define('WP_POST_REVISIONS' ,false);
define('IMAGE_EDIT_OVERWRITE', true);
define('WP_DEBUG_DISPLAY', false );
define('WP_DEBUG_LOG', true );
define('ABSPATH', '/var/www/html/wp/' );
define('AUTOMATIC_UPDATER_DISABLED', false);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
define('EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true);
cli:
image: wordpress:cli-2.4-php7.4
container_name: cli
volumes:
- ./dist/:/var/www/html
- ./import-tmp/:/import-tmp
- ./dist/themes/:/var/www/html/wp/wp-content/themes
depends_on:
- db
- wordpress
command: "--info"
user: xfs
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: true
WORDPRESS_CONFIG_EXTRA: |
define('DB_CHARSET', 'utf8mb4');
define('WPLANG', 'ja');
define('WP_HOME', 'http://localhost:8000');
define('WP_SITEURL', 'http://localhost:8000/wp/');
define('WP_DEFAULT_THEME', 'theme');
define('WP_ENV', 'dist');
define('FORCE_SSL_ADMIN', false);
define('WP_DIR', '/wp/');
define('WP_CONTENT_URL', WP_HOME);
define('WP_CONTENT_DIR', '/var/www/html');
define('WP_POST_REVISIONS' ,false);
define('IMAGE_EDIT_OVERWRITE', true);
define('WP_DEBUG_DISPLAY', false );
define('WP_DEBUG_LOG', true );
define('ABSPATH', '/var/www/html/wp/' );
define('AUTOMATIC_UPDATER_DISABLED', false);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
define('EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true);

volumes:
db_data:

networks:
A_default:

また、GitHub Actionsがそうであったように、Dockerもまた先人たちが作ってくれた「オススメの環境」や公式が推奨する環境などを集めたマーケットプレイスが存在し、有効活用することができます。

Docker Hub で WordPressのための環境を検索

VSCode でもサポートされている Docker

VSCode上から、コンテナを起動したり、停止させたりすることが可能です。

ワークフローの作成

WP(WordPress)-CLI

かなり上級者向けのテクニックになりますが、WordPressの構造(カスタム投稿・カスタムフィールドの増減や、プラグインのインストール、ユーザー登録など)をプログラムで行い(マイグレーション)、保守していく方法もあります。