【UbuntuServer 22.04】Nginx+MariaDB+PHP8.1+php-fpmでwordpressをインストール

Ubuntu Server 22.04にnginx + MariaDB + PHP8.1 + php-fpmの環境でwordpressをインストールする方法です。

インストール工程

下記の工程でUbuntuServer 22.04 LTSにwordpressをインストールしていきます。

  • 80,443ポート通信許可設定
  • nginxインストール
  • MariaDBインストール
  • wordpress用データベース作成
  • phpインストール
  • php-fpm設定
  • wordpressインストール
  • nginx設定
  • wordpress設定
  • Let's Encryptでhttps対応

wordpressをインストールするサーバのホスト名は、事前にDNSに登録してインターネット上で名前解決が出来るようにしておいてください。

80,443ポート通信許可設定

ufwコマンドを使用して、wordpressで使用する「80」「443」番ポートの通信許可設定をファイアウォールに行っていきます。

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw reload

「ufw status」コマンドで設定の確認を行えます。

$ sudo ufw status
Status: active

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

「Action」部分が「ALLOW」となっていれば通信が許可されています。

nginx

「nginx」の公式サイトにあるリポジトリを使用してインストールを行っていきます。

インストール手順は下記ページにまとめてありますので、そちらを参照願います。

【Ubuntu】nginxリポジトリを使用してインストール
【Ubuntu Server 22.04】apt-key addの非推奨に関わるインストール手順変更 apt-key addが非推奨(廃止予定)となったので、Ubuntu Server 22.04からはnginx公式のリポジトリを使用したイ...

MariaDB

MariaDBの公式サイトで提供されているリポジトリを使用してMariaDBをインストールしていきます。

インストール手順は下記ページにまとめてありますので、「インストール」「mysql_secure_installation」の実行、「文字コードの設定」作業を行ってください。

【Ubuntu】MariaDBリポジトリを使ったインストール
UbuntuにMariaDBインストール(MariaDB公式リポジトリを使用) 「Ubuntu Server 20.04」のデフォルトリポジトリにあるMariaDBはバージョンが少し古いので、MariaDB公式リポジトリを使用して新しいバー...

wordpress用データベース作成

wordpressで使用するデータベースを作成します。

MariaDBに「root」ユーザで接続して作業を行います。

$ mysql -u root -p

データベースは下記の書式で作成することが出来ます。

CREATE DATABASE データベース名;

今回は「wordpress」という名前のデータベースを作成していきます。

MariaDB [(none)]> CREATE DATABASE wordpress ;
Query OK, 1 row affected (0.000 sec)

複数のwordpressをインストールしていく予定がある場合は、どのサイトのデータベースなのか判別がつく名前で作成しておくと良いでしょう。

ユーザ作成

下記の書式でwordpress用に作成したデータベースの管理ユーザを作成し、データベースに権限を設定します。

GRANT ALL PRIVILEGES ON データベース名.* TO "作成ユーザ"@"localhost" IDENTIFIED BY "パスワード";

本手順では作成するユーザ名とパスワードは下記の内容で設定を行っていきますが、実際に作業を行う場合はお好きなユーザ名とパスワードを設定してください。

  • ユーザ名 blogadmin
  • パスワード dbpassword

データベースは先ほど作成した「wordpress」を指定しています。

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO "blogadmin"@"localhost" IDENTIFIED BY "dbpassword";
Query OK, 0 rows affected (0.001 sec)

「FLUSH PRIVILEGES」で設定を反映させ、exitコマンドでMariaDBへの接続を終了します。

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> exit
Bye

phpインストール

Ubuntu22.04では標準でPHP8.1がインストールされる仕様となっています。

ですので、今回はPHP8.1を使用してWordpressをインストールするために必要なパッケージをインストールしていきます。

$ sudo apt update
$ sudo apt install php-cli php-mbstring php-pear php-fpm php-mysql php-curl php-dom php-imagick php-zip php-intl

phpがインストールされているかどうかの確認は「php -v」コマンドで確認することが出来ます。

