WordPress デプロイメント: Docker, Nginx, Apache, および SSL

WordPressウェブサイトのデプロイを簡素化するために、私たちのシンプルで分かりやすいガイドを利用してください。Docker Compose、Nginx、Apache、SSLを使用して、スムーズなインストールプロセスを実現します。

また、コンテナが再起動しても変更やアップデートが保持されるように、ボリュームを作成します。

この設定は、Ubuntu 22.04 OSを実行しているGoogle Cloudのインスタンスでテストされています。AWSやAzure、DigitalOceanなどのクラウドサービスや、専用サーバーやVPSサーバーでもこの設定を行うことができます。

前提条件

  1. Ubuntu 22.04にDockerをインストールする
  2. Ubuntu 22.04にDocker Composeをインストールする.

上記のステップをすべて完了していることを確認してください。

  • ドメインをサーバーのIPアドレスに向ける。
  • Dockerをインストールして設定する。
  • Docker Composeをインストールして設定する。

前提条件がすべて完了したら、設定を作成してWordPressを構成できます。

プロジェクトディレクトリの作成

サーバーにSSH接続して、wp-projectという名前の新しいプロジェクトディレクトリを作成することから始めます。必要に応じて任意の名前を付けてください。

 
mkdir wp-project

Docker Compose YMLファイルの作成

次に、プロジェクトディレクトリ内に移動し、以下の設定で新しいdocker-compose.ymlファイルを作成します。

 
cd wp-project

新しいdocker-compose.ymlファイルを作成します。

 
nano docker-compose.yml

ファイルに以下のすべての内容をコピーして貼り付けてください。

Docker Composeの設定

以下に示されている環境変数を置き換えることを確認してください。

 

docker-compose.ymlversion: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.2-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:

ファイルを保存して終了するには、CTRL-Xを押し、次にYENTERを押してください。

Docker Compose設定: 説明

以下は設定の詳細です。

  • バージョン: Dockerエンジンと互換性のあるComposeファイルのバージョンを作成してください。互換性を確認するにはこちらを参照してください。
  • サービス: ここでは、WordPressMariaDBnginx、およびcertbotという4つのサービスがあります。
  • イメージ: Dockerハブで利用可能な最新のWordPress、PHP 8.2、Apache、Mariadb、Nginx、およびCertbotイメージを使用します。
  • ボリューム:
    • wordpress_data: このディレクトリをコンテナ内でウェブルートとして使用したいディレクトリと同期するように設定しました。
    • conf: ここにNginxの設定ファイルを置き、コンテナ内のデフォルトのNginx conf.dフォルダと同期します。
    • cedtbot/conf: ここでSSL証明書を受け取り、コンテナ内で希望するフォルダと同期します。
    • ports: コンテナをリストされたポートでリッスンするように設定します。
    • command: SSL証明書を受け取るために使用するコマンド。
  • 環境: ここでは、WordPressイメージで利用可能なすべての環境変数をリストアップします。
    • WORDPRESS_DB_HOST: ここでは、MariaDBコンテナのサービス名を使用します。
    • WORDPRESS_DB_USER: mariadbサービスで設定したものと同じです。
    • WORDPRESS_DB_PASSWORD: mariadbサービスで設定したものと同じです。
    • WORDPRESS_DB_NAME: mariadbサービスで設定したものと同じです。

Nginxの設定

docker-compose.ymlの設定に従って、nginx/confディレクトリ内にdefault.confファイルを作成する必要があります。

docker-compose.ymlファイルと同じ階層に設定ファイルを置くためのディレクトリを作成します。

 
mkdir -p nginx/conf

default.confという名前のファイルを作成します。

 
nano nginx/conf/default.conf

以下の設定を追加します。ここでは、Apacheを実行しているWordPressコンテナへのリバースプロキシ設定を使用します。

 

nginx/conf/default.conf server {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain.com;

    root /var/www/html;
    index index.php;

    location ~ /.well-known/acme-challenge {
        allow all; 
        root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }
} 

CTRL-Xを押し、続いてYENTERを押してファイルを保存して終了します。

これで、あなたのdocker-compose構成とNginx構成が揃いました。

Docker ComposeでWordPressをデプロイ

以下のコマンドを使用してコンテナを起動してください。コンテナが起動すると、SSL証明書が受け取れます。

 
docker-compose up -d

すべてのコンテナが起動すると、docker-compose.ymlファイルと並んでcertbotおよびWordPressという2つの追加ディレクトリが作成されます。

wordpressディレクトリには、WordPressウェブサイトのすべてのソースコードが格納されています。

certbotディレクトリには、SSL証明書に関連するすべてのファイルが格納されています。

コンテナを表示するには、以下のコマンドを実行できます。

 
docker-compose ps

NginxでLet’s Encrypt SSLを構成

Let’s Encrypt SSL証明書を受け取ったので、HTTPSを構成し、HTTPSへのリダイレクトを設定できます。

default.confを編集し、以下の変更を行ってください。

 
nano nginx/conf/default.conf

 

nginx/conf/default.confserver {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain;

    return 301 https://www.domain.com$request_uri;
}

 server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

    return 301 https://www.domain.com$request_uri; 
}

server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name www.domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

    root /var/www/html;
    index index.php;

    location ~ /.well-known/acme-challenge {
         allow all; 
         root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }
} 

ファイルを保存して終了するには、CTRL-Xを押し、続けてYENTERを押してください。

次に、新しい構成を読み込むためにNginxサービスを再起動できます。

 
docker-compose restart nginx

あなたのドメイン名をブラウザから確認できます。HTTPSへのリダイレクトが行われ、インストールを完了するためのWordPressインストールページが表示されます。

トラブルシューティング

以下は、コンテナへのSSHでエラーログを確認するためのヒントです。

DockerコンテナへのSSH

wordpressコンテナにSSHするには、以下のコマンドを使用できます。

 
docker-compose exec wordpress /bin/bash

SSH接続をnginxコンテナに接続するには、以下のコマンドを使用できます。

 
docker-compose exec nginx /bin/bash

コンテナのログを確認

以下のコマンドを使用してdocker-composeを使用してコンテナのログを確認できます。

 
docker-compose logs -f

コンテナの再起動

以下のrestartコマンドを使用してコンテナを簡単に再起動できます。

 
docker-compose restart container_name

container_nameをお使いのコンテナ名(wordpress、nginx、certbot)に置き換えてください。

すべてのDockerコンテナを停止

以下のコマンドを使用してすべてのDockerコンテナを停止できます。

docker-compose down

すべてのコンテナとボリュームを削除

以下のコマンドを使用してdocker-composeを使用してすべてのコンテナとそのボリュームを削除できます。

 
docker compose rm -fv

すべてのDockerコンテナを削除

以下のコマンドを使用してすべてのコンテナを削除します。

 
docker rm -f $(docker ps -a -q)

すべてのボリュームを削除

以下のコマンドを使用してすべてのボリュームを削除することもできます。

 
docker volume rm $(docker volume ls -q)

すべてのコンテナを起動

単一のDocker composeコマンドですべてのコンテナを起動できます。

 
docker-compose up -d

結論

これで、Ubuntu 22.04でDockerとDocker Composeを使用してWordPressをNginx、Apache、PHP 8.2、MariaDB、Let’s Encryptでインストールおよび設定する方法を学びました。

お時間をいただきありがとうございます。

Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl