ウェブサイト検索

Docker Composeを使用してWordPressをインストールする方法


Docker Composeを使用してWordPressをインストールする方法

このチュートリアルはこれらのOSバージョンのために存在します

  • Ubuntu 24.04 (ノーブル・ナンバット)
  • Ubuntu 16.04 (ゼニアル・ゼクス)

このページで

  1. 前提条件
  2. ステップ1 - ファイアウォールを設定する
  3. ステップ2 - DockerとDocker Composeをインストールする
  4. ステップ3 - WordPressのためのDocker Composeファイルを作成する
  5. ステップ4 - NginxのためのDocker Composeを更新する
  6. ステップ5 - SSL用にDocker Composeを更新する
  7. ステップ6 - WordPressを開始してインストールする
  8. ステップ7 - PhpMyAdminにアクセスする
  9. ステップ8 - WP-CLIにアクセスする
  10. ステップ9 - WordPressのバックアップ
  11. ステップ10 - WordPressをアップグレードする
  12. 結論

WordPress CMS(コンテンツ管理システム)は、主にウェブサイトやブログのためにデジタルコンテンツを作成、管理、公開することを可能にする広く使用されているオープンソースプラットフォームです。2003年に最初にリリースされて以来、WordPressは世界で最も人気のあるCMSに成長し、インターネット上のすべてのウェブサイトの40%以上を支えています。コーディング経験がほとんどない個人でもプロフェッショナル品質のウェブサイトを構築・維持できるように、ユーザーフレンドリーなインターフェースを提供しています。WordPressは非常にカスタマイズ可能で、数千のテーマやプラグインが利用可能で、その機能を拡張し、シンプルなブログから複雑なeコマースサイトまでさまざまなニーズに応えています。強力なコミュニティサポート、定期的な更新、広範なドキュメンテーションにより、初心者と経験豊富な開発者の両方にとって信頼性が高く多用途の選択肢となっています。

Dockerは、軽量でポータブルなコンテナ内でアプリケーションの展開、スケーリング、および管理を自動化するために設計されたオープンソースのプラットフォームです。2013年に導入されたDockerは、アプリケーションが実行される環境を一貫させることによってソフトウェア開発に革命をもたらしました。これにより、開発者のローカルマシン、オンプレミスのデータセンター、またはクラウドなど、どこにデプロイされても同じ環境で動作します。コンテナは、アプリケーションをそのすべての依存関係、ライブラリ、および設定ファイルと一緒にバンドルし、異なる環境間での一貫したパフォーマンスを保証します。 このコンテナ化は、開発ワークフローを簡素化し、コラボレーションを強化し、開発者がシームレスにアプリケーションを作成、共有、実行できるようにすることで効率を向上させます。Dockerのエコシステムには、Docker SwarmやKubernetesのようなコンテナオーケストレーションのためのツールやサービスが含まれており、大規模なコンテナデプロイメントの管理を容易にします。これにより、現代のDevOps実践における重要な技術となっています。

このチュートリアルでは、Docker/Docker Composeを使用してWordPressをインストールする方法を教えます。Dockerを使用すると、お好みのスタックをインストールするプロセスがはるかに簡単になります。同じ構成を使用して、複数のサーバーにWordPressを迅速にインストールできます。また、データベースを管理するためのphpMyAdminツールと、SSL経由でサイトを提供するためのNginxプロキシサーバーもインストールします。

前提条件

    sudo権限を持つ非ルートユーザーがいるLinuxサーバー。チュートリアルでは、Ubuntu 24.04を実行しているサーバーを使用しています。

    あなたのサーバーを指す完全修飾ドメイン名(FQDN)。私たちの目的のために、WordPressサイトのドメイン名としてexample.comを、phpMyAdminサイトのためにphpmyadmin.example.comを使用します。

    すべてが最新であることを確認してください。

    sudo apt update
    

    基本的なユーティリティパッケージをインストールします。中にはすでにインストールされているものもあります。

    sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

ステップ1 - ファイアウォールを設定する

最初のステップはファイアウォールを設定することです。Ubuntuにはデフォルトでufw(簡易ファイアウォール)が付属しています。

ファイアウォールが実行中かどうか確認してください。

sudo ufw status

次の出力を得るべきです。

Status: inactive

SSHポートを許可して、ファイアウォールが有効化時に現在の接続が切れないようにします。

sudo ufw allow OpenSSH

