Docker ComposeでWordPressをインストールする方法

前書き

WordPressは無料でオープンソースのhttps://www.digitalocean.com/community/tutorials/digitalocean-community-glossary#content-management-system [コンテンツ管理システム(CMS) ] MySQLデータベース上にhttps://www.php.net/[PHP]処理で構築されています。 拡張可能なプラグインアーキテクチャとテンプレートシステム、およびその管理のほとんどがWebインターフェイスを介して実行できるという事実のおかげで、WordPressは、ブログから製品ページ、eコマースサイトまで、さまざまなタイプのWebサイトを作成する際の一般的な選択肢です。

通常、WordPressの実行には、https://www.digitalocean.com/community/tutorials/digitalocean-community-glossary#lamp [LAMP](Linux、Apache、MySQL、およびPHP)またはhttps://www.digitalocean.comのインストールが含まれます。 / community / tutorials / digitalocean-community-glossary#lemp [LEMP](Linux、Nginx、MySQL、およびPHP)スタック。時間がかかる場合があります。 ただし、https://www.docker.com/ [Docker]やhttps://docs.docker.com/compose/[Docker Compose]などのツールを使用すると、優先スタックのセットアップとインストールのプロセスを簡素化できます。 WordPress。 個々のコンポーネントを手動でインストールする代わりに、_images_を使用して、ライブラリ、構成ファイル、環境変数などを標準化し、これらのイメージを共有オペレーティングシステムで実行される分離プロセス_containers_で実行できます。 さらに、Composeを使用することにより、アプリケーションとデータベースなどの複数のコンテナを調整して相互に通信できます。

このチュートリアルでは、複数コンテナのWordPressインストールを構築します。 コンテナには、MySQLデータベース、Nginx Webサーバー、およびWordPress自体が含まれます。 また、サイトに関連付けるドメインのhttps://letsencrypt.org/[Let’s Encrypt]でTLS / SSL証明書を取得することにより、インストールを保護します。 最後に、https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps [+ cron +]を設定しますドメインを安全に保つために証明書を更新する仕事。

前提条件

このチュートリアルを実行するには、次のものが必要です。

ステップ1-Webサーバー構成の定義

コンテナを実行する前に、最初のステップはNginx Webサーバーの構成を定義することです。 構成ファイルには、WordPress固有の場所ブロックと、証明書の自動更新のために認証リクエストをCertbotクライアントに送信する場所ブロックを含める場所ブロックが含まれます。

最初に、WordPressセットアップ用に「++」というプロジェクトディレクトリを作成し、そこに移動します。

mkdir  && cd

次に、構成ファイル用のディレクトリを作成します。

mkdir nginx-conf

`+ nano +`またはお気に入りのエディターでファイルを開きます:

nano nginx-conf/nginx.conf

このファイルでは、サーバー名とドキュメントルートのディレクティブを含むサーバーブロックと、証明書、PHP処理、および静的アセット要求に対するCertbotクライアントの要求を指示する場所ブロックを追加します。

次のコードをファイルに貼り付けます。 必ず `++`を自分のドメイン名に置き換えてください:

〜/ wordpress / nginx-conf / nginx.conf

server {
       listen 80;
       listen [::]:80;

       server_name  www.;

       index  index.html index.htm;

       root /var/www/html;

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

       location / {
               try_files $uri $uri/ /index.php$is_args$args;
       }

       location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass :9000;
               fastcgi_index index.php;
               include fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
       }

       location ~ /\.ht {
               deny all;
       }

       location = /favicon.ico {
               log_not_found off; access_log off;
       }
       location = /robots.txt {
               log_not_found off; access_log off; allow all;
       }
       location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
               expires max;
               log_not_found off;
       }
}

サーバーブロックには次の情報が含まれます。

