WordPressのインストールは大したことではありません。ローカル開発用のLAMPサーバーを使用してインストールできます。現実の世界に向けて、適切な公開されているLinuxサーバーにデプロイすることもできます。
Linode、DigitalOceanなどのクラウドサーバーには、WordPressで事前構成された新しいLinuxサーバーをデプロイするオプションもあります。さらに簡単ですよね?
しかし、単一のサーバーに複数のWordPressをインストールしたい場合はどうでしょうか。
簡単な方法は、ServerPilotのようなサービスを使用することです。サーバーを自動的に更新するだけでなく、同じサーバーに複数のWordPressインスタンスを簡単にデプロイできます。
それにはもう少しお金がかかります。それが望ましくない場合は、Dockerを使用して複数のWordPressインスタンスをデプロイできます。
このガイドでは、個々のコンテナから実行されるデュアルWordPressセットアップを簡単にセットアップし、インスタンスを追加する方法を学びます!
必須ではありませんが、次の場合はチュートリアルを簡単に実行できます。
- 基本的なLinuxコマンドの知識
- Dockerに関するある程度の知識
- DockerComposeの理解
SSLが有効なドメインとサブドメインを使用して、リバースプロキシコンテナの背後にWordPressをデプロイします。
前述のトピックに関する知識とは別に、次のインフラストラクチャ要件が必要になります。
- 一般向けのUbuntuLinuxサーバー 。 Linodeのようなクラウドサービスプロバイダーを使用できます。この展開には、1GBのRAMを備えたNanoサーバーで十分です。ただし、より多くのWordPressインスタンスをセルフホストする予定がある場合は、アップグレードを検討してください。
- ドメイン/サブドメインとそのDNS設定へのアクセス
- LinuxサーバーにインストールされているDockerとDockerCompose。
ヘルプが必要な場合は、次のガイドに従うことができます:
- UbuntuへのDockerのインストール
- UbuntuにDockercomposeをインストールする
- リバースプロキシDockerのセットアップ
Dockerを使用したセルフホスティングWebアプリケーションに基づく他のすべてのチュートリアルでは、NginxコンテナーとWebAppコンテナーを別々にデプロイすることについて説明しました。ただし、今回はDocker Composeを使用して、すべて1つのymlファイルに基づいて複数のWordPressコンテナーを設定します。
したがって、これは、単一のDockerComposeファイルを介してNginx構成をデプロイを検討しているWebアプリと統合する方法を示す例でもあります。
domain.com
を使用します 最初のWordPressブログとwordpress.domain.com
の例として 2番目の自己ホスト型ブログとして。最後に、ここで説明する構成に基づいてWordPressインスタンスを追加する方法についても説明します。
ディレクトリを作成してアクティブにします。それをmulti-wordpress
と呼びましょう 。
mkdir multi-wordpress
次に、cdコマンドを使用してこの新しく作成されたディレクトリに切り替えます。
cd multi-wordpress
WordPressファイルのアップロード制限を512MBに設定
このディレクトリ内に、 uploads.ini
を保存します 最大512MBのサイズのファイルをアップロードするために必要なアップロード構成を持つファイル。ターミナルで次のコマンドを入力します:
[email protected]:~/multi-wordpress$ printf "file_uploads = On\nmemory_limit = 512M\nupload_max_filesize = 512M\npost_max_size = 512M\nmax_execution_time = 600" > uploads.ini
Nginxのファイルアップロード制限を設定します
追加の手段として、client_max_upload_size.conf
というファイルも作成します。 Nginxコンテナにマウントするために同じディレクトリに保存します。そのため、1GBに設定しました。これは、将来的に他のアプリを構成するのに役立ちます。
[email protected]:~/multi-wordpress$ printf "client_max_body_size 1G;" > client_max_upload_size.conf
Nginxを介したWWWリダイレクト(CNAMEの更新は不要)
WordPressでwwwからwwwへのリダイレクト以外を使用する場合は、Linuxサーバーでcatコマンドを使用してリダイレクターを設定できます。
[email protected]:~/multi-wordpress$ cat >> domain.com
rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
Enterキーを押してから、Ctrl+Dを押して保存します。 printf
は使用しませんでした ここでは$1
上記のようにファイルに保存されません。すべての場合にリダイレクトを機能させたいので、これはURLに関する将来の問題につながる可能性があります。例:domain.com/test
常にwww.domain.com/test
にリダイレクトする必要があります 。
Nginxを介した非WWWリダイレクト(CNAMEの更新は不要)
wwwからwww以外のリダイレクトを使用する場合は、同様の手順を繰り返して反対の操作を行います。
[email protected]:~/multi-wordpress$ cat >> www.domain.com
rewrite ^/(.*)$ https://domain.com/$1 permanent;
net
というネットワークを使用します このチュートリアルでは。したがって、次のコマンドで作成します。
docker network create net
単一のdocker-compose.yml
内の次の構成 ファイルを使用すると、リバースプロキシから最後のWordPressコンテナまで、目的に合った6つのコンテナすべてを一度に設定できます。最終的にすべてを1つのファイルにマージする前に、サービスごとに見てみましょう。
Nginxリバースプロキシコンテナ
両方のファイルをマウントしますclient_max_upload_size.conf
およびwww.domain.com
読み取り専用モードで、ネットワークnet
を指定します 手動で作成されました。
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- html:/usr/share/nginx/html
- dhparam:/etc/nginx/dhparam
- vhost:/etc/nginx/vhost.d
- certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf:ro
- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com:ro
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
restart: always
networks:
- net
SSL証明書用のコンテナを暗号化しましょう
rw
を使用していることに注意してください certs
の場合 ro
とは異なりボリューム 前のセクションで。これは、SSL証明書を作成し、生成時にボリュームを適宜更新するために不可欠です。また、Let's Encryptからの通知のデフォルトの電子メールを設定し、同じ「net
」を指定します 」ネットワーク。
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: lets-encrypt-proxy-companion
depends_on:
- "nginx-proxy"
volumes:
- certs:/etc/nginx/certs:rw
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
DEFAULT_EMAIL: [email protected]
restart: always
networks:
- net
公式のWordPressDockerCompose構成に基づいて、以下に示すように必要な環境変数を設定し、内部ネットワークを指定します(mysqldb0
として表示)。 ここでは、サービス名とボリューム名にも使用されます)。
このネットワークは、データベースコンテナとそれに対応するWordPressコンテナにのみ表示されます。デプロイすると、次のような資格情報を使用してMySQLデータベースが作成されます。
mysqldb0:
image: mysql:5.7
environment:
MYSQL_DATABASE: db0
MYSQL_USER: db0user
MYSQL_PASSWORD: secret
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- 'mysqldb0:/var/lib/mysql'
restart: always
networks:
- mysqldb0
WordPressコンテナーをデプロイすると、前のセクションで指定したデータベース構成が使用されます。データベースから見たのと同じ内部ネットワークに加えて(mysqldb0
)、このWordPressサービスは、net
と呼ばれるNginxネットワークも参照する必要があります 外の世界のためのフロントエンドアプリケーションだからです。
wordpress0:
image: wordpress:5.8.0-php8.0-apache
environment:
WORDPRESS_DB_HOST: mysqldb0
WORDPRESS_DB_USER: db0user
WORDPRESS_DB_PASSWORD: secret
WORDPRESS_DB_NAME: db0
WORDPRESS_CONFIG_EXTRA: |
define('AUTOMATIC_UPDATER_DISABLED', true);
VIRTUAL_HOST: domain.com,www.domain.com
LETSENCRYPT_HOST: domain.com,www.domain.com
volumes:
- 'wordpress0:/var/www/html/wp-content'
- './uploads.ini:/usr/local/etc/php/conf.d/uploads.ini'
restart: always
depends_on:
- mysqldb0
networks:
- mysqldb0
- net
この時点で、単一のWordPressインスタンスをセットアップするための構成ができています。さらに設定するには、手順3と4を新しい名前で複製します。
どうぞ:
2番目のWordPressサイトのデータベースコンテナ
mysqldb1:
image: mysql:5.7
environment:
MYSQL_DATABASE: db1
MYSQL_USER: db1user
MYSQL_PASSWORD: secret
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- 'mysqldb1:/var/lib/mysql'
restart: always
networks:
- mysqldb1
wordpress1:
image: wordpress:5.8.0-php8.0-apache
environment:
WORDPRESS_DB_HOST: mysqldb1
WORDPRESS_DB_USER: db1user
WORDPRESS_DB_PASSWORD: secret
WORDPRESS_DB_NAME: db1
WORDPRESS_CONFIG_EXTRA: |
define('AUTOMATIC_UPDATER_DISABLED', true);
VIRTUAL_HOST: wordpress.domain.com
LETSENCRYPT_HOST: wordpress.domain.com
volumes:
- 'wordpress1:/var/www/html/wp-content'
- './uploads.ini:/usr/local/etc/php/conf.d/uploads.ini'
restart: always
depends_on:
- mysqldb1
networks:
- mysqldb1
- net
お気に入りのエディターを使用して、docker-compose.yml
を作成します この時点までに議論されたすべての内容を含むファイル(追加のパラメーターは以下に含まれています)。それに応じて、ドメイン名やその他の資格情報データを編集する必要があります。ここでは、Nanoを使用しました。
nano docker-compose.yml
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- html:/usr/share/nginx/html
- dhparam:/etc/nginx/dhparam
- vhost:/etc/nginx/vhost.d
- certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
restart: always
networks:
- net
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: lets-encrypt-proxy-companion
depends_on:
- "nginx-proxy"
volumes:
- certs:/etc/nginx/certs:rw
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
DEFAULT_EMAIL: [email protected]
restart: always
networks:
- net
mysqldb0:
image: mysql:5.7
environment:
MYSQL_DATABASE: db0
MYSQL_USER: db0user
MYSQL_PASSWORD: secret
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- 'mysqldb0:/var/lib/mysql'
restart: always
networks:
- mysqldb0
wordpress0:
image: wordpress:5.8.0-php8.0-apache
environment:
WORDPRESS_DB_HOST: mysqldb0
WORDPRESS_DB_USER: db0user
WORDPRESS_DB_PASSWORD: secret
WORDPRESS_DB_NAME: db0
WORDPRESS_CONFIG_EXTRA: |
define('AUTOMATIC_UPDATER_DISABLED', true);
VIRTUAL_HOST: domain.com,www.domain.com
LETSENCRYPT_HOST: domain.com,www.domain.com
volumes:
- 'wordpress0:/var/www/html/wp-content'
- './uploads.ini:/usr/local/etc/php/conf.d/uploads.ini'
restart: always
depends_on:
- mysqldb0
networks:
- mysqldb0
- net
mysqldb1:
image: mysql:5.7
environment:
MYSQL_DATABASE: db1
MYSQL_USER: db1user
MYSQL_PASSWORD: secret
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- 'mysqldb1:/var/lib/mysql'
restart: always
networks:
- mysqldb1
wordpress1:
image: wordpress:5.8.0-php8.0-apache
environment:
WORDPRESS_DB_HOST: mariadb1
WORDPRESS_DB_USER: db1user
WORDPRESS_DB_PASSWORD: secret
WORDPRESS_DB_NAME: db1
WORDPRESS_CONFIG_EXTRA: |
define('AUTOMATIC_UPDATER_DISABLED', true);
VIRTUAL_HOST: wordpress.linuxhindi.com
LETSENCRYPT_HOST: wordpress.linuxhindi.com
volumes:
- 'wordpress1:/var/www/html/wp-content'
- './uploads.ini:/usr/local/etc/php/conf.d/uploads.ini'
restart: always
depends_on:
- mysqldb1
networks:
- mysqldb1
- net
volumes:
certs:
html:
vhost:
dhparam:
mysqldb0:
wordpress0:
mysqldb1:
wordpress1:
networks:
mysqldb0:
internal: true
mysqldb1:
internal: true
net:
external: true
各データベースとそれに対応するWordPressコンテナにのみ特定の内部ネットワークを割り当てていることに注意してください。データベースコンテナはNginxnet
を見る必要はありません 通信網。 net
フロントエンドのWordPressコンテナにのみ必要です。
談話に関する前回の記事では、 --volumes-from
を使用しました nginx-proxy
を使用するためのフラグ letsencrypt
を使用したコンテナのボリューム 。同様に、同じフラグに相当するものはvolumes_from
でした 、かなり前にDockerによって削除されました。したがって、docker-compose.yml
内のNginxおよびLet'sEncryptコンテナの共通ボリュームを明示的に指定しました ファイル–つまり、証明書 、 html 、 vhost および/var/run/docker.sock 。
次に、次のdocker-compose
を使用してセットアップをデプロイします 同じmulti-wordpress
からのコマンド 最初に作成したディレクトリ:
docker-compose up -d
次の確認が表示されます:
Creating network "multi-wordpress_mysqldb0" with the default driver
Creating network "multi-wordpress_mysqldb1" with the default driver
Creating volume "multi-wordpress_certs" with default driver
Creating volume "multi-wordpress_html" with default driver
Creating volume "multi-wordpress_vhost" with default driver
Creating volume "multi-wordpress_dhparam" with default driver
Creating volume "multi-wordpress_mysqldb0" with default driver
Creating volume "multi-wordpress_wordpress0" with default driver
Creating volume "multi-wordpress_mysqldb1" with default driver
Creating volume "multi-wordpress_wordpress1" with default driver
Creating multi-wordpress_mysqldb0_1 ... done
Creating nginx-proxy ... done
Creating multi-wordpress_mysqldb1_1 ... done
Creating multi-wordpress_wordpress1_1 ... done
Creating multi-wordpress_wordpress0_1 ... done
Creating lets-encrypt-proxy-companion ... done
最初の2つは内部ネットワークで、次にボリューム、最後にコンテナが続きます。外部ネットワークnet
このチュートリアルの最初に手動で作成したので、すでに存在しています。
しばらく待ちます。インターネットブラウザを開き、www.domain.com
と入力します 。 domain.com
にリダイレクトされます WordPressセットアップウィザードがあなたを待っています:
ご希望の言語を選択し、[続行]をクリックして、サイト管理の申し立てを続行してください。
wordpress.domain.com
の場合 、同じ結果が得られます。既存のコンテナに示されているのと同様の構文に従って、手順5(データベースサービス)と手順6(WordPressサービス)を繰り返すことで、WordPressサイトをさらに追加できます。また、volumes
も忘れずに改訂してください。 およびnetworks
それに応じてYAMLファイルのセクション。
新しいサイトごとに、新しいWordPressコンテナとそれに対応するMySQLデータベースコンテナが作成されます。上記のdocker-compose.ymlファイルに相当するコマンドラインを知りたい場合は、ここで調べることができます。
長期的にWordPressインスタンスを維持するのに役立ついくつかのヒントを次に示します。
リアルタイムでデプロイされているWordPressコンテナのログ(このチュートリアルで説明されている最初のログなど)を確認したい場合は、次のコマンドを実行できます:
docker logs -f multi-wordpress_wordpress0_1
このデプロイメントに関連する他のすべてのコンテナー内で何が起こっているのかをトラブルシューティングまたは学習したい場合は、Dockerログを効率的に使用することが重要になる可能性があります。
クラウド+ローカルアプローチを使用すると、ダウンタイムなしでWordPressボリュームをバックアップおよび復元できます。
--scale
を使用 Docker Composeのフラグを使用すると、最新バージョンのWordPressに基づいて新しいコンテナーを作成できます。完了したら、古いものを削除できます。これにより、ダウンタイムがゼロになります。
この記事がお役に立てば幸いです。ご意見、ご感想、ご提案がございましたら、下のコメント欄でお知らせください。