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

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

方針: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 サーバ

WordPressをインストールするホスト名を、DNS サーバに登録しておく必要がある。ドメイン名は前もって取得しておく(以下のホスト名は例であり、そのままでは使用できない)。テスト環境では、クライアントマシンの `/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 が推奨する PHP バージョン(8.3 以上)を満たす。WordPress が推奨する拡張機能には、curl、dom、exif、fileinfo、gd、imagick、intl、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-intl php-imagick

インストール後、ApacheがPHPファイルを処理できるように、PHPモジュールが有効になっていることを確認する。libapache2-mod-php のインストールで自動的に有効化されるが、次のコマンドで確認できる。

sudo a2enmod php8.3
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 にログインする。

    MariaDB の root は Unix ソケット認証のため、sudo で起動する(パスワードを求められた場合は Ubuntu のパスワードを入れる)。

    sudo mysql -u root
    
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  3. WordPress用のデータベースとユーザーを作成する。

    データベース名: added_database

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

    ユーザー名: added_dbuser

    「[PASSWORD]」のところは適切なパスワードを設定する。権限は、そのデータベースに対してのみ与える。

    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;
    
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*

WordPress のダウンロードと配置、設定

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

    https://wordpress.org

  2. Download WordPress」をクリックする。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  3. 最新版をダウンロードする。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  4. zip ファイルのダウンロードが始まる。ファイル名とディレクトリ名を確認する。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  5. ダウンロードした WordPress の zip ファイルを展開し、ディレクトリに配置する。

    以下のコマンドを実行する。「`wordpress-*.zip`」の部分は、ダウンロードしたファイル名に読み替える。所有者は Apache2 の実行ユーザである www-data とし、ディレクトリは 755、ファイルは 644 とする。

    unzip wordpress-*.zip
    sudo mv wordpress /var/www/html/added
    sudo chown -R www-data:www-data /var/www/html/added
    sudo find /var/www/html/added -type d -exec chmod 755 {} \;
    sudo find /var/www/html/added -type f -exec chmod 644 {} \;
    
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  6. Apache2 の VirtualHost 設定ファイル /etc/apache2/sites-available/added-wordpress.conf を新規作成する。

    1つのサーバー上で複数のサイトを運用するために VirtualHost を使う。サイトごとに ServerName、ServerAlias、DocumentRoot を指定する。「hoge-client.com」と「www.hoge-client.com」のところは、サイト名に合わせて設定する。`` セクションで AllowOverride All を設定すると、.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
    
    

    サイトごとにエラーログとアクセスログのファイルを分けておくと、問題が起きたときの切り分けが容易になる。

    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  7. 設定ファイルの構文をテストする。

    次のコマンドで、設定ファイルの構文エラーの有無を確認する。「Syntax OK」と表示されれば問題ない。

    sudo apache2ctl configtest
    
  8. /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
    
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  9. Apache2 の動作確認を行う。

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

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

    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  10. 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
      
      *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
    2. /var/www/html/added/wp-config.php を編集し、データベース接続情報を書き換える。

      「[PASSWORD]」のところは、MariaDB ユーザー作成時に設定したパスワードを書く。DB_CHARSET には utf8mb4、DB_COLLATE には utf8mb4_general_ci を指定する。$table_prefix はデータベーステーブルの接頭辞であり、1つのデータベースに複数のWordPressを共存させるときに区別のために使う。

      // ** 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 の定義が含まれていない場合がある。その場合は上記のように追記する。

      ※ `wp-config.php` には認証用ユニークキー(AUTH_KEY など)の項目がある。https://api.wordpress.org/secret-key/1.1/salt/ で生成された値に置き換える。

      *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*

WordPress のインストール

  1. Web ブラウザで Apache2 の動作確認で開いた URL(例: http://www.hoge-client.com)を再度開く。
  2. WordPress の初期設定画面が表示されるので、「日本語」を選び、「続ける」をクリックする。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  3. サイトのタイトル、WordPress のユーザー名、パスワード、電子メールアドレスを設定し、「WordPress をインストール」をクリックする。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  4. 「成功しました!」と表示されるので確認する。「ログイン」をクリックしてログイン画面に進む。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  5. いま設定したユーザー名とパスワードで WordPress の管理画面にログインする。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  6. ダッシュボードが表示されることを確認する。これで WordPress のインストールは完了である。
    *(⚠️ link removed: this file was never actually generated — ask me to produce it again)*
  7. ファイルアップロードの上限サイズを変更する場合は、php.ini(Ubuntu 24.04 では /etc/php/8.3/apache2/php.ini)の upload_max_filesizepost_max_size の両方を変更し、Apache2 を再起動する。
    sudo systemctl restart apache2
    

Let's Encrypt に関する設定

  1. 端末を開く。
  2. Let's Encrypt を利用するための Certbot をインストールする。Ubuntu 24.04 LTS では certbot と python3-certbot-apache パッケージを使用する。
    sudo apt update
    sudo apt install -y certbot python3-certbot-apache
    
  3. SSL/TLS 証明書を取得する。

    hoge-client.com」と「www.hoge-client.com」のところは、サイト名に合わせて設定する。Certbot は Apache プラグインを使用して、SSL 用の VirtualHost(ポート443)の設定と、HTTP から HTTPS へのリダイレクト設定を自動で追加する。コマンド実行中に、リダイレクト設定などについて質問されるので回答する。証明書の取得には、指定したホスト名がこのサーバのIPアドレスに解決され、ポート80が外部から到達できる必要がある。

    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/added-wordpress-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用)には、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]
    
    

    HTTPS化した後は、WordPress 管理画面の「設定」→「一般」にある WordPress アドレスとサイトアドレスを、https:// で始まる URL に変更する。

  5. 証明書の更新テストを行う。

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

    sudo certbot renew --dry-run
    
  6. 自動更新の設定を確認する。

    証明書の自動更新は、certbot パッケージに含まれる systemd タイマーで処理されるため、Cron の設定は不要である。次のコマンドでタイマーの状態を確認できる。

    systemctl status certbot.timer