Ubuntu で、既存WordPress環境に別のWordPressシステムを追加構築する(Apache2 VirtualHost利用)

Ubuntu 24.04 LTS上で稼働する既存WordPress環境に、Apache2 VirtualHostを用いて別のドメインで新しいWordPressシステムを追加構築する手順を解説する。PHP 8.3とMariaDBに対応し、データベース設定、ダウンロード、配置、Apache設定、WordPressインストール、Let's EncryptによるSSL化までを網羅する。

方針:1つの Ubuntu マシン(IPアドレスは1つ)に、異なる2つのホスト名(例: www.example.com と www.hoge-client.com)を割り当てる。そのためのドメイン名取得と DNS サーバ設定は、前もって済ませておく必要がある。 そして、Webサーバ(Apache2)の側では、リクエストされたホスト名(ServerName または ServerAlias)に応じて、表示するコンテンツのディレクトリを切り替えるように設定する。 ホスト名によってディレクトリを変えるために Apache2 の VirtualHost 機能を使う。 あとは、それぞれのディレクトリに別の WordPress システムをインストールする手順を説明する。

このページでは、すでに WordPress が動いている Ubuntu マシンで、そのWordPressの設定などには手を加えずに、新しくWordPressシステムを追加で動かす手順を説明する。ここでの追加インストールに関する設定は次の通りである。

目次:

関連する外部ページ

前準備

DNS サーバ

DNS サーバに、WordPressをインストールするホスト名について登録しておく必要がある。ドメイン名は前もって取得しておく必要がある(以下のホスト名は例なので、そのまま使用できないことに注意する)。テスト環境では、クライアントマシンの `/etc/hosts` ファイルを編集して名前解決を行うことも検討できる。

システム、パッケージの更新

端末を開き、次のように操作する(端末を開くには右クリックメニューが便利である)。システム更新は、セキュリティパッチを適用しシステムの安定性を確保するために定期的に実行することが重要である。

# パッケージリストの情報を更新
sudo apt update
sudo apt -yV upgrade

Apache2, MariaDB のインストール

Ubuntu での Apache2, MariaDB のインストール手順は、 別ページで説明している。

PHPのインストールと設定

WordPressはPHPで動作するため、PHP本体および必要な拡張モジュールをインストールする必要がある。Ubuntu 24.04 LTSではPHP 8.3が標準でインストールされ、最新のWordPressはこのバージョンで完全に動作する。WordPressが必要とする推奨拡張機能には、curl、dom、exif、fileinfo、gd、imagick、mbstring、mysqli、openssl、xml、zip などがある。

sudo apt update
sudo apt install -y php libapache2-mod-php php-mysql php-gd php-curl php-xml php-mbstring php-zip php-soap php-intl

インストール後、ApacheがPHPファイルを処理できるように、必要なモジュールが有効化されていることを確認し、設定を調整する。通常、libapache2-mod-phpのインストールにより自動で有効化されるが、念のため確認する。

sudo a2enmod php8.3 # Ubuntu 24.04の場合
sudo systemctl restart apache2

また、DirectoryIndexの設定で index.php が index.html より優先されるように設定されていることを確認する。これは通常、`/etc/apache2/mods-enabled/dir.conf` で設定されている。

# /etc/apache2/mods-enabled/dir.conf の例

        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

WordPress用データベースの新規作成

  1. 端末を開く。
  2. MariaDB にログインする。

    sudo mysql -u root -p
    # (Ubuntu のパスワードを入れる)
    
  3. WordPress用のデータベースとユーザーを作成するコマンドを実行する。

    データベース名: added_database

    データベースのキャラクタセット: utf8mb4_general_ci (utf8mb4_general_ci のコレーションを使用することで、すべての文字(絵文字を含む)を正しく格納できる)

    ユーザー名: added_dbuser

    「[PASSWORD]」のところは適切にパスワードを設定する。WordPress用にMariaDBデータベースを作成する際のベストプラクティスは、サイトごとに個別のデータベースユーザーを作成し、最小権限の原則を適用することである。ここでは簡便化のため `grant all privileges` を使用する。

    create database added_database character set utf8mb4 collate utf8mb4_general_ci;
    create user 'added_dbuser'@'localhost' identified by '[PASSWORD]';
    grant all privileges on added_database.* TO 'added_dbuser'@'localhost';
    flush privileges;
    exit;
    

WordPress用データベースのダウンロードと設定

  1. WordPress の Web ページを開く。

    https://wordpress.org

  2. Download WordPress」をクリックする。
  3. 最新版をダウンロードする。
  4. zip ファイルのダウンロードが始まる。ファイル名とディレクトリ名を確認する。
  5. ダウンロードした WordPress の zip ファイルを展開(解凍)し、適切なディレクトリに配置する。

    以下のコマンドを実行する。「`wordpress-*.zip`」の部分は、先ほどダウンロードしたファイル名に読み替える必要がある。また、WordPress用のディレクトリ権限はwww-dataユーザーに設定し、chmod 755で適切なアクセス権を付与することでセキュリティとパフォーマンスのバランスを保つ。

    unzip wordpress-*.zip
    sudo mv wordpress /var/www/html/added
    sudo chown -R www-data:www-data /var/www/html/added
    sudo chmod -R 755 /var/www/html/added
    
  6. Apache2 の VirtualHost 設定ファイル /etc/apache2/sites-available/added-wordpress.conf を新規作成する。

    複数のサイトを1つのサーバー上で効率的に管理するためにVirtualHost設定を利用する。サイトごとにServerName、ServerAlias、DocumentRootを個別に指定する必要がある。「hoge-client.com」と 「www.hoge-client.com」のところは、サイト名に合わせて設定する。`` セクションで `AllowOverride All` を設定することで、WordPress固有の.htaccessファイル機能(パーマリンク設定など)が正常に動作するようになる。

    
         ServerAdmin webmaster@localhost
         DocumentRoot /var/www/html/added
         ServerName hoge-client.com
         ServerAlias www.hoge-client.com
    
         /var/www/html/added>
            Options +FollowSymlinks
            AllowOverride All
            Require all granted
         
    
         ErrorLog ${APACHE_LOG_DIR}/added-error.log
         CustomLog ${APACHE_LOG_DIR}/added-access.log combined
    
    
  7. /etc/apache2/sites-available/added-wordpress.conf を有効化し、Apache の rewrite モジュールを有効化する。

    a2enmod コマンドで rewrite モジュールを有効化する必要があり、これにより WordPress のパーマリンク機能が正常に動作する。

    sudo a2ensite added-wordpress.conf
    sudo a2enmod rewrite
    sudo systemctl restart apache2.service
    

    設定を反映する前に、`sudo apache2ctl configtest` コマンドで設定ファイルの構文エラーがないかテストすることを推奨する。これにより、設定エラーによるサーバーのダウンタイムを防ぐことができる。複数のWordPressサイトを同じサーバーで運用する場合、サイトごとにエラーログと各種ログファイルを分けて設定することで、トラブルシューティングが容易になる。

  8. Apache2 の動作確認を行う。

    Web ブラウザで VirtualHost 設定で指定した ServerName または ServerAlias のホスト名、例えば http://www.hoge-client.com を開く。WordPress の初期設定画面が表示されれば、Apache2 の設定は正しく機能している。

    確認したら Web ブラウザを閉じる

  9. wp-config.php の設定を行う。
    1. サンプルファイルのコピー

      ダウンロードした WordPress ディレクトリにある `wp-config-sample.php` をコピーし、`wp-config.php` という名前に変更して保存する。

      sudo cp /var/www/html/added/wp-config-sample.php /var/www/html/added/wp-config.php
      
    2. /var/www/html/added/wp-config.php を編集し、データベース接続情報を書き換える。

      「[PASSWORD]」のところは、MariaDB ユーザー作成時に設定したパスワードをそのまま書く。DB_CHARSET および DB_COLLATE は utf8mb4 と utf8mb4_general_ci を指定する。WordPress設定ファイル(wp-config.php)では、データベーステーブルプレフィックスをデフォルトの「wp_」から変更することでセキュリティが向上する。この変更は `wp-config.php` 内の `$table_prefix` の値を修正することで行う。

      // ** MySQL settings - You can get this info from your web host ** //
      /** The name of the database for WordPress */
      define('DB_NAME', 'added_database');
      
      /** MySQL database username */
      define('DB_USER', 'added_dbuser');
      
      /** MySQL database password */
      define('DB_PASSWORD', '[PASSWORD]');
      
      /** MySQL hostname */
      define('DB_HOST', 'localhost');
      
      /** Database charset to use in creating database tables. */
      define('DB_CHARSET', 'utf8mb4');
      
      /** The Database Collate type. Don't change this if in doubt. */
      define('DB_COLLATE', 'utf8mb4_general_ci');
      
      /* その他の設定は必要に応じて調整する */
      
      /**
       * WordPress Database Table prefix.
       *
       * You can have multiple installations in one database if you give each
       * a unique prefix. Only numbers, letters, and underscores please!
       */
      $table_prefix = 'wp_'; // デフォルト値。セキュリティ向上のため変更推奨
      
      

      ※ WordPress のバージョンによっては `wp-config-sample.php` に DB_CHARSET や DB_COLLATE の定義が含まれていない場合があるため、その際は上記のように追記する。

WordPress のインストール

  1. Web ブラウザで Apache2 の動作確認で開いた URL(例: http://www.hoge-client.com)を再度開く。
  2. WordPress の初期設定画面が表示されるので、「日本語」を選び、「続ける」をクリックする。
  3. サイトのタイトル、WordPress のユーザー名、パスワード、電子メールアドレスなどを設定し、「WordPress をインストール」をクリックする。WordPress は定期的なメールを送信するため、後でサイト固有の SMTP 設定を行うか、専用のプラグインを使用して送信設定を適切に行うことを検討する。
  4. 「成功しました!」と表示されるので確認する。「ログイン」をクリックしてログイン画面に進む。
  5. いま設定したユーザー名とパスワードで WordPress の管理画面にログインする。
  6. ダッシュボードが表示されることを確認する。これで WordPress のインストールは完了である。WordPressのファイルアップロード上限サイズを変更する必要がある場合は、php.iniファイルのupload_max_filesizeとpost_max_sizeの両方の値を調整する必要がある。

Let's Enctypt に関する設定

https://websiteforstudents.com/install-wordpress-on-ubuntu-16-04-17-10-18-04-with-apache2-mariadb-php-7-2-and-lets-encrypt-ssl-tls/

  1. 端末を開く。
  2. Let's Encrypt を利用するための Certbot パッケージをインストールする。Ubuntu 24.04 LTSでは certbot と python3-certbot-apache パッケージを使用する。

    sudo apt update
    sudo apt install -y python3-certbot-apache
    
  3. SSL/TLS 証明書を取得する。

    hoge-client.com」と 「www.hoge-client.com」のところは、サイト名に合わせて設定する。Certbot は Apache プラグインを使用して、既存の Apache 設定を自動的に修正し、SSL 設定(VirtualHost *:443 の追加など)と HTTP から HTTPS へのリダイレクト設定を挿入する。バーチャルホストのSSL設定を適切に行うには、HTTP(ポート80)とHTTPS(ポート443)の両方のVirtualHost設定が必要である。コマンド実行中に、リダイレクト設定などについて質問されることがあるので、適切に回答する。HTTPSへのリダイレクトとwww/非wwwドメインのリダイレクトを組み合わせる場合、Apache設定とWordPress設定の両方を一貫させる必要がある。CertbotのApacheプラグインはHTTPSリダイレクトを自動的に設定するが、その後のカスタマイズが必要な場合は、作成された-le-ssl.confファイルを編集する。

    sudo certbot --apache -m admin@hoge-client.com -d hoge-client.com -d www.hoge-client.com
    
  4. Certbot によって生成または修正された設定ファイルを確認する。

    Certbotは、通常、`/etc/apache2/sites-available/` に `-le-ssl.conf` というサフィックスが付いたSSL用のVirtualHost設定ファイル(HTTPS、ポート443用)を生成する。ファイル名はサイト名によって異なる場合がある。生成されたファイルの内容を確認する。以下はその内容の例である。

    # /etc/apache2/sites-available/hoge-client.com-le-ssl.conf の設定例
    
    
         ServerAdmin webmaster@localhost
         DocumentRoot /var/www/html/added
         ServerName hoge-client.com
         ServerAlias www.hoge-client.com
    
         /var/www/html/added>
            AllowOverride All
            Require all granted
         
         ErrorLog ${APACHE_LOG_DIR}/added-error.log
         CustomLog ${APACHE_LOG_DIR}/added-access.log combined
    
    SSLCertificateFile /etc/letsencrypt/live/hoge-client.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hoge-client.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    
    
    

    また、元の `added-wordpress.conf` (HTTP、ポート80用)には、CertbotによってHTTPからHTTPSへのリダイレクト設定が追記されているはずである。

    # /etc/apache2/sites-available/added-wordpress.conf にCertbotが追記した内容例
    
         ServerAdmin webmaster@localhost
         DocumentRoot /var/www/html/added
         ServerName hoge-client.com
         ServerAlias www.hoge-client.com
    
         /var/www/html/added>
            AllowOverride All
            Require all granted
         
    
         ErrorLog ${APACHE_LOG_DIR}/added-error.log
         CustomLog ${APACHE_LOG_DIR}/added-access.log combined
    
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =hoge-client.com [OR]
    RewriteCond %{SERVER_NAME} =www.hoge-client.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    
    
  5. 証明書の更新テストを行う。

    次のコマンドを実行する。これはテスト実行であり、実際に証明書が更新されるわけではない。

    sudo certbot renew --dry-run
    
  6. 月に1回の自動更新を設定する。

    SSLの自動更新はcertbotパッケージに含まれるsystemdタイマーによって処理されることが一般的であるため、多くの環境で手動でのCron設定は不要である。念のため、以下のコマンドで自動更新タイマーの状況を確認することができる。

    systemctl status certbot.timer
    

    もし systemd タイマーが動作していない環境や、手動で Cron 設定を行いたい場合は、「sudo crontab -e」を実行し、次の行を追加する。これにより、毎月1日午前1時に自動で証明書更新が試行される。

    0 1 * * * /usr/bin/certbot renew &> /dev/null