LoginSignup
0
0

More than 3 years have passed since last update.

OpenWRTでWordPressを運用

Last updated at Posted at 2020-05-05

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

なお、このページは、この記事(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/へアクセスします。すると、おなじみの画面が登場します。

image.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)

[おしまい]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0