ディレクティブ:

  • + listen +:これはNginxにポート `+ 80 `でリッスンするように指示します。これにより、証明書リクエストにCertbotのhttps://certbot.eff.org/docs/using.html#webroot[webroot plugin]を使用できるようになります。 。 まだポート ` 443 +`を含んでいないことに注意してください-証明書を正常に取得したら、SSLを含むように設定を更新します。

  • + server_name +:これは、サーバー名とサーバーへのリクエストに使用されるサーバーブロックを定義します。 この行の「++」を自分のドメイン名に置き換えてください。

  • + index +: `+ index `ディレクティブは、サーバーへのリクエストを処理するときにインデックスとして使用されるファイルを定義します。 ここでデフォルトの優先順位を変更し、可能であればNginxが ` index.php `と呼ばれるファイルを優先するように、 ` index.html `の前に ` index.php +`を移動しました。

  • + root +:私たちの `+ root `ディレクティブはサーバーへのリクエストのルートディレクトリを指定します。 このディレクトリ、「 / var / www / html +」はhttps://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/fpm-alpine/Dockerfile#L53 [マウントポイントとして作成]ビルド時にhttps://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/fpm-alpine/Dockerfile[WordPress Dockerfile]の指示に従ってください。 これらのDockerfile命令は、WordPressリリースからのファイルがこのボリュームにマウントされることも保証します。

ロケーションブロック:

  • + location〜/ .well-known / acme-challenge +:このロケーションブロックは、 `+ .well-known +`ディレクトリへのリクエストを処理します。Certbotは、ドメインのDNSがサーバ。 この構成が適切であれば、Certbotのwebrootプラグインを使用して、ドメインの証明書を取得できます。

  • + location / +:このロケーションブロックでは、 `+ try_files `ディレクティブを使用して、個々のURIリクエストに一致するファイルをチェックします。 ただし、デフォルトで404の「 Not Found 」ステータスを返す代わりに、リクエスト引数とともにWordPressの「 index.php +」ファイルに制御を渡します。

  • + location〜\ .php $ +:このロケーションブロックはPHPの処理を処理し、これらのリクエストを + wordpress +`コンテナにプロキシします。 WordPress Dockerイメージはhttps://github.com/docker-library/php/blob/e63194a0006848edb13b7eff5a7f9d790d679428/7.2/alpine3.9/fpm/Dockerfile [+ php:fpm ` image]に基づいているため、このブロックにhttps://en.wikipedia.org/wiki/FastCGI[FastCGI protocol]に固有の構成オプションを含めます。 Nginxには、PHPリクエスト用に独立したPHPプロセッサが必要です。この場合、これらのリクエストは、 ` php:fpm `イメージに含まれる ` php-fpm `プロセッサによって処理されます。 さらに、このロケーションブロックには、 ` wordpress +`コンテナーで実行されているWordPressアプリケーションへのリクエストをプロキシし、解析済みリクエストURIの優先インデックスを設定し、URIリクエストを解析するFastCGI固有のディレクティブ、変数、オプションが含まれます。

  • + location〜/ \。ht +:このブロックは、Nginxがファイルを提供しないため、 `+ .htaccess `ファイルを処理します。 ` deny_all `ディレクティブは、 ` .htaccess +`ファイルが決してユーザーに提供されないことを保証します。

  • + location = /favicon.ico++location = / robots.txt +:これらのブロックは、 `+ / favicon.ico `および ` / robots.txt +`へのリクエストがログに記録されないようにします。

  • + location〜* \。(css | gif | ico | jpeg | jpg | js | png)$ +:このブロックは、静的アセット要求のロギングをオフにし、これらのアセットは通常、サーブ。

FastCGIプロキシの詳細については、https://www.digitalocean.com/community/tutorials/understanding-and-implementing-fastcgi-proxying-in-nginx [NginxでのFastCGIプロキシの理解と実装]を参照してください。 サーバーとロケーションブロックの詳細については、https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms [Nginxサーバーとロケーションブロックの選択アルゴリズムについて]を参照してください。

編集が終了したら、ファイルを保存して閉じます。 + nano +`を使用した場合は、 `+ CTRL + X ++ Y +、次に `+ ENTER +`を押して実行します。

Nginxの設定が完了したら、実行時にアプリケーションとデータベースコンテナーに渡す環境変数の作成に進むことができます。

ステップ2-環境変数の定義

データベースとWordPressアプリケーションコンテナーは、アプリケーションデータが保持され、アプリケーションにアクセスできるように、実行時に特定の環境変数にアクセスする必要があります。 これらの変数には、機密情報と非機密情報の両方が含まれます。MySQL* root *パスワードとアプリケーションデータベースユーザーとパスワードの機密値、およびアプリケーションデータベース名とホストの機密情報です。

Docker Composeファイル(コンテナの実行方法に関する情報を含むメインファイル)でこれらの値をすべて設定するのではなく、 `+ .env +`ファイルに機密値を設定し、その循環を制限できます。 これにより、これらの値がプロジェクトリポジトリにコピーされて公開されるのを防ぐことができます。

