気まま研究所ブログ

ITとバイク、思ったことをてきとーに書きます。

Raspberry Pi 3でWordpress環境を構築してみる

f:id:AonaSuzutsuki:20180704150419p:plain

だいぶ前にRaspberry Pi 3でサーバを構築する関連の話を途中までして投げ捨てた記憶がありますが、実際に運用までしてみるとそこまで単純ではなかったので続きを執筆します。
なお、今回はWordpressのインストールのみに焦点を当てるのでPHP7は「Raspbianで公式php7をビルド & インストールする」をご参照ください。

構築環境

項目 詳細
Raspi Raspberry Pi 3 Model B
OS Ubuntu Mate 16.04.4 LTS (Xenial Xerus)
Apache2 2.4.18
MySQL Ver 14.14 Distrib 5.7.22
Wordpress Wordpress 4.9.6

OSに関してはRaspbianなどのDebian系なら同じ操作でできると思います。

Apache 2のセットアップ

まずはApache 2のインストールとセットアップを行います。
ここではSSLのセットアップまでは行いませんので必要な方は別途お調べ願います。

Apache 2のインストール

sudo apt-get install apache2 apache2-dev apache2-mpm-prefork

.htaccessの有効化

パーマリンクなどで.htaccessが必要となることがあるので有効化しておきましょう。
/etc/apache2/apache2.confの該当箇所を書き換えます。

sudo nano /etc/apache2/apache2.conf

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
↓↓↓↓↓↓
<Directory /var/www/>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

mod_rewriteの有効化

必須ではありませんが、パーマリンクを使用する場合はmod_rewriteが必要になります。

sudo a2enmod rewrite

confやモジュールを変更するとApacheの再起動が必要になります。
最後に再起動しておきましょう。

sudo apache2ctl restart

ちなみに切る場合はa2dismodコマンドを持ちます。

PHPのインストール

PHPに関してはこちらでは触れないのでRaspbianで公式php7をビルド & インストールするをご参照ください。
なお、Ubuntu Mateの場合はパッケージマネージャにPHP7があるようなのでそちらを利用するのもありです。
PHP5は動作確認していません。

MySQLのセットアップ

MySQLのインストール

sudo apt-get install mysql-sever

インストールと同時にrootのパスワードを決めるよう促されるので新しく設定します。
管理の際に度々使用するので忘れないようにしましょう。

デフォルトの文字コードを変更

MySQLはサーバとデータベースの文字コードがデフォルトでLatin-1になっているため、日本語などで文字化けを起こす場合があります。
今回構築するWordpressでもUTF-8を用いますのでおそらく文字化けします。
そのため、ここでは一般的に広く使われているUTF-8に統一してしまいます。

my.cnfを開き、以下の設定項目を追加します。

sudo nano /etc/mysql/my.cnf

...
[mysqld]
character-set-server=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

あとはMySQLを再起動してステータスを確認します。

sudo /etc/init.d/mysql restart
# sudo /etc/init.d/mysqld restart 更新でmysqldじゃなくなったっぽい

最後にステータスの確認をMySQLコンソールより行います。

mysql -u root -p
mysql> status;
--------------
...
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
...
--------------

この四つがUTF-8になっていれば完了です。

データベースの作成

次にWordpress用のデータベースを作成します。
rootでログインし、SQLを実行します。

mysql> create database db_wordpress;

成功するとデータベースが作成されるので念のため一覧で確認しておきましょう。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| db_wordpress          |
+--------------------+
5 rows in set (0.02 sec)

アカウントの作成

次にデータベースを操作するWordpress専用アカウントを作成します。
rootでも操作はできますが、権限が広すぎるのでWordpressのデータベースのみ操作できるアカウントを作成します。
まずはアカウントの作成から。

mysql> CREATE USER wordpress@localhost IDENTIFIED BY 'パスワード';

次に、権限の設定を行います。

mysql> GRANT ALL PRIVILEGES ON db_wordpress.* TO wordpress@localhost;

Wordpress用のdb_wordpressデータベースの全テーブルに限って全権限を与えます。

最後に念のためアカウント一覧をチェックしておきましょう。

mysql> select host, user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
| localhost | wordpress        |
+-----------+------------------+
5 rows in set (0.01 sec)

ちなみに設定した権限はshow grantsで確認できます。

