ラズパイ上でDockerのWordPressは「正常に動く」のだが恐らく多くの人がエラーにぶち当たる。
殆どの原因はラズパイのCPUがARM系である故に正しいイメージを選ばないと動作しないというところからきている。
今回は解決したトラブルを記載しておく。
動作手順などは記載しないため他サイトを参考にしてほしい。
先に私の環境で動いたdocker-compose.yml
を貼り付ける。
面倒であればパスワードだけ設定して貼り付ければ動くと思う。
version: "3"
services:
db:
privileged: true
image: mysql/mysql-server:latest-aarch64
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: (任意のパスワード1)
MYSQL_DATABASE: wp_db
MYSQL_USER: user
MYSQL_PASSWORD: (任意のパスワード2)
wordpress:
image: arm32v7/wordpress:latest
volumes:
- ./wordpress/html:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wp_db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: (任意のパスワード2)
注意点
ここからは実際に遭遇して解決していった問題を記述していく。
docker-compose up -d
で起動した後
docker ps
を実行した時にMySQLの状態(STATUS)を見てみるとRestarting
状態が続く現象。
正常な場合は
このようにUp
になる。
理由は色々あるがこれはパッケージの問題ではなくdocker-compose.yml
のMySQLの設定にprivileged: true
というのが必要。
正直セキュリティ的には危険性を孕んでいるので回避策を考えたがどうしてもtrue
にしないとDBが立ち上がらないので使うことにした。
特権コンテナの危険性については次が非常に詳しい
Dockerコンテナを特権モードで実行することが危険な理由 | トレンドマイクロ セキュリティブログ
MySQL側に書いてある次の設定
command: --default-authentication-plugin=mysql_native_password
こちらはMySQLのv8から認証方法が変わっておりWordPressが対応していないので従来の認証方法に戻す設定。
恐らく最もよくぶち当たるであろう問題。
こればっかりは恐らくCPU依存の問題で詳しいことがわからないため色々試した結果シンプルに次のイメージを使う必要がある。
image: mysql/mysql-server:latest-aarch64
MySQLのserver版でしかもaarch64。
こちらは公式パッケージなので常に最新である可能性が高い。
余談:海外勢を含む多くのサイトでラズパイ用には「hypriot/rpi-mysql
」を推奨しているが、こちらは2年前から更新されておらず使わないほうがよろしいかと思う。
WordPressの最初の管理画面が応答なしでになるパターン。
こちらも次のイメージを設定するだけで解決した。
image: arm32v7/wordpress:latest
こちらは有志のイメージなので更新がいずれ途絶える可能性もあるが、私が使った時は最新で更新されていた。
通常のwordpress:latest
にしておいても通常に立ち上がるので不思議なのだがアクセス時にエラーが出る。
aarch64/wordpress
というのもあるがこちらは起動すらできない上に4年前のもの。
ひとまず私がぶちあたった問題は以上である。
この先ラズパイを自宅サーバーにする人工は増えていくと考えているのでこういったトラブル解決記事は多いほうが良い。
今回はやり方ではなくトラブル解決だけに絞って簡潔にBLOG記事にした。
docker-composeの立ち上げ方などはいくらでも他にサイトがあるので別を参考にしてほしい。