$ php -v
PHP 8.1.2-1ubuntu2.11 (cli) (built: Feb 22 2023 22:56:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.11, Copyright (c), by Zend Technologies

php-fpm 設定

nginxでphp-fpmを使用できるように「/etc/php/8.1/fpm/pool.d/www.conf」を編集します。

$ cd /etc/php/8.1/fpm/pool.d/
$ sudo cp -p www.conf www.conf_`date +%Y%m%d-%H%M%S`
$ sudo vi www.conf

編集内容

下記の項目を初期値のwww-dataからnginxに変更し、listen.modeを0660に編集します。

  • user
  • group
  • listen.owner
  • listen.group
変更前
user = www-data
group = www-data

listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
変更後
user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Listen項目を確認

「www.conf」内の「listen」の項目は「nginx」の設定ファイルを作成する際に必要となるため、設定内容を確認をしておいてください。

listen = /run/php/php8.1-fpm.sock

設定反映

pfp-fpmを再起動して設定の反映を行います。

$ sudo systemctl restart php8.1-fpm

nginx設定

「nginx」で「wordpress」用の設定を作成していきます。

まずはhttpでの接続用設定を作成して、wordpressのインストールと動作確認を行い、その後に「Let's Encrypt」でSSLの証明書の取得とhttps用の設定を追加していきます。

今回は作成する設定ファイルの名前をvpslife.server-memo.net.confとしていますが、拡張子を.confとする以外は特に決まりはないので自分でわかりやすい名前で作成してください。

$ cd /etc/nginx/conf.d
$ sudo vi vpslife.server-memo.net.conf

設定内容

「server_name」部分にはwordpressのサーバ名、「root」部分には wordpressのデータがあるディテクトリを設定します。

「fastcgi_pass unix:」の部分は「php-fpm」の設定ファイル「www.conf」で設定されている「listen = /run/php/php8.1-fpm.sock」に合わせてください。

server {
    listen 80;
    server_name ホスト名;
    root /usr/share/nginx/vpslife;
    index index.php;
   
    charset utf-8;
   
# wordpress パーマネントリンク設定
  try_files $uri $uri/ /index.php?q=$uri&$args;
   
# wp-config.phpへのアクセス拒否設定
  location ~* /wp-config.php {
    deny all;
  }
   
# php-fpm用設定
  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }
}

設定反映

nginxの再起動し設定反映を行います。

$ sudo nginx -t
$ sudo systemctl restart nginx

Wrodpressインストール

wordpressのインストールを行っていきます。

ダウンロードと解凍

「/usr/share/nginx/」ディレクトリに最新のwordpress(latest-ja.tar.gz)をダウンロードし解凍します。

ダウンロードしたlatest-ja.tar.gzの解凍を行うと、wordpressというディレクトリが作成されるので所有者の情報をnginxに変更します。

その後、nginxでroot部分に設定したディレクトリの名前に変更します。

$ cd /usr/share/nginx/
$ sudo curl -O https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar xzfv latest-ja.tar.gz
$ sudo chown -R nginx:nginx wordpress
$ sudo mv wordpress vpslife

wp-config.php設定

wordpressの設定ファイルであるwp-config.phpを作成して、下記の設定を行います。

  • データベースへの接続情報
  • テーブル作成時の文字コード
  • 認証用ユニークキー
$ cd vpslife
$ sudo cp -p wp-config-sample.php wp-config.php
$ sudo vi wp-config.php 

設定項目

今回の手順では下記のような設定となります。

  • データベース名: wordpress
  • データベースの管理ユーザ名: blogadmin
  • パスワード: dbpassword
  • テーブル作成時の文字セット: utf8mb4

認証用ユニークキーの部分は下記の自動生成用URLにアクセスして表示されたものをコピペします。

https://api.wordpress.org/secret-key/1.1/salt/

設定内容

実際に設定を行う部分は下記と項目なります。

/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wordpress' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'blogadmin' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'dbpassword' );

/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );

/**#@+
 * 認証用ユニークキー
 *
 * それぞれを異なるユニーク (一意) な文字列に変更してください。
 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。
 *
 * @since 2.6.0
 */
自動生成URLにアクセスし生成されたものをコピペします

初期セットアップ

wp-config.phpの設定が終わりましたら、下記のURLにアクセスしてwordpressの初期設定を行います。

http://ホスト名/wp-admin/install.php

