OpenWRTでWordPressを運用


基本、本家のページに書かれたまま進めます。
結局、かなりかけている情報があったので、いろいろとつまづきました。

なお、このページは、この記事(OpenWRT インストール中 (ビルド ver.))の続きです。以下に出てくるパッケージは、すべてmake menuconfigにて設定しています。

インストール

パッケージ群

本家の情報ですと、次のものをインストール、となっています。ただ、情報が古いので、いくつかは、入りません。気にせず進めます。

  • mysql-server
  • mariadb-server
  • php7
  • php7-cgi
  • php7-cli
  • php7-mod-gd
  • php7-mod-hash
  • php7-mod-json
  • php7-mod-mbstring
  • php7-modmysqli
  • php7-mod-opcache
  • php7-mod-pdo
  • php7-mod-pdo-mysql
  • php7-mod-session

php7設定変更

uhttpd設定によると、doc_rootは空にせよ、とあるので、空にする。

/etc/php.ini
- doc_root = "/www"
+ doc_root =
+ pdo_mysql.default_socket = /var/tmp/mysql.sock
+ mysql.default_socket = /var/tmp/mysql.sock
+ mysqli.default_socket = /var/tmp/mysql.sock

下の3つは、mysqli_connect(): (HY000/2002): No such file or directoryエラー対応でいれました。

mysql (mariadb)設定

# mysql_install_db --force
# /etc/init.d/mysqld start

うちの環境(v19相当)では、/mnt/data/mysqlが作られた。
また、/etc/config/mysqldのenableを'1'に変更しないと、startしないです。

WordPressのDB操作

WordPressのインストール作業につき、割愛可能

引き続き、本家の内容に従って、DBを操作します。

# mysqladmin -u root password 'password'
# mysql -u root -p
mysql> CREATE DATABASE databasename;
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname" IDENTIFIED BY "password";
mysql> FLUSH PRIVILEGES;
mysql> EXIT

本家のまんまです。

WordPressの設定で、次の3つを使います。
- databasename
- wordpressusername
- password

そのため、wordpress運用で使いたいイメージがあれば、それで命名したほうがよいでしょう。

uhttpd設定変更

uciでたたいても、/etc/config/uhttpdを変更しても同じ

(/etc/config/uhttpd追加部分)
config uhttpd 'wordpress'
        option listen_http '81'
        option home '/mnt/data/wordpress'
        option index_file 'index.php'
        option index_page 'index.php'
        list interpreter ".php=/usr/bin/php-cgi"

本家筋の情報だと、interpreterは、mainブロックにあればよい、となっていましたが、ここ(wordpressブロック)にないと動きませんでした。

WordPress

wordpressから、最新のシステムをダウンロードし、どこか解凍+scpできるところに保管します。

$ cd /tmp
$ wget https://wordpress.org/latest.zip
$ unzip latest.zip
$ scp -r wordpress root@openwrt:/mnt/data/wordpress

本家では、/srv/wwwとなっていますが、mysqlが入ったところを間借りします。ポイントは、ディレクトリによっては、再起動時消されるものがあるところです。

このあと、wp-config-sample.phpをwp-config.phpに直して、4か所修正します。

/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wordpress' );
/** MySQL database password */
define( 'DB_PASSWORD', 'password' );
/** MySQL hostname */
define( 'DB_HOST', '127.0.0.1' );

注意点は、localhostではなく、127.0.0.1とするところ。

WordPress起動

初回は、http: //(openwrt)/wp-admin/へアクセスします。すると、おなじみの画面が登場します。

ここまでくると、openwrtでwordpressを起動する話なのか、wordpressをインストールする話か分からなくなるので、この辺でおしまい。

外とつなぐ

uhttpdにて、portを指定しているので、gatewayルータのnat設定を、80できたら、openwrtのIPアドレスと81ポートへフォワードするように設定すればよいでしょう。
問題は、構築方法によっては、すべての80トラフィックをwordpressが受けてしまうことでしょうか。

補足

128M Ram機で試してみた

メモリサイズ128Mのopenwrt機に入れてみました。mysql_install_dbで、こけて終了です。エラーから推測するに、128M以下ではメモリ不足で動かないと思われます。

# mysql_install_db --force --dasedir=/usr
~snip~
2020-XX-XX  X:XX:XX 2002709772 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(138543104 bytes) failed; errno 12
2020-XX-XX  X:XX:XX 2002709772 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
~snip~
    shell> /usr/bin/mysql -u root mysql
    mysql> show tables;

Try 'mysqld --help' if you have problems with paths.  Using
--general-log gives you a log in /mnt/data/mysql/ that may be helpful.

The latest information about mysql_install_db is available at
https://mariadb.com/kb/en/installing-system-tables-mysql_install_db
You can find the latest source at https://downloads.mariadb.org and
the maria-discuss email list at https://launchpad.net/~maria-discuss

Please check all of the above before submitting a bug report
at http://mariadb.org/jira

グーグル先生に、"InnoDB: Cannot allocate memory for the buffer pool"の解決法帆を聞くと、my.cnfのinnodb_buffer_pool_sizeを変更しましょう、と言われます。

そこで、小さくします。

/etc/mysql/my.cnf
~snip~
[mysqld]
user            = mariadb
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr

~snip~

#innodb_buffer_pool_size = 128M
innodb_buffer_pool_size = 16M

~snip~

[mysqld]以降、[mysqldump]以前に追記します。

再び実行すると、今度はOut of memoryのエラーが出ます。

XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB: Initializing buffer pool, size = 16.0M
XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB: Completed initialization of buffer pool
XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB: Highest supported file format is Barracuda.
XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB: 128 rollback segment(s) are active.
XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB: Waiting for purge to start
XXXX-XX-XX  X:XX:XX 1998417164 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.39-83.1 started; log sequence number 1616777
XXXX-XX-XX  X:XX:XX 1998417164 [ERROR] mysqld: Out of memory (Needed 130760704 bytes)
XXXX-XX-XX  X:XX:XX 1998417164 [ERROR] mysqld: Out of memory (Needed 98058240 bytes)
XXXX-XX-XX  X:XX:XX 1998417164 [ERROR] mysqld: Out of memory (Needed 73531392 bytes)
XXXX-XX-XX  X:XX:XX 1998417164 [ERROR] mysqld: Out of memory (Needed 55148544 bytes)

一行目に、size = 16.0Mとでているので、my.cnfの設定は、反映されているように見えます。どの要因でOut of memoryになったのかは、調査しておりません。(時間があったら、今度挑戦します)

mariabackupでバックアップ

別環境の話ですが、maribackupを使ったDBのバックアップを行ったので、備忘録としてメモ

$sudo mariabackup --backup --target-dir /backup -u root -p (passwd)

[おしまい]