メインプロジェクトディレクトリの `〜/ +`で、 ` .env +`というファイルを開きます。

nano .env

このファイルに設定する機密値には、MySQL * root *ユーザーのパスワード、およびWordPressがデータベースへのアクセスに使用するユーザー名とパスワードが含まれます。

次の変数名と値をファイルに追加します。 各変数について、ここで*独自の値*を指定することを忘れないでください:

〜/ wordpress / .env

MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=
  • root *管理アカウントのパスワードと、アプリケーションデータベースの優先ユーザー名とパスワードを含めました。

編集が終了したら、ファイルを保存して閉じます。

`+ .env `ファイルには機密情報が含まれているため、プロジェクトの ` .gitignore `および ` .dockerignore +`ファイルに含まれていることを確認する必要があります。これらのファイルはhttps://www.digitalocean.com/communityに通知します/ tutorials / how-to-use-git-a-reference-guide [Git]およびDockerどのファイルをGitリポジトリとDockerイメージにそれぞれコピーしないようにします。

バージョン管理のためにGitを使用する予定がある場合は、https://www.digitalocean.com/community/tutorials/how-to-use-git-a-reference-guide#set-up-and-initialization [現在のリポジトリとしての作業ディレクトリ]と + git init +

git init

次に、 `+ .gitignore +`ファイルを開きます。

nano .gitignore

ファイルに `+ .env +`を追加します。

〜/ wordpress / .gitignore

.env

編集が終了したら、ファイルを保存して閉じます。

同様に、ビルドコンテキストとしてこのディレクトリを使用しているときにコンテナに配置されないように、「。doc + ignore +」ファイルに「 .env +」を追加することをお勧めします。

ファイルを開きます。

nano .dockerignore

ファイルに `+ .env +`を追加します。

〜/ wordpress / .dockerignore

.env

これの下に、アプリケーションの開発に関連するファイルとディレクトリをオプションで追加できます。

〜/ wordpress / .dockerignore

.env
.git
docker-compose.yml
.dockerignore

完了したら、ファイルを保存して閉じます。

機密情報を配置したら、 `+ docker-compose.yml`ファイルでサービスの定義に進むことができます。

ステップ3-Docker Composeでサービスを定義する

`+ docker-compose.yml +`ファイルにはセットアップのサービス定義が含まれます。 Composeの_service_は実行中のコンテナーであり、サービス定義は各コンテナーの実行方法に関する情報を指定します。

Composeでは、複数のコンテナアプリケーションを実行するためにさまざまなサービスを定義できます。Composeでは、これらのサービスを共有ネットワークおよびボリュームとリンクできるためです。 これは、データベース、WordPressアプリケーション、およびWebサーバー用に異なるコンテナを作成するため、現在のセットアップに役立ちます。 また、Webサーバーの証明書を取得するために、https://certbot.eff.org/ [Certbot client]を実行するコンテナーを作成します。

まず、 `+ docker-compose.yml +`ファイルを開きます:

nano docker-compose.yml

次のコードを追加して、作成ファイルのバージョンと「+ db +」データベースサービスを定義します。

〜/ wordpress / docker-compose.yml

version: '3'

services:
 db:
   image: mysql:
   container_name: db
   restart: unless-stopped
   env_file: .env
   environment:
     - MYSQL_DATABASE=
   volumes:
     - dbdata:/var/lib/mysql
   command: '--default-authentication-plugin=mysql_native_password'
   networks:
     - app-network