「ようこそ」画面が表示されるので、下記の項目を設定したあとにwordpressをインストールをクリックします。

  • サイトのタイトル
  • ユーザ名
  • パスワード
  • メールアドレス
  • インストール完了画面が表示されるので、作成したユーザ名を確認してログインをクリックします。

    動作確認

    wordpress管理画面へのログイン画面が表示されていると思いますので、初期セットアップで設定したユーザ名とパスワードを入力してログインボタンをクリックしてログインします。

    ログイン画面は下記のURLにアクセスすることでも表示させることができます。

    http://ホスト名/wp-admin
    

    ダッシュボードが表示されるので、左側のメニューから「ツール」-「サイトヘルス」と選択して、サイトヘルスのステータスを確認し良好と表示されているか確認します。

    これでwordpressのインストールと動作確認は完了となりますので、次はhttpsで接続できるように設定を行っていきます。

    Let's Encryptでhttps対応

    httpでwordpressの動作確認ができたら、Let's Encryptで無料のSSL証明書を発行してもらいサイトをhttps対応していきます。

    certbotインストール

    Let's EncryptでSSL証明書を発行してもらうには、certbotというアプリケーションを使用します。

    今回はnginxをwebサーバとして使用するので、nginx用のcertbotインストールしていきます。

    $ sudo apt install certbot python3-certbot-nginx
    

    証明書の発行依頼

    SSL証明書の発行依頼は下記のコマンドで行います。

    • ホスト名 wordpressを公開するサーバ名を設定
    • メールアドレス Let's Encryptからの通知を受け取るメールアドレスを設定
    $ sudo certbot --nginx -d ホスト名 -m メールアドレス --agree-tos
    

    コマンドを実行してSSL証明書の発行依頼を行うと、SSL証明書を取得すると同時にnginxの設定ファイルにhttps通信用の設定が自動で追記されます。

    certbotコマンド実行

    今回は下記の内容でcertbotを実行し、SSL証明書の取得を行っていきます。

    • ホスト名: vpslife.server-memo.net
    • メールアドレス: tamohiko@server-memo.net

    certbot実行すると途中でLets EncryptのパートナーであるElectronic Frontierとメールアドレスを共有しても良いかの質問されますが、共有してもしなくてもどちらでも特に問題はありませんので、好きな方を入力してください。

    • 共有させる場合は「y」を入力
    • 共有させたくない場合は「n」を入力
    $ sudo certbot --nginx -d vpslife.server-memo.net -m tamohiko@server-memo.net --agree-tos
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Would you be willing, once your first certificate is successfully issued, to
    share your email address with the Electronic Frontier Foundation, a founding
    partner of the Let's Encrypt project and the non-profit organization that
    develops Certbot? We'd like to send you email about our work encrypting the web,
    EFF news, campaigns, and ways to support digital freedom.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    (Y)es/(N)o: n  # メールアドレスの共有は許可しないのでnを入力
    Account registered.
    Requesting a certificate for vpslife.server-memo.net
    
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/vpslife.server-memo.net/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/vpslife.server-memo.net/privkey.pem
    This certificate expires on 2023-06-23.
    These files will be updated when the certificate renews.
    Certbot has set up a scheduled task to automatically renew this certificate in the background.
    
    Deploying certificate
    Successfully deployed certificate for vpslife.server-memo.net to /etc/nginx/conf.d/vpslife.server-memo.net.conf
    Congratulations! You have successfully enabled HTTPS on https://vpslife.server-memo.net
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you like Certbot, please consider supporting our work by:
     * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
     * Donating to EFF:                    https://eff.org/donate-le
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    

    これでSSLの証明書が発行され、nginxの設定ファイルにhttps接続用の設定が追記されます。

    証明書の保管場所

    発行されたSSL証明書は下記の場所に保管されます。

    • 証明書:/etc/letsencrypt/live/ホスト名/fullchain.pem
    • 秘密鍵:/etc/letsencrypt/live/ホスト名/privkey.pem

    nginx設定ファイルに追記されたhttps用設定について

    nginxのwordpress用設定ファイルを確認すると、certbotが追記したhttps用の設定部分には「# managed by Certbot」と表示されているので確認してみてください。

    server {
      server_name vpslife.server-memo.net;
      root /usr/share/nginx/vpslife;
      index index.php;
      charset utf-8;
    
    # wordpress パーマネントリンク設定  
      try_files $uri $uri/ /index.php?q=$uri&$args;
    
    # wp-config.phpへのアクセス拒否設定  
      location ~* /wp-config.php {
        deny all;
      }
    
    # php-fpm用設定  
      location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        include fastcgi_params;
      }
    
    # xmlrpc.php無効化設定
      location = /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
        return 444;
      }
    
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/vpslife.server-memo.net/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/vpslife.server-memo.net/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    
    server {
        if ($host = vpslife.server-memo.net) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
      listen 80;
      server_name vpslife.server-memo.net;
        return 404; # managed by Certbot
    
    }
    

    設定反映

    設定ファイルが作成されたら、nginxを再起動して設定を反映させます。

    $ sudo nginx -t
    $ sudo systemctl restart nginx
    

    あとはhttpsでwordpressに接続できるかの確認を行ってみて、問題がなければhttps対応作業は完了となります。

    wordpressアドレス設定変更

    wordpressの管理画面にログインし、左側のメニューから「設定」-「一般」とクリックすると、一般設定の画面が表示されるので、「WordPress アドレス (URL)」と「サイトアドレス (URL)」に設定されているURLの「http://」部分を「https://」に変更して、画面の下にある「変更を保存」ボタンをクリックしてください。

コメント

  1. nobby より:

    ubuntu22.04, nginx, php-fpm, letsencryptというセットで解説されたサイトがなかなか見つからなかったのですが、ついに発見しました。情報ありがとうございました。

    • tamohiko より:

      nobbyさん
      コメントありがとうございます。

      お役に立てたのでしたらなによりです!

タイトルとURLをコピーしました