HTTPおよびHTTPSポートも許可してください。

sudo ufw allow http
sudo ufw allow https

ファイアウォールを有効にする

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

ファイアウォールの状態を再度確認してください。

sudo ufw status

あなたは似たような出力を見るべきです。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

ステップ2 - DockerとDocker Composeをインストールする

Ubuntu 22.04には古いバージョンのDockerが含まれています。最新のバージョンをインストールするには、まずDockerのGPGキーをインポートしてください。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /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 \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

システムのリポジトリリストを更新します。

sudo apt update

最新のDockerのバージョンをインストールしてください。

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

それが動いているか確認してください。

sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-07-19 17:11:19 UTC; 3s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 1163 (dockerd)
      Tasks: 7
     Memory: 21.9M
        CPU: 221ms
     CGroup: /system.slice/docker.service
             ??2803 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

デフォルトでは、Dockerはルート権限を必要とします。毎回sudoを使わずにdockerコマンドを実行したい場合は、あなたのユーザー名をdockerグループに追加してください。

sudo usermod -aG docker $(whoami)

この変更を有効にするには、サーバーからログアウトし、同じユーザーとして再度ログインする必要があります。または、次のコマンドを使用してください。

su - ${USER}

ユーザーがDockerグループに追加されたことを確認します。

groups
navjot wheel docker

ステップ3 - WordPressのためのDocker Composeファイルを作成する

私は/optにDocker WordPressのインストール全体を行います。あなたのニーズに合わせて、/varや/homeなど別の場所を選ぶこともできます。

cd /opt

WordPressの設定用ディレクトリを作成します。

mkdir wordpress

ディレクトリに切り替えます。

cd wordpress

Docker Composeファイルを作成して編集のために開いてください。

nano docker-compose.yml

そのコードをそこに貼り付けてください。

services:
  wp:
    image: wordpress:latest
    container_name: wordpress-app
    restart: unless-stopped
    expose:
      - 8080
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
      #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development
      #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
    depends_on:
      - db
    links:
      - db

  wpcli:
    image: wordpress:cli
    container_name: wpcli_app
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
    depends_on:
      - db
      - wp

  pma:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    restart: unless-stopped
    environment:
      # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables
      PMA_HOST: db
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      UPLOAD_LIMIT: 50M
      VIRTUAL_HOST: phpmyadmin.example.com
      LETSENCRYPT_HOST: phpmyadmin.example.com
    expose:
      - 8081
    links:
      - db:db

  db:
    image: mysql:latest
    container_name: wordpressdb
    restart: unless-stopped
    command: [
        '--default_authentication_plugin=mysql_native_password',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_unicode_ci'
    ]
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: "${DB_NAME}"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      MYSQL_USER: "${DB_USER_NAME}"
      MYSQL_PASSWORD: "${DB_USER_PASSWORD}"

volumes:
  db_data:

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

私たちは引き出しているWordPressイメージが2つあります。1つはウェブサイト用、もう1つはWP-CLIツール用です。どちらのイメージもMySQL 8.0のDockerイメージに依存しています。ここでは、データベースの資格情報のための環境変数を設定しています。私たちは両方のコンテナ用に2つのボリュームを作成しました。そのうちの1つはWordPressサイトのパブリックファイルを指し、もう1つはカスタムPHP.iniの場所を指しています。また、Nginxの仮想ホストドメインとWordPressサイトのLet's Encrypt SSLドメインのための環境変数も定義しています。

Dockerファイルに追加の環境変数を追加し、カスタムwp-config.phpデータを追加できます。追加の環境変数については、WordPressのDockerHubページで学ぶことができます。

次の画像はphpMyAdminに関するもので、同じMySQLイメージに依存し、ルートパスワードを使用して接続します。アップロード制限は50MBです。要件やデータベースのサイズに応じて変更できます。WordPressサイトと同様に、phpMyAdminサイトのためにNginxのバーチャルホストドメインおよびLet's EncryptのSSLドメイン名を定義しました。

最後の画像はMySQLデータベースに関するものです。デフォルトの認証方式と文字セットを設定するためにいくつかのコマンドを渡しました。また、データを保存するためのボリュームをいくつか作成し、データベースの資格情報用の環境変数を設定しました。

次のステップは、composeファイルで使用される変数のための環境ファイルを作成することです。環境ファイルを作成して、編集のために開きます。

sudo nano .env