`+ db +`サービス定義には次のオプションが含まれます。

  • + image +:コンテナを作成するためにプルするイメージをComposeに伝えます。 + mysql:latest +`イメージが継続するので、将来の競合を避けるためにhttps://github.com/docker-library/mysql/blob/130bd8e46a3da1adfc1732a08c70673e20aa5977/8.0/Dockerfile [+ mysql:+` image]をここに固定しています更新します。 バージョンの固定と依存関係の競合の回避の詳細については、https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ [Dockerfileベストプラクティス]のDockerドキュメントを参照してください。

  • + container_name +:これはコンテナの名前を指定します。

  • + restart +:コンテナの再起動ポリシーを定義します。 デフォルトは「+ no +」ですが、手動で停止しない限り、コンテナは再起動するように設定されています。

  • + env_file +:このオプションは、ビルドコンテキストにある `+ .env +`というファイルから環境変数を追加することをComposeに伝えます。 この場合、ビルドコンテキストは現在のディレクトリです。

  • + environment +:このオプションを使用すると、 `+ .env `ファイルで定義されている環境変数以外に、追加の環境変数を追加できます。 アプリケーションデータベースの名前を指定するために、変数「 MYSQL_DATABASE 」を「+」に設定します。 これは機密情報ではないため、 `+ docker-compose.yml +`ファイルに直接含めることができます。

  • + volumes +:ここでは、名前付きhttps://docs.docker.com/storage/volumes/[volume]を `+ dbdata `と呼び、コンテナの ` / var / lib / mysql +`ディレクトリにマウントします。 これは、ほとんどのディストリビューションのMySQLの標準データディレクトリです。

  • + command +:このオプションは、イメージのデフォルトのhttps://docs.docker.com/engine/reference/builder/#cmd[CMD instruction]を上書きするコマンドを指定します。 この場合、Dockerイメージの標準https://dev.mysql.com/doc/refman/8.0/en/mysqld.html [+ mysqld + command]にオプションを追加し、MySQLサーバーを起動します容器。 このオプション `-default-authentication-plugin = mysql_native_password +`は、 `-default-authentication-plugin `システム変数を ` mysql_native_password +`に設定し、サーバーへの新しい認証要求を管理する認証メカニズムを指定します。 PHP以降のWordPressイメージhttps://github.com/docker-library/wordpress/issues/313 [サポートされません] https://mysqlserverteam.com/upgrading-to-mysql-8-0-default- authentication-plugin-considerations / [MySQLの新しい認証デフォルト]では、アプリケーションデータベースユーザーを認証するためにこの調整を行う必要があります。

  • + network +:これは、アプリケーションサービスがファイルの下部で定義する `+ app-network +`ネットワークに参加することを指定します。

次に、 `+ db `サービス定義の下に、 ` wordpress +`アプリケーションサービスの定義を追加します。

〜/ wordpress / docker-compose.yml

...
 wordpress:
   depends_on:
     - db
   image: wordpress:-fpm-alpine
   container_name: wordpress
   restart: unless-stopped
   env_file: .env
   environment:
     - WORDPRESS_DB_HOST=db:3306
     - WORDPRESS_DB_USER=$MYSQL_USER
     - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
     - WORDPRESS_DB_NAME=
   volumes:
     - wordpress:/var/www/html
   networks:
     - app-network

このサービス定義では、 `+ db +`サービスで行ったように、コンテナに名前を付け、再起動ポリシーを定義しています。 このコンテナに固有のオプションもいくつか追加しています。

  • + depends_on +:このオプションは、コンテナが依存関係の順に起動することを保証し、 `+ wordpress `コンテナは ` db +`コンテナの後に起動します。 WordPressアプリケーションは、アプリケーションデータベースとユーザーの存在に依存しているため、この依存関係の順序を表現すると、アプリケーションを適切に起動できます。

  • + image +:このセットアップでは、https://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/fpm-alpine/Dockerfile [+ -fpm-alpine + WordPressイメージを使用しています。 ]。 https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose#step-1-%E2%80%94-defining-the-web-server-で説明されているようにconfiguration [Step 1]、このイメージを使用することで、NginxがPHP処理を処理するために必要な `+ php-fpm `プロセッサがアプリケーションにあることが保証されます。 これはhttps://alpinelinux.org/[Alpine Linux project]から派生した ` alpine `イメージでもあり、全体のイメージサイズを小さくするのに役立ちます。 ` alpine +`画像を使用することの利点と欠点、およびこれがアプリケーションにとって意味があるかどうかの詳細については、https://hub.docker.com/_の* Image Variants *セクションにある完全な説明を参照してください。 / wordpress [Docker Hub WordPress画像ページ]。

  • + env_file +:繰り返しますが、 `+ .env +`ファイルから値を取得することを指定します。これはアプリケーションデータベースのユーザーとパスワードを定義した場所だからです。

  • + environment +:ここでは、 + .env +`ファイルで定義した値を使用していますが、WordPressイメージが期待する変数名に割り当てています: `+ WORDPRESS_DB_USER +`と `+ WORDPRESS_DB_PASSWORD +。 また、 + WORDPRESS_DB_HOST +`を定義しています。これは、MySQLのデフォルトポートである `+ 3306 +`でアクセス可能な `+ db +`コンテナで実行されるMySQLサーバーになります。 `+ WORDPRESS_DB_NAME +`は、 `+ MYSQL_DATABASE +`のMySQLサービス定義で指定した値と同じ値になります: `++

  • + volumes +: `+ wordpress `という名前のボリュームを ` / var / www / html +`マウントポイントにマウントしていますhttps://github.com/docker-library/wordpress/blob/07958d19ed465fb7fe50626be740d88a2c2260a7/php7.2/ fpm-alpine / Dockerfile#L53 [WordPressイメージによって作成]。 このように名前付きボリュームを使用すると、アプリケーションコードを他のコンテナと共有できます。

  • + network +: `+ apppress-network `ネットワークに ` wordpress`コンテナも追加しました。

次に、 + wordpress +`アプリケーションサービス定義の下に、 `+ webserver + Nginxサービスの次の定義を追加します。

〜/ wordpress / docker-compose.yml

...
 webserver:
   depends_on:
     - wordpress
   image: nginx:-alpine
   container_name: webserver
   restart: unless-stopped
   ports:
     - "80:80"
   volumes:
     - wordpress:/var/www/html
     - ./nginx-conf:/etc/nginx/conf.d
     - certbot-etc:/etc/letsencrypt
   networks:
     - app-network

繰り返しますが、コンテナに名前を付け、開始する順番に「+ wordpress 」コンテナに依存させます。 また、「 alpine 」画像(https://github.com/nginxinc/docker-nginx/blob/e5123eea0d29c8d13df17d782f15679458ff899e/mainline/stretch/Dockerfile [` -alpine +` Nginx image]も使用しています。

このサービス定義には、次のオプションも含まれます。

  • + ports +:これはポート `+ 80 `を公開して、リンクの[ nginx.conf + `ファイルで定義した設定オプションを有効にします:[ステップ1]。

  • + volumes +:ここでは、名前付きボリュームとhttps://docs.docker.com/storage/bind-mounts/[bind mounts]の組み合わせを定義しています。

  • + wordpress:/ var / www / html +:これにより、WordPressアプリケーションコードが `+ / var / www / html `ディレクトリ(Nginxサーバーブロックで ` root +`として設定されたディレクトリ)にマウントされます。

  • +。/ nginx-conf:/ etc / nginx / conf.d +:これにより、ホスト上のNginx設定ディレクトリがコンテナ上の関連ディレクトリにバインドマウントされ、ホスト上のファイルに加えた変更が確実に行われます。コンテナに反映されます。

  • + certbot-etc:/ etc / letsencrypt +:これにより、ドメインの関連するLet’s Encrypt証明書とキーがコンテナの適切なディレクトリにマウントされます。

そして再び、このコンテナを「+ app-network +」ネットワークに追加しました。

最後に、 `+ webserver `定義の下に、 ` certbot +`サービスの最後のサービス定義を追加します。 ここにリストされている電子メールアドレスとドメイン名を独自の情報に置き換えてください。

〜/ wordpress / docker-compose.yml

 certbot:
   depends_on:
     - webserver
   image: certbot/certbot
   container_name: certbot
   volumes:
     - certbot-etc:/etc/letsencrypt
     - wordpress:/var/www/html
   command: certonly --webroot --webroot-path=/var/www/html --email  --agree-tos --no-eff-email --staging -d  -d www.

この定義により、Composeはhttps://hub.docker.com/r/certbot/certbot/ [+ certbot / certbot + image]をDocker Hubからプルするように指示されます。 また、名前付きボリュームを使用して、 `+ certbot-etc `のドメイン証明書とキー、および ` wordpress +`のアプリケーションコードなどのリソースをNginxコンテナーと共有します。

繰り返しますが、「+ depends_on 」を使用して、「 webserver 」サービスの実行後に「 certbot +」コンテナを開始するように指定しました。

コンテナのデフォルトの + certbot +`コマンドで実行するサブコマンドを指定する `+ command +`オプションも含まれています。 https://certbot.eff.org/docs/using.html#certbot-command-line-options [+ certonly +`サブコマンド]は、次のオプションで証明書を取得します。

  • +-webroot +:これは、認証のためにwebrootプラグインを使用してwebrootフォルダーにファイルを配置するようCertbotに指示します。 このプラグインはhttps://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.2[HTTP-01検証方法]に依存します。これはHTTP要求を使用して、Certbotがリソースにアクセスできることを証明します特定のドメイン名に応答するサーバーから。

  • +-webroot-path +:これはwebrootディレクトリのパスを指定します。

  • +-email +:登録と回復に使用するメール。

  • +-agree-tos +:これは、https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf [ACME’s Subscriber Agreement]に同意することを指定します。

  • +-no-eff-email +:これは、Certbotに、https://www.eff.org/ [Electronic Frontier Foundation](EFF)とメールを共有したくないことを伝えます。 必要に応じて、これを省略しても構いません。

  • +-staging +:これにより、CertbotにLet’s Encryptのステージング環境を使用してテスト証明書を取得することを伝えます。 このオプションを使用すると、構成オプションをテストして、ドメイン要求の制限を回避できます。 これらの制限の詳細については、Let’s Encryptのhttps://letsencrypt.org/docs/rate-limits/[rate limits documentation]をご覧ください。

  • + -d +:これにより、リクエストに適用したいドメイン名を指定できます。 この場合、「+」と「 www。+」を含めました。 これらは必ず独自のドメインに置き換えてください。

`+ certbot +`サービス定義の下に、ネットワークとボリュームの定義を追加します。

〜/ wordpress / docker-compose.yml

...
volumes:
 certbot-etc:
 wordpress:
 dbdata:

networks:
 app-network:
   driver: bridge

トップレベルの「+ volumes 」キーは、ボリューム「 certbot-etc 」、「 wordpress 」、および「 dbdata 」を定義します。 Dockerがボリュームを作成するとき、ボリュームのコンテンツは、Dockerによって管理されるホストファイルシステムのディレクトリ「 / var / lib / docker / volumes / +」に保存されます。 各ボリュームの内容は、このディレクトリからボリュームを使用するコンテナにマウントされます。 このようにして、コンテナ間でコードとデータを共有できます。

ユーザー定義のブリッジネットワーク「+ app-network 」は、コンテナが同じDockerデーモンホスト上にあるため、コンテナ間の通信を可能にします。 これにより、ポートを外部に公開することなく、同じブリッジネットワーク上のコンテナ間のすべてのポートが開かれるため、アプリケーション内のトラフィックと通信が合理化されます。 したがって、 ` db `、 ` wordpress `、および ` webserver `コンテナは相互に通信でき、アプリケーションへのフロントエンドアクセス用にポート ` 80 +`を公開するだけで済みます。

完成した `+ docker-compose.yml +`ファイルは次のようになります。

〜/ wordpress / docker-compose.yml

version: '3'

services:
 db:
   image: mysql:
   container_name: db
   restart: unless-stopped
   env_file: .env
   environment:
     - MYSQL_DATABASE=
   volumes:
     - dbdata:/var/lib/mysql
   command: '--default-authentication-plugin=mysql_native_password'
   networks:
     - app-network

 wordpress:
   depends_on:
     - db
   image: wordpress:-fpm-alpine
   container_name: wordpress
   restart: unless-stopped
   env_file: .env
   environment:
     - WORDPRESS_DB_HOST=db:3306
     - WORDPRESS_DB_USER=$MYSQL_USER
     - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
     - WORDPRESS_DB_NAME=
   volumes:
     - wordpress:/var/www/html
   networks:
     - app-network

 webserver:
   depends_on:
     - wordpress
   image: nginx:-alpine
   container_name: webserver
   restart: unless-stopped
   ports:
     - "80:80"
   volumes:
     - wordpress:/var/www/html
     - ./nginx-conf:/etc/nginx/conf.d
     - certbot-etc:/etc/letsencrypt
   networks:
     - app-network

 certbot:
   depends_on:
     - webserver
   image: certbot/certbot
   container_name: certbot
   volumes:
     - certbot-etc:/etc/letsencrypt
     - wordpress:/var/www/html
   command: certonly --webroot --webroot-path=/var/www/html --email  --agree-tos --no-eff-email --staging -d  -d www.

volumes:
 certbot-etc:
 wordpress:
 dbdata:

networks:
 app-network:
   driver: bridge

編集が終了したら、ファイルを保存して閉じます。

サービス定義を適切に配置したら、コンテナを起動して証明書リクエストをテストする準備が整います。

手順4-SSL証明書と資格情報の取得

https://docs.docker.com/compose/reference/up/[`docker-compose up + `]コマンドを使用してコンテナを起動できます。このコマンドは、指定した順序でコンテナを作成して実行します。 ドメインリクエストが成功すると、出力に正しい終了ステータスが表示され、正しい証明書が ` webserver `コンテナーの ` / etc / letsencrypt / live +`フォルダーにマウントされます。

Related