mysql> show grants for wordpress@localhost;
+------------------------------------------------------------------+
| Grants for wordpress@localhost                                   |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION  |
| GRANT ALL PRIVILEGES ON `db_wordpress`.* TO 'wordpress'@'localhost' |
+------------------------------------------------------------------+

これで一通り作業を終えたのでMySQLとの接続を閉じます。

mysql> quit

Wordpressのセットアップ

すごく遠回りになりましたが、Wordpressをインストールしていきます。

Wordpressのインストール

公式より、Wordpressの本体をダウンロードし、Apache 2のドキュメントルートの適当な場所に展開します。

$ cd /var/www/html
$ wget https://ja.wordpress.org/wordpress-4.9.6-ja.tar.gz
$ tar -zxvf wordpress-4.9.6.tar.gz

これでとりあえずインストールは完了です。

wp-config.phpの設置

最後にWordpressの設定をして終了です。
まずは設定ファイルのサンプル用を適切な名前でコピーします。

$ cp wp-config-sample.php wp-config.php

次に必要箇所を書き換えていきます。

$ nano wp-config.php
...
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'db_wordpress');

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

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

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

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

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');
...

次に、同様のwp-config.phpの認証用ユニークキーを書き換えます。
ユニークキーは「https://api.wordpress.org/secret-key/1.1/salt/」から新規作成できるのでコピペしちゃいましょう。

...
define('AUTH_KEY',         'rM%<De$7O`fIOv+@nF!<N|$,>L,Co_bXy3|<Rv[,>3+m1qS- eQXHIn5HE?y}j`R');
define('SECURE_AUTH_KEY',  '7S<%S;=)H0J6/&%_*~ W1Z,{1[5Qg>D0|+vbj~O2]dpp=[GIPgw5TAOJvn%Lrb}G');
define('LOGGED_IN_KEY',    'I{AN3kbtB3.zdSRV.`>>S(,gzJlCO3n+ofOvNv_TQy]-,yL|i {}A>kZ9_B0d~n)');
define('NONCE_KEY',        'x5Q#4o%u40:zTN~,-:2T0&)!^[51wRKWGRaoA-2yhCls%|HzFDVF$v+g@+dTBgs5');
define('AUTH_SALT',        'x(,v}nuLJduJylpt$]twUzp;OnmmEnHQ}3*PXt[;s:xZ|||@rNW<Bpl:kx*8NG#|');
define('SECURE_AUTH_SALT', '>Ki}%oU|ns{m v5R{@W.y?A^HC9$`zBPJ]7u;8RDbxj:VD-=]J{m<YmWenjS P*k');
define('LOGGED_IN_SALT',   'S9G33s-bt2B=J_$t[ZEq2q|)#[-Z$Q<qU$9f_GEvuUVa9}~<|-H@)mD9T5@HXc*U');
define('NONCE_SALT',       '62Zl`oJmqKEP@XC<,:-T@;V+0yE4CI1Ual}xaU,{(;W7`B|*,9I!2b:PgT/r0#!a');
...

あとはhttp://localhost/wordpressにアクセスしてユーザー作成画面が出て、そのまま作成ができれば完了です。

アップデートを直接書き込む

最後に追加で設定しておくと便利なのですが、アップデートなどを直接書き込むようにしておくと手間が省けます。
通常はFTP経由で行うのですが、わざわざそのためにサーバーを置いてられないので権限を揃えてあげてWordpressが直接ファイルシステムを書き換えるようにします。

同じくwp- config.phpを開き、以下を追記します。

define('FS_METHOD','direct');

後はwordpressの領域をApache 2の権限で設定します。

$ sudo chown -R www-data:www-data /var/www/html/wordpress

あとはwordpressのアップデートなどを行うとFTPの設定画面が出てこなくなります。
ただし、SFTPなどでいじる時に権限周りがややこしくなるのでそのあたりだけ要注意です。

置くだけで動くので書きませんとかほざいていましたが、諸事情で設置する機会がありまして、思った以上に手順が多かったので続きを書いて見ました。
MySQL自体もあまり触ったことがなかったので今回の構築と記事にするにあたっての調査でかなり勉強になりました。
気になっていた方はぜひSSLまで対応させて運用して見てください。

参考文献

  1. MySQLの文字コードを変更する
  2. WordPress Upgrade Constants - wordpress.org
  3. 6.3.2 ユーザーアカウントの追加
  4. 13.7.1.6 REVOKE 構文
  5. 13.7.5.22 SHOW GRANTS 構文