そのコードをそこに貼り付けてください。

DB_NAME=wordpress
DB_USER_NAME=username
DB_USER_PASSWORD=userpassword
DB_ROOT_PASSWORD=password

ファイルはCtrl + Xを押して、促されたらYを入力することで保存できます。変数をお好きなユーザー名とパスワードに置き換えてください。

カスタム php.ini ファイルを使用して PHP 設定をカスタマイズできます。

PHP設定用のフォルダーを作成します。

mkdir config

php.conf.iniファイルを作成して編集のために開きます。

nano config/php.conf.ini

以下のコードをそれに貼り付けてください。必要に応じて値を調整します。このファイルで使用する値とは独立して、PhpMyadminコンテナのアップロード制限があります。

file_uploads = On
memory_limit = 500M
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 600

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

ステップ4 - NginxのためのDocker Composeを更新する

Nginxの設定用ディレクトリを作成します。

mkdir nginx

そのディレクトリ内に仮想ホスト用のディレクトリを作成します。

mkdir nginx/vhost

nginx/vhost/wordpress.example.comを作成して編集のために開きます。

nano nginx/vhost/wordpress.example.com

そのコードをそこに貼り付けてください。

server_tokens off;
client_max_body_size 30m;

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

nginx/vhost/phpmyadmin.example.comファイルにも同じことをしてください。

nano nginx/vhost/phpmyadmin.example.com

そのコードをそこに貼り付けてください。

server_tokens off;
client_max_body_size 50m;

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

再度Docker Composeファイルを開いてください。

nano docker-compose.yml

volumes: db_data: 行の前に次のコードを貼り付けてください。

  nginx:
    container_name: nginx
    image: nginxproxy/nginx-proxy
    restart: unless-stopped
    ports:
        - 80:80
        - 443:443
    volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - ./nginx/html:/usr/share/nginx/html
        - ./nginx/certs:/etc/nginx/certs
        - ./nginx/vhost:/etc/nginx/vhost.d
    logging:
        options:
            max-size: "10m"
            max-file: "3"

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

上記のコードでは、NginxプロキシのDockerイメージを取得し、ポート80と443をホストコンテナに公開して、外部と接続します。また、NginxのHTMLページ用のボリューム、すべてのSSL証明書が格納されるディレクトリ、および上記で追加のNginx設定に使用したバーチャルホスト用のディレクトリも作成しました。WordPressおよびphpMyAdminサイトのファイルアップロードサイズを設定しました。サイトのドメイン名は、前のステップで定義した環境変数から取得されます。

ステップ5 - SSL用にDocker Composeを更新する

Docker Composeファイルを編集のために開いてください。

nano docker-compose.yml

