Dockerを使ってWordPressを簡単に構築する手順

Docker

はじめに

この記事では、Dockerを使ってWordPressをセットアップする方法をステップバイステップで解説します。

Dockerを使用することで、環境依存の問題を減らし、手軽にWordPress環境を構築することができます。

今回は、AlmaLinuxおよびUbuntuの両方に対応した手順を紹介します。また、HTTPS化も行い、安全な通信を実現します。

dockerのインストール

まずは、Dockerをインストールするところから始めます。

既に古いバージョンのDockerがインストールされている場合は、以下のコマンドでそれらを削除しましょう。

  • AlmaLinux
  • Ubuntu
ShellScript
# 古いパッケージの削除
sudo dnf remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
ShellScript
# 競合するパッケージを削除
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

次に、Dockerをインストールします。以下のコマンドを実行してください。

  • AlmaLinux
  • Ubuntu
ShellScript
# Dockerインストール処理
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
ShellScript
# パッケージ インデックスを更新
sudo apt-get update -o Dir::Etc::sourcelist=/dev/null
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common -y

# Dockerの公式GPGキーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Dockerのリポジトリをセットアップ
echo \
    "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# パッケージ インデックスを更新
sudo apt-get update

# Dockerをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io  docker-buildx-plugin docker-compose-plugin -y

インストールが完了したら、自動起動の設定を行い、Dockerを起動します。

ShellScript
# 自動起動するように設定
sudo systemctl enable docker
sudo systemctl start docker

最後に、現在のユーザーをdockerグループに追加して、コマンドを実行する際にsudoを必要としないようにします。

ShellScript
# 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER

docker-composeのインストール

次に、Docker Composeをインストールします。これは複数のDockerコンテナを簡単に管理するためのツールです。

ShellScript
sudo -E curl -L https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

nginx-proxyコンテナでリバースプロキシを作成

リバースプロキシを設定することで、複数のサービスを同じポートで動かすことができます。

ここでは、nginx-proxyを使用して設定します。さらに、Let’s Encryptを使って自動的にSSL証明書を取得し、HTTPS化します。

まず、必要なディレクトリを作成し、設定ファイルを配置します。

ShellScript
mkdir -p /usr/local/src/nginx-proxy
cd /usr/local/src/nginx-proxy
vi docker-compose.yml

viエディタが開いたら、以下の内容を貼り付けます。

YAML
version: '3'

services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - conf:/etc/nginx/conf.d
      - certs:/etc/nginx/certs:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: ★ここにドメイン名を入れる
      HTTPS_METHOD: noredirect
    restart: always

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes_from:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

volumes:
  conf:
  certs:
  vhost:
  html:
  acme:

設定が完了したら、リバースプロキシコンテナを起動します。

ShellScript
cd /usr/local/src/nginx-proxy
docker-compose up -d

WordPressコンテナを作成する

次に、WordPress用のコンテナを作成します。データベースとWordPressを別々のサービスとして設定します。

ShellScript
mkdir -p /usr/local/src/wordpress
cd /usr/local/src/wordpress
vi docker-compose.yml

viエディタが開いたら、以下の内容を貼り付けます。

YAML
version: '3'

services:
   db:
     image: mysql:8.0
     volumes:
       - ./db:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: ★パスワードを設定
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: ★パスワードを設定

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     volumes:
       - ./wordpress:/var/www/html
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: ★パスワードを設定
       VIRTUAL_HOST: ★ドメイン名
       VIRTUAL_PROTO: http
       LETSENCRYPT_HOST: ★ドメイン名
       LETSENCRYPT_EMAIL: ★メールアドレス
networks:
  default:
    external:
      name: nginx-proxy_default

WordPressコンテナを起動

最後に、WordPressコンテナを起動します。

ShellScript
cd /usr/local/src/nginx-proxy
docker-compose up -d

これで、リバースプロキシとWordPressコンテナが起動し、指定したドメインでWordPressにアクセスできるようになります。ブラウザでドメインを開き、WordPressの初期設定を行いましょう。

HTTPSの設定について

nginx-proxyacme-companionを使用することで、Let’s EncryptからSSL証明書を自動的に取得し、HTTPS化を行います。

これにより、サイトの通信が暗号化され、セキュアな接続が確立されます。

docker-compose.ymlで以下の環境変数を設定しました:

  • VIRTUAL_HOST: ドメイン名を指定
  • VIRTUAL_PROTO: httpに設定
  • LETSENCRYPT_HOST: ドメイン名を指定
  • LETSENCRYPT_EMAIL: Let’s Encryptの通知を受け取るメールアドレスを指定

これらの設定により、Let’s EncryptのSSL証明書が自動的に取得され、NginxプロキシがHTTPSをサポートします。

証明書の確認

下記コマンドを実行するとSSL証明書のステータスが確認できます。

ShellScript
docker exec nginx-proxy-acme /app/cert_status
##### Certificate status #####
/etc/nginx/certs/vvil.jp/fullchain.pem: OK
Certificate was issued by
Certificate is valid until Sep 19 03:21:31 2024 GMT
Subject Name:

Certificate is used by the following domain(s):
- vvil.jp
##############################

手動でSSL証明書を更新するには下記コマンドを実行してください。

ShellScript
docker exec nginx-proxy-acme /app/force_renew
タイトルとURLをコピーしました