OpenWRTでWordPressを運用


基本、[本家のページ](https://openwrt.org/docs/guide-user/services/webserver/install_wordpress)に書かれたまま進めます。
結局、かなりかけている情報があったので、いろいろとつまづきました。

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

#インストール

##パッケージ群

[本家](https://openwrt.org/docs/guide-user/services/webserver/install_wordpress)の情報ですと、次のものをインストール、となっています。ただ、情報が古いので、いくつかは、入りません。気にせず進めます。

- ~~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設定](https://openwrt.org/docs/guide-user/services/webserver/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のインストール作業につき、割愛可能

引き続き、[本家の内容](https://wordpress.org/support/article/creating-database-for-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
```

[本家のまんま](https://wordpress.org/support/article/creating-database-for-wordpress/)です。

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

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


## uhttpd設定変更

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

```/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](https://wordpress.org)から、[最新のシステム](https://wordpress.org/latest.zip)をダウンロードし、どこか解凍+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/**へアクセスします。すると、おなじみの画面が登場します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/ccf19721-aa93-3394-3435-c6a0c6425504.png)

ここまでくると、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)
```

[おしまい]