volumes: db_data: 行の前に次のコードを貼り付けてください。

  acme-companion:
    container_name: acme-companion
    image: nginxproxy/acme-companion
    restart: unless-stopped
    volumes_from:
        - nginx
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./nginx/acme:/etc/acme.sh
    environment:
        DEFAULT_EMAIL: [email 

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

ここでは、Nginxプロキシと連携するAcmeコンパニオンDockerイメージをプルしています。これはNginxコンテナからボリュームをプルします。また、Let's EncryptのSSLに関するすべての設定を保存するためにacme.shツールのボリュームも定義します。最後に、Let's EncryptにSSL証明書を登録するための環境変数を定義します。

ステップ6 - WordPressを開始してインストールする

すべての設定ファイルが完了したので、コンテナを起動し、立ち上げる時が来ました。

docker compose up -d

数分待ってからコンテナの状況を確認してください。

docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES
c1e8a9b5169d   nginxproxy/acme-companion   "/bin/bash /app/entr…"   14 seconds ago   Up 7 seconds                                                                               acme-companion
8a37c78ff790   wordpress:latest            "docker-entrypoint.s…"   14 seconds ago   Up 7 seconds    80/tcp, 8080/tcp                                                           wordpress-app
4f9c777c97c2   phpmyadmin/phpmyadmin       "/docker-entrypoint.…"   14 seconds ago   Up 7 seconds    80/tcp, 8081/tcp                                                           pma
1b1dede46b07   nginxproxy/nginx-proxy      "/app/docker-entrypo…"   14 seconds ago   Up 11 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
b9cf64a2f4a3   mysql:latest                "docker-entrypoint.s…"   14 seconds ago   Up 11 seconds   3306/tcp, 33060/tcp                                                        wordpressdb

URL https://example.com を開いて、WordPress インストーラーを開始してください。

言語を選択し、次のページに進むために続けるボタンをクリックしてください。

サイトの詳細を入力し、ユーザー名、パスワード、メールアドレスを選択して、WordPressをインストールボタンをクリックしてインストールを開始します。

インストール成功ページに移動します。ログインボタンをクリックしてログインページに移動してください。

ログイン情報を入力し、ログインボタンをクリックしてWordPressダッシュボードを開いてください。

今すぐWordPressを使い始めることができます。

ステップ7 - PhpMyAdminにアクセスする

phpMyAdminにはURLhttps://phpmyadmin.example.comを通じてアクセスできます。

ユーザー名にrootを入力し、ルートパスワードを入力してログインをクリックしてダッシュボードを開きます。

今すぐphpMyAdminを使い始めることができます。

ステップ8 - WP-CLIにアクセスする

次のコマンドを使用してWP-CLIにアクセスできます。

docker compose run --rm wpcli cli version

次の出力が得られます。

[+] Running 2/0
 ? Container wordpressdb    Running                                                                                0.0s
 ? Container wordpress-app  Running                                                                                0.0s
WP-CLI 2.7.1

毎回そんなに長いコマンドを入力するのを避けるために、Linuxのエイリアス機能を利用できます。

alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

これで、コンテナ内のどこからでも以下のコマンドを入力することができます。

wp cli version

Linuxのエイリアスは一時的なものです。エイリアスを永続させるには、~/.bashrcファイルを編集する必要があります。編集のために開いてください。

nano ~/.bashrc

ファイルの末尾に次の行を貼り付けてください。

Custom aliases
alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

設定を再読み込みするためにファイルをソースします。

source ~/.bashrc

WP-CLIを使い始めることができます。

ステップ9 - WordPressのバックアップ

WordPressをバックアップする方法はいくつかあります。最も簡単な方法はプラグインを使用することです。そのためのプラグインはいくつかあります。また、phpMyAdminを使用してバックアップを作成することもできます。

コマンドラインを使用してWordPressデータベースをバックアップすることもできます。WordPressディレクトリに切り替えてください。

cd ~/wordpress

WordPressデータベースをバックアップするには、以下のコマンドを使用してください。MySQLのルートパスワードを求められます。

docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | sudo tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Enter password: password

上記のコマンドは、~/wordpress/wp-data ディレクトリに SQL バックアップを作成します。

ディレクトリの内容を確認してください。

ls -al wp-data
total 908
drwxr-xr-x 2 root   root     4096 Jan 11 10:15 ./
drwxrwxr-x 6 navjot navjot   4096 Jan 11 10:05 ../
-rw-r--r-- 1 root   root   919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql

ディレクトリ内でバックアップされたデータベースを確認できます。このデータベースは、phpMyAdminツールを使用するか、次のコマンドを使用して復元できます。

docker compose exec db sh -c "exec mysql -uroot -p" < wp-data/data_11-01-2023_10_14_40.sql

定期的にデータベースをバックアップするためのcronジョブを作成できます。

/etc/cron.dailyディレクトリにバックアップスクリプトを作成し、編集のために開いてください。

sudo nano /etc/cron.daily/wpbackup.sh

そのコードをそこに貼り付けてください。

#!/bin/bash
docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

スクリプトを実行可能にしてください。

sudo chmod +x /etc/cron.daily/wpbackup.sh

さて、あなたのデータベースは毎日バックアップされます。

ステップ10 - WordPressをアップグレードする

WordPressをアップグレードする最も簡単な方法は、内蔵のアップデーターを使うことです。また、Dockerを使用してアップグレードすることもできます。最初のステップは、ステップ9のコマンドを使用してWordPressデータベースのバックアップを取ることです。

次に、ディレクトリに切り替えます。

cd ~/wordpress

コンテナを止めてください。

docker compose down --remove-orphans

最新のコンテナイメージをプルします。

docker compose pull

docker-compose.ymlに変更を加えたい場合は、どんな変更でも行ってください。

WordPressのコンテナを再起動してください。

docker compose up -d

結論

これでDocker Compose、phpMyAdmin、およびWP-CLIを使用してWordPressをインストールするためのチュートリアルを終了します。質問がある場合は、下のコメントに投稿してください。

関連記事: