この記事では、LinuxにいちからWordPressをインストールする手順を詳しく解説していきます。インストールは一番原始的な方法で行います。つまりサーバーに必要なパッケージをインストールしてデータベースも自分でセットアップします。
最近のレンタルサーバーでは簡単にWordPressをセットアップできるようになっていますが、このようなツールは詳細を隠してしまいます。原始的な方法でインストールすることは、WordPressが実際どうのように構成されているのか知ることができ、より一層理解が深まります。
原始的な方法と聞くと難しそうに思えるかもしれませんが、誰でもできるように詳しく解説していきますので心配しないでください。
サーバーの要件を確認する
WordPressをインストールするにあたり、インストールするサーバーの要件を確認しておきましょう。WordPressのバージョンによって要件は異なりますので、インストールするときに必ず確認します。
今回インストールするWordPress 6.2.2 の要件は次のとおりでした。
- PHP 7.4 以上
- MySQL 5.7 以上または MariaDB 10.3 以上
Webサーバ(ApacheまたはNginx)は要件に含まれていませんが、通常は利用します。バージョンは特に指定されていないので、PHPが動作するバージョンであれば問題ないでしょう。
なお、この記事では次の環境でWordPressをインストールします。
- WordPress 6.2.2(日本語版)
- AlmaLinux 9.2
- PHP 8.0
- MySQL 8.0
- Apache 2.4
ここではLinuxとしてCentOSの後継として有力なAlmaLinuxを使います。CentOSは今後、新しいバージョンがリリースされないので、将来性のあるLinuxディストリビューションを使います。AlmaLinuxは、CentOS同様にRed Hat Enterprise Linux(RHEL)互換のOSです。
OSとミドルウェアのセットアップ
OSの設定変更やミドルウェアのインストールなどを実施していきます。用意したサーバーで既に実施済みのものがあれば読み飛ばしてください。ここではrootユーザーでセットアップを実施します。一般ユーザーで実施する場合は、適宜sudoコマンドなどで実行してください。
OSの設定変更
はじめにOSの設定をいくつか変更します。
SELinuxの無効化
SELinuxが有効のままだと予期せぬ問題が起こりやすいので、これを無効化します。私が携わった商用サーバーでも有効のまま運用していることはありませんでしたので、一般的に無効のまま運用されていることが多いと思います。有効化する場合でも、WordPressをインストールして正常に動作していることを確認してから、有効化の対応をする方が良いでしょう。
SELinuxを無効化する手順は次のとおりです。/etc/selinux/config ファイルの「SELINUX=enforcing」という行を vi エディタなどで編集します。
# vi /etc/selinux/config
変更する内容は次のとおりです。
# 変更前
SELINUX=enforcing
↓
# 変更後
SELINUX=disabled
変更したら保存してOSを再起動します。
# reboot
OSが起動したら、ログインしてSELinuxが無効になっていることを確認します。次のコマンドを実行して「Disabled」と表示されれば無効になっています。
# getenforce
Disabled
ファイヤーウォールの設定
ファイヤーウォールを設定をします。WordPressを運用する場合は、最低限SSH、HTTP、HTTPSの通信ができる必要があります。これらの通信ができるようにファイヤーウォールを設定します。
ファイヤーウォールの現在の状態を確認します。
# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
自動起動の設定が無効の場合(上記の赤字部分が disabled の場合)は有効化します。
# systemctl enable firewalld
ファイヤーウォールが起動していない場合(上記の緑字部分が inactive (dead) の場合)は起動します。
# systemctl start firewalld
アクティブゾーンがpublicであるか確認します
# firewall-cmd --get-active-zones
public
...
publicで許可されている通信を確認します。
# firewall-cmd --list-service
cockpit dhcpv6-client ssh
SSH(ssh)はデフォルトで許可されているはずです。HTTPとHTTPSの通信を許可されていなければ(httpとhttpsが表示されなければ)、HTTPとHTTPSの通信を許可します。
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
設定を反映させるためにファイアーウォールの設定を再読み込みします。
# firewall-cmd --reload
HTTPとHTTPSの通信を許可されているか確認します
# firewall-cmd --list-service
cockpit dhcpv6-client http https ssh
タイムゾーンの確認
OSのタイムゾーンの設定を確認します。OSのインストール時にタイムゾーンを正しく設定していれば、ここは読み飛ばしても構いません。
タイムゾーンを確認するにはtimedatectlコマンドを使います。
# timedatectl
Local time: Wed 2023-06-21 04:13:00 UTC
Universal time: Wed 2023-06-21 04:13:00 UTC
RTC time: Wed 2023-06-21 04:12:59
Time zone: UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
もしタイムゾーンが想定していたものと異なっていたら、次のコマンドで変更します。次の例はタイムゾーンを「Asia/Tokyo」に設定します。
# timedatectl set-timezone Asia/Tokyo
ミドルウェアのセットアップ
WordPressの実行に必要なApache、PHP、MySQLをセットアップします。
Apacheのインストール
Apacheがインストールされていなければインストールします。Apacheは、dnfコマンドでインストールします。
# dnf install httpd
Apacheの状態を確認します
# systemctl status httpd
○ httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
Active: inactive (dead)
Docs: man:httpd.service(8)
自動起動の設定が無効の場合(上記の赤字部分が disabled の場合)は有効化します。
# systemctl enable httpd
Apache が起動していない場合(上記の緑字部分が inactive (dead) の場合)は起動します。
# systemctl start httpd
続いてサイトで「.htaccess」を利用できるようにします。
viなどのエディタで /etc/httpd/conf/httpd.conf を修正ます。
# vi /etc/httpd/conf/httpd.conf
次の記述場所を探して、「AllowOverride none」の行を「AllowOverride All」に修正します(コメント行は省略しています)。
# 修正前
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride none
Require all granted
</Directory>
↓
# 修正後
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修正してファイルを保存したら、設定を読み込むためにリロードします。
# systemctl reload httpd
以上で、Apacheのセットアップは完了です。
PHPのインストール
PHPをdnfコマンドでインストールします。
# dnf install php php-devel php-mysqlnd php-mbstring php-pdo php-gd
PHPをインストールを実施したら、「post_max_size」と「upload_max_filesize」の設定を変更しましょう。これらの設定は、メディアやテーマなどのファイルをWordPressサイトにアップロードする際のファイルサイズを制限します。デフォルトでは実用的なサイズではないので修正します。
それには、/etc/php.ini を編集します。
vi /etc/php.ini
「post_max_size」と「upload_max_filesize」の行を探して次のように修正します。修正が完了したらファイルを保存します。
# 変更前
post_max_size = 8M
↓
# 変更後
post_max_size = 128M
# 変更前
upload_max_filesize = 2M
↓
# 変更後
upload_max_filesize = 128M
次にインストールしたPHPを読み込むためWebサーバーを再起動します。
# systemctl restart httpd
最後に動作確認をします。以下のコマンドを実行して「phpinfo.php」ファイルを作成します。
# echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
Webブラウザから次のURLにアクセスします。
http://<IPアドレスまたはホスト名>/phpinfo.php
次のような画面が表示されれば、正常に動作しています。
確認できたらphpinfo.phpを削除します。PHPの情報が誰でも参照できてしまうのはセキュリティ上問題があるからです。
# rm /var/www/html/phpinfo.php
以上でPHPのインストールは完了です。
MySQLのインストール
MySQLのインストールについて、次の記事で詳しく説明していますので、そちらを参照してインストールを実施してください。
WordPressのインストール
さて、ここまで少し長かったですが、WordPressをインストールする下準備が出来ました。ここからがWordPress本体のインストールです。
データベースとユーザーの作成
はじめに、WordPressが利用するデータベースと、そのデータベースを操作するユーザー(アカウント)を作成します。
実際に作成する前に、あらかじめ次の事柄について決めておきましょう。ここでは次のような設定にします。
決めておく項目 | この例の設定 |
---|---|
データベースの名前 | wordpress |
データベースを操作するアカウント | ‘wpadmin’@’localhost’ |
アカウントのパスワード | WpAdmin^2468$ |
アカウントの権限 | データベースwordpressに対するすべての操作を実行できる権限 |
mysql クライアントでMySQLサーバーへ接続して、WordPress用のデータベースを作成します。
# mysql -u root -p
mysql> CREATE DATABASE wordpress;
データベースが作成できたか確認します。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
アカウント(パスワードは’WpAdmin^2468$’)を作成し、データベースwordpressに関するすべての操作を実行できる権限を付与します。
mysql> CREATE USER 'wpadmin'@'localhost' IDENTIFIED BY 'WpAdmin^2468$';
mysql> GRANT ALL ON wordpress.* TO 'wpadmin'@'localhost';
MySQLサーバーとの接続を切ります。
mysql> exit
WordPressの配置
WordPressのパッケージをサーバーに配置していきます。
サイトを公開するURLの決定
WordPressを配置するにあたり、WordPressサイトをどのURLで公開するかを決める必要があります。それによってファイルを配置する場所が異なります。
サイトのルートで公開する場合は、ウェブサーバーのドキュメントルートにファイルを配置します。つまり、この場合は次のURLでWordPressサイトが公開されます(ドメインがexample.comの場合)。
http://example.com/
サブディレクトリでWordPressサイトを公開する場合は、ドキュメントルートにサブディレクトリ(この例の場合はblog)を作成して、そのディレクトリにファイルを配置します。この場合は次のURLでサイトが公開されます。
http://example.com/blog/
ここではWebサイトのルートで公開することにします。
パッケージのダウンロード
WordPressのパッケージを WordPress.org(日本語)のダウンロードページ からダウンロードします。ファイルは次のような「.tar.gz」形式のファイルをダウンロードします。
wordpress-X.X.X-ja.tar.gz
パッケージの配置
ダウンロードしたWordPressのパッケージをインストールするサーバーのディレクトに転送します。
ここではWebサイトのルートで公開するので、Apacheのドキュメントルートにファイルを転送します。Apacheのデフォルトのドキュメントルートは「/var/www/html/」です。FTPやSFTPなどを使って/var/www/html/ディレクトリにダウンロードしたWordPressのパッケージファイルを転送します。
ファイルを転送したらWebサーバーにログインし、ログインしたらドキュメントルートに移動します。ファイルがあることを確認して展開します。
# cd /var/www/html/
# ls
wordpress-6.2.2-ja.tar.gz
# tar xzvf wordpress-6.2.2-ja.tar.gz
wordpress/
wordpress/wp-login.php
wordpress/wp-cron.php
...
ファイルを展開するとwordpressディレクトリができ、その中に必要なファイルがあります。
# ls wordpress
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
今回はWordPressサイトをルートで公開するので、wordpressディレクトリの中のすべてのファイルをドキュメントルートに移動します。
# mv wordpress/* /var/www/html/
Apacheのプロセスが適切にこれらのファイルにアクセスできるように、所有者と権限を修正します。
# chown -R apache:apache /var/www/html/
# chmod -R 755 /var/www/html/
Apacheをdnfコマンドでインストールした場合、Apacheのプロセスはapacheユーザーで実行されます。Apacheの設定ファイルを確認すれば、どのユーザーで実行されるか確認することができます。確認するには次のコマンドを実行します。
# grep -i '^User' /etc/httpd/conf/httpd.conf
User apache
# grep -i '^Group' /etc/httpd/conf/httpd.conf
Group apache
最後に、不要なファイルやディレクトリを削除します。
# rmdir wordpress
# rm wordpress-6.2.2-ja.tar.gz
wp-config.php
wp-config.php ファイルを作成して編集します。
最初に wp-config.php ファイルを作成します。wp-config.phpを作成するためのサンプルファイル(wp-config-sample.php)が提供されているので、そのファイルをリネームして作成します。
# mv wp-config-sample.php wp-config.php
wp-config.php ファイルを編集していきます。
# vi wp-config.php
まず、ファイルの次の赤字部分を修正します。
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );
/** Database username */
define( 'DB_USER', 'username_here' );
/** Database password */
define( 'DB_PASSWORD', 'password_here' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
項目の意味と、この例で設定する値を次の表に示します。
項目 | 説明 | 設定値 |
---|---|---|
DB_NAME | データベースの名前 | wordpress |
DB_USER | データベースを操作するユーザー名。アカウント(’wpadimin’@’localhost’)のユーザー名の部分を指定する。 | wpadmin |
DB_PASSWORD | データベースを操作するアカウントのパスワード。 | WpAdmin^2468$ |
DB_HOST | データベースサーバへ接続するアカウントの接続元ホスト名。アカウント(’wpadimin’@’localhost’)のホスト名の部分を指定する。 | localhost |
DB_CHARSET | データベースの文字コード(文字セット)。 | utf8mb4 |
DB_COLLATE | 文字列を比較するときのルール(照合順序)。例えばソートするときに、文字列を比較して順序を決めるような場合に使用される。明示的に指定しない場合は、文字セット(DB_CHARSET)のデフォルトの照合順序が使用される。 | 空文字列 |
DB_CHARSETについて補足します。MySQLインストールの参考リンクを紹介しましたが、その通りにMySQL 8.0 をインストールした場合、そのMySQLサーバーのデフォルトの文字コードは「utf8mb4」です。古いバージョンのMySQLは、デフォルトの文字コードが「utf8」でした。「utf8mb4」は「utf8」で使用できる文字に加えて、いわゆる4バイト文字もサポートします。そのため、この記事では「utf8mb4」を使用します。
編集後の内容は次のようになります。
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** Database username */
define( 'DB_USER', 'wpadmin' );
/** Database password */
define( 'DB_PASSWORD', 'WpAdmin^2468$' );
/** Database 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', '' );
次にいくつかのキーを設定します。これには長くて複雑なランダムな値を設定します。安全なキーを作成するために オンラインジェネレータ が用意されているので、これを利用するのがいいでしょう。ここで設定するキーはWordPressが内部的に利用するので、覚えておく必要はありません。
/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
次のようにキーを設定します。
define('AUTH_KEY', 'a;r^;Nuj2f,~J@L^TiEMDhoqirRgT-h`i77|013;{Pj6Wc kRTs/<28*etrvQXUg');
define('SECURE_AUTH_KEY', 'wUtPsqsHY(p_!}9k$?tgdM7G{Zhie=*qwDi+qjP>oUwIWx~?|PNeURm35r_>Q391');
define('LOGGED_IN_KEY', 'Q=kggRYZYEHwW`N80LHiia;pDZDr+-_dD_vNiIXHNm|/;UP&n%VM](--NdCRr;&b');
define('NONCE_KEY', 'm:3 ub3[+v&15zewF1iO$AvUn;{}q5hbNscdh4caMg5oMwpaw~b`y~LBVlM|dAU8');
define('AUTH_SALT', '54!$fN$.Y_fJ|/%51ry R_=C4wiM5BM5kiOWx!6a+GE9?J2X*,I(m*Xcio4-a![v');
define('SECURE_AUTH_SALT', ' $t9^x/6}Db&k+A5Ez++Q+Tn!)g0Mw!|iFd;P8^A<gywrk.?Ct2P5sZ|0g|&+-HM');
define('LOGGED_IN_SALT', ',3=[yU37wWE)8L|/i& Ofk2Z:BK0mqw;:xNp2sW-ZJ|^j:+qn6hn6]fZjP!]>mBh');
define('NONCE_SALT', 'w$/-4 %i/HqCgry29Xy5HuTu-Xb!0uCtR9vI(ca%4/2Ff?Y~WUh,9fp 5!c]C.c8');
以上で、wp-config.php ファイルの編集は終了ですので、ファイルを保存します。
インストールスクリプトを実行する
最後にインストールスクリプトを実行します。それにはブラウザで次のURLへアクセスします。
http://<IPアドレスまたはホスト名>/wp-admin/install.php
wp-config.php ファイルの作成をスキップした場合は、最初に次のページが表示されます。
入力する項目のいくつかは前述のwp-config.phpのところで説明した内容と同じです。「テーブル接頭辞」は通常、デフォルトから変更する必要はありません。
表示された画面で値を入力していきます。
これらの項目はWordPressサイトで使用する情報です。後で変更することもできます。ただし、変更するにはログインできる必要がありますので、パスワードはメモしておきましょう。項目の意味は次のとおりです。
項目 | 説明 |
---|---|
サイトのタイトル | サイトのタイトル |
ユーザー名 | サイトのユーザー |
パスワード | ユーザーのパスワード(ログインの際に必要) |
メールアドレス | サイトの管理者メールアドレス |
検索エンジンでの表示 | チェックを入れると検索エンジンの検索結果に表示されなくなる |
必要事項を入力したら「WordPress をインストール」ボタンをクリックします。すると次のような画面が表示されます。
以上で、WordPressのインストールは完了です。「ログイン」ボタンをクリックすると、WordPressのログイン画面が表示されますので、先ほど入力したユーザー名とパスワードでログインします。
おわりに
WordPress本体のインスール自体は、それほど難しくは無かったと思います。しかし、本当に難しいのは、サーバー全体のセキュリティの設計です。この記事ではWordPressが動く最低限の設定しか施していませんが、インターネットに公開する場合は、十分な対策を実施しましょう。
WordPressのセキュリティについては次のサイトが参考になるでしょう。