Docker Compose で WordPress をインストールする方法
このチュートリアルは、これらの OS バージョン用に存在します
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 16.04 (Xenial Xerus)
このページでは
- 前提条件
- ステップ 1 - ファイアウォールを構成する
- ステップ 2 - Docker と Docker Compose をインストールする
- ステップ 3 - WordPress 用の Docker Compose ファイルを作成する
- ステップ 4 - Nginx の Docker Compose を更新する
- ステップ 5 - SSL 用に Docker Compose を更新する
- ステップ 6 - WordPress を起動してインストールする
- ステップ 7 - PhpMyAdmin にアクセスする
- ステップ 8 - WP-CLI にアクセスする
- ステップ 9 - WordPress のバックアップ
- ステップ 10 - WordPress をアップグレードする
- 結論
WordPress は、世界で最も人気のあるブログ プラットフォームです。シェル コマンド、スクリプトを使用した手動インストール、または一般的な Web ホストが提供する Web インストーラーの使用など、WordPress をインストールする方法はたくさんあります。 WordPress を実行するには、LAMP (Linux、Apache、MySQL、および PHP) または LEMP (Linux、Nginx、MySQL、および PHP) スタックをインストールする必要があります。
このチュートリアルでは、Docker/Docker Compose を使用して WordPress をインストールする方法を説明します。 Docker を使用すると、優先スタックをインストールするプロセスがはるかに簡単になります。同じ構成を使用して、WordPress を複数のサーバーにすばやくインストールできます。また、データベースを管理するための phpMyAdmin ツールと、SSL 経由でサイトを提供するための Nginx プロキシ サーバーもインストールします。
前提条件
-
A Linux server with a non-root user having sudo privileges. We are using a server running Ubuntu 22.04 for our tutorial.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
example.com
as the domain name for the WordPress site andphpmyadmin.example.com
for the phpMyAdmin website. -
Make sure everything is updated.
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ 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 Mon 2023-01-09 13:19:16 UTC; 9s ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1863 (dockerd) Tasks: 7 Memory: 20.5M CPU: 278ms CGroup: /system.slice/docker.service ??1863 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
デフォルトでは、Docker には root 権限が必要です。 docker
コマンドを実行するたびに sudo
を使用したくない場合は、ユーザー名を docker
に追加してください。 > グループ。
$ sudo usermod -aG docker $(whoami)
この変更を有効にするか、次のコマンドを使用するには、サーバーからログアウトして同じユーザーとして再度ログインする必要があります。
$ su - ${USER}
ユーザーが Docker グループに追加されていることを確認します。
$ groups navjot wheel docker
ステップ 3 - WordPress 用の Docker Compose ファイルを作成する
WordPress 設定用のディレクトリを作成します。
$ mkdir wordpress
ディレクトリに切り替えます。
$ cd wordpress
編集用に Docker 構成ファイルを作成して開きます。
$ nano docker-compose.yml
その中に次のコードを貼り付けます。
version: '3.9' 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 を入力して、ファイルを保存します。
プルしている 2 つの WordPress イメージがあります。 1 つは Web サイト用で、もう 1 つは WP-CLI ツール用です。どちらのイメージも MySQL 8.0 Docker イメージに依存しています。ここでは、データベース資格情報の環境変数を設定します。両方のコンテナー用に 2 つのボリュームを作成しました。そのうちの 1 つは WordPress サイトの公開ファイルを指し、2 つ目はカスタム PHP.ini の場所を指します。 Nginx 仮想ホスト ドメインの環境変数と、WordPress サイトの SSL ドメインを暗号化することも定義しました。
さらに環境変数を追加し、カスタム wp-config.php
データを Docker ファイルに追加できます。 WordPress の DockerHub ページから、追加の環境変数について学ぶことができます。
次のイメージは、同じ MySQL イメージに依存し、root パスワードを使用して接続する phpMyAdmin 用です。アップロードの上限は 50MB です。要件とデータベースのサイズに応じて変更できます。 WordPress サイトと同様に、Nginx 仮想ホスト ドメインを定義し、phpMyAdmin サイトの SSL ドメイン名を暗号化します。
最後の画像は MySQL データベース用です。デフォルトの認証方法と文字セットを設定するために、いくつかのコマンドを渡しました。また、データを保存するためのボリュームもいくつか作成しました。データベース資格情報の環境変数も設定しました。
次のステップは、構成ファイルで使用される変数の環境ファイルを作成することです。編集用の環境ファイルを作成して開きます。
$ 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 構成ファイルを再度開きます。
$ 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:
Ctrl + X を押し、プロンプトが表示されたら Y を入力して、ファイルを保存します。
ここでは、Nginx プロキシと連携して動作する Acme コンパニオン Docker イメージをプルしています。 Nginx コンテナーからボリュームをプルします。 SSL の暗号化に関するすべての構成を格納する acme.sh ツールのボリュームも定義します。最後に、環境変数を定義して SSL 証明書を Lets Encrypt に登録します。
ステップ 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 にアクセスする
URL https://phpmyadmin.example.com
から phpMyAdmin にアクセスできます。
ユーザー名として 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 root パスワードを求められます。
$ 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
上記のコマンドは、SQL バックアップを ~/wordpress/wp-data
ディレクトリに作成します。
ディレクトリの内容を確認してください。
$ 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 をインストールするチュートリアルは終了です。質問がある場合は、以下のコメントに投稿してください。