Docker Composeを活用したLNMP環境構築とWordPressのデプロイ

概要

Docker Composeを使用してLNMP(Linux, Nginx, MySQL, PHP)スタックをオーケストレーションし、WordPressをデプロイする手法を解説します。各コンポーネントを個別のコンテナとして構築し、連携させる方法を紹介します。

前提条件

  • Dockerがインストールされていること
  • Docker Composeが利用可能であること

プロジェクト構造

以下のディレクトリとファイルを作成します。

project-root/
├── docker-compose.yaml
├── nginx-config/
│   ├── Dockerfile
│   └── site.conf
├── php-runtime/
│   └── Dockerfile
└── wordpress-app/
    ├── Dockerfile
    └── config.php

Nginxコンテナの設定

nginx-config/Dockerfile

FROM nginx:alpine
COPY site.conf /etc/nginx/conf.d/default.conf

nginx-config/site.conf

server {
    listen 80;
    server_name localhost;

    root /app/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php-app:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

PHP-FPMコンテナの設定

php-runtime/Dockerfile

FROM php:7.4-fpm
RUN docker-php-ext-install mysqli pdo_mysql

WordPressアプリケーションコンテナの設定

wordpress-app/Dockerfile

FROM wordpress:latest
COPY config.php /usr/src/wordpress/wp-config.php

wordpress-app/config.php

<?php
define('DB_NAME', 'wp_database');
define('DB_USER', 'db_user');
define('DB_PASSWORD', 'secure_password');
define('DB_HOST', 'database');
define('DB_CHARSET', 'utf8mb4');

define('AUTH_KEY',         'generate_unique_string');
define('SECURE_AUTH_KEY',  'generate_unique_string');
define('LOGGED_IN_KEY',    'generate_unique_string');
define('NONCE_KEY',        'generate_unique_string');
define('AUTH_SALT',        'generate_unique_string');
define('SECURE_AUTH_SALT', 'generate_unique_string');
define('LOGGED_IN_SALT',   'generate_unique_string');
define('NONCE_SALT',       'generate_unique_string');

$table_prefix = 'wp_';

if (!defined('ABSPATH')) {
    define('ABSPATH', __DIR__ . '/');
}

require_once(ABSPATH . 'wp-settings.php');

Docker Compose設定ファイル

docker-compose.yaml

version: '3.8'

services:
  web-server:
    build:
      context: ./nginx-config
    ports:
      - "8080:80"
    volumes:
      - ./wordpress-app:/app
    depends_on:
      - app-server
      - database

  app-server:
    build:
      context: ./php-runtime
    volumes:
      - ./wordpress-app:/app

  database:
    image: mysql:8.0
    volumes:
      - db-storage:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wp_database
      MYSQL_USER: db_user
      MYSQL_PASSWORD: secure_password

  cms:
    build:
      context: ./wordpress-app
    volumes:
      - ./wordpress-app:/app
    depends_on:
      - database

volumes:
  db-storage:

環境の起動

プロジェクトのルートディレクトリで以下のコマンドを実行します。

docker-compose up --build -d

すべてのサービスが起動した後、ブラウザで http://localhost:8080 にアクセスし、WordPressの初期設定を進めることができます。

タグ: Docker Docker Compose nginx MySQL PHP

5月19日 09:05 投稿