WordPressウェブサイトのデプロイを簡素化するために、私たちのシンプルで分かりやすいガイドを利用してください。Docker Compose、Nginx、Apache、SSLを使用して、スムーズなインストールプロセスを実現します。
また、コンテナが再起動しても変更やアップデートが保持されるように、ボリュームを作成します。
この設定は、Ubuntu 22.04 OSを実行しているGoogle Cloudのインスタンスでテストされています。AWSやAzure、DigitalOceanなどのクラウドサービスや、専用サーバーやVPSサーバーでもこの設定を行うことができます。
前提条件
上記のステップをすべて完了していることを確認してください。
- ドメインをサーバーの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
を押し、次にY
とENTER
を押してください。
Docker Compose設定: 説明
以下は設定の詳細です。
- バージョン: Dockerエンジンと互換性のあるComposeファイルのバージョンを作成してください。互換性を確認するにはこちらを参照してください。
- サービス: ここでは、
WordPress
、MariaDB
、nginx
、および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
を押し、続いてY
とENTER
を押してファイルを保存して終了します。
これで、あなたの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
を押し、続けてY
とENTER
を押してください。
次に、新しい構成を読み込むために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