WordPress入門……?(2)
非フロントエンドのエンジニアがWordPressに入門してみる。前回の続き。
Webサーバーの確認
Webサーバーの設定について確認し忘れていました。
今回はApacheベースのWordPressコンテナイメージを使用しているため、コンテナ内のApacheの設定を見ておきます。
root@00dbff533853:/var/www/html# ls -l /etc/apache2/
total 52
-rw-r--r--. 1 root root 7224 Mar 6 08:23 apache2.conf
drwxr-xr-x. 1 root root 187 Mar 6 08:23 conf-available
drwxr-xr-x. 1 root root 27 Mar 6 08:23 conf-enabled
-rw-r--r--. 1 root root 1924 Mar 6 02:58 envvars
-rw-r--r--. 1 root root 31063 Aug 8 2020 magic
drwxr-xr-x. 1 root root 4096 Mar 6 08:23 mods-available
drwxr-xr-x. 1 root root 67 Mar 6 08:23 mods-enabled
-rw-r--r--. 1 root root 320 Mar 6 08:23 ports.conf
drwxr-xr-x. 1 root root 54 Mar 6 08:23 sites-available
drwxr-xr-x. 2 root root 30 Mar 6 02:58 sites-enabled
root@00dbff533853:/var/www/html# cat /etc/apache2/apache2.conf
(コメント行は省略)
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
root@00dbff533853:/var/www/html# ls -l /etc/apache2/conf-enabled/
total 0
lrwxrwxrwx. 1 root root 30 Mar 6 02:58 charset.conf -> ../conf-available/charset.conf
lrwxrwxrwx. 1 root root 33 Mar 6 02:58 docker-php.conf -> ../conf-available/docker-php.conf
lrwxrwxrwx. 1 root root 44 Mar 6 02:58 localized-error-pages.conf -> ../conf-available/localized-error-pages.conf
lrwxrwxrwx. 1 root root 46 Mar 6 02:58 other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf
lrwxrwxrwx. 1 root root 31 Mar 6 08:23 remoteip.conf -> ../conf-available/remoteip.conf
lrwxrwxrwx. 1 root root 31 Mar 6 02:58 security.conf -> ../conf-available/security.conf
lrwxrwxrwx. 1 root root 36 Mar 6 02:58 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf
conf-enabledにいろいろあってすっきりしないですね……。こういうものでしたっけ?
/usr/shareってのも必要なんでしょうか? 今回はあんまり気にしないことにします。
.htaccessで制御するようになってるのはまあ仕方ないのでしょう。
なお、WordPressに関してfpmという名前の付いたコンテナイメージも用意されていて、少し調べてみたところ、Nginxと連携する場合はPHP-FPMという仕組みでUNIXドメインソケットを使って通信させればいいようです。
つまり、WebサーバーであるNginxコンテナとAPサーバーであるWordPressコンテナを分離して管理することができるということなので、実務で使うときはそちらのほうが良さそうです。
テーマの使用
使用するテーマは有名で評判の良いものを探します。有料だとSANGOとか?
無料で使えるものでは、以下の2つと判断しました。
- Cocoon
- Luxeritas
Cocoon
開発元の配布サイトに従ってインストールします。
- 親テーマ、子テーマをダウンロード。
- WordPress管理画面から親テーマのzipファイルをアップロード。
- 辿ったリンクは期限が切れています。
……ファイルサイズが大きくて設定上限を超えているためエラーになるらしいです。
Docker版だと2MBという噂ですが、使用したzipは12.9MB。
エラーになるのはいいですけど、エラーメッセージどうにかならないのですか?
テーマのために上限を上げるのは気持ち悪いので、配布サイトのFAQの案内に従って低用量版(1.8MB)をインストールしてからアップデートすることにします。
- 低用量版のzipファイルをアップロード。(インストール完了)
- 子テーマのzipファイルをアップロード。(インストール完了)
- 子テーマ(Cocoon Child)を有効化。
- 親テーマ(Cocoon)をアップデート。
見た目が変わりました。
そして管理画面に<Cocoon設定>というメニューが表示されるようになりました。
なるほど、テーマが多機能というのはこういうことですか。
ここでいろいろテーマに付随する機能の設定を行えるのですね。すばらしいです。
試しにフッターの設定を変えてみると、ちゃんと変わっていますし、HTMLタグも反映されます。
メニューにはブログカードとかカルーセルとか、耳慣れない単語がありますが、Webデザインの世界では常識の範囲の言葉のようです。OGPやPWAは最近知りました。
ひとまずこんなところで次へ行きます。
Luxeritas
Cocoonに代えてLuxeritasをインストールしてみます。
どちらかというとこちらの方が本命のつもり。
- 親テーマ、子テーマをダウンロード。
- WordPress管理画面から親テーマのzipファイルをアップロード。
- アップロードされたファイルが php.ini の upload_max_filesize ディレクティブを越えています。
あれ、メッセージが親切になっていますよ?!
理由はよくわかりませんが、Luxeritasは5.5MB程度で代替もとくになさそうだったので、大人しく上限を引き上げることにします。
……ところがですね、サーバ内を検索してもphp.iniというファイルはありませんでした。
エラーになるのはいいですけど、エラーメッセージどうにかならないのですか?
root@00dbff533853:/var/www/html# ls -la /usr/local/etc/php/
total 144
drwxr-xr-x. 1 root root 20 Mar 6 03:05 .
drwxr-xr-x. 1 root root 17 Mar 6 03:05 ..
drwxr-xr-x. 1 root root 31 Mar 6 08:23 conf.d
-rw-r--r--. 1 root root 72382 Mar 6 03:05 php.ini-development
-rw-r--r--. 1 root root 72528 Mar 6 03:05 php.ini-production
root@00dbff533853:/var/www/html# cat /usr/local/etc/php/php.ini-development | grep upload_max_filesize
upload_max_filesize = 2M
root@00dbff533853:/var/www/html# cat /usr/local/etc/php/php.ini-production | grep upload_max_filesize
upload_max_filesize = 2M
おそらくphp.ini-development
かphp.ini-production
が使われているんでしょうが、あまりこんなところを触りたくないです。
wp-config.php内でini_set()すればいい、というような情報を見つけたので、頑張ってsedコマンドで書き込んでみました。しかし……ini_set()の値は反映されませんでした。
調べてみると、upload_max_filesizeは変更モードがPHP_INI_PERDIR
とかいうのになっていて、ini_set()では変更できないようでした。
なお、設定値を確認するために、phpinfo()ページを作成したりしました。
.htaccessで設定できるそうですが、apache依存のやり方が嫌なので.user.ini
で設定することにしました。
root@00dbff533853:/var/www/html# echo 'upload_max_filesize = 6M' > .user.ini
しかし……反映されませんでした。しばらく調べましたが理由がわかりません。悔しいです。
しかたなく.htaccess
に書き込むと反映されました。
root@00dbff533853:/var/www/html# sed -i -e "1iphp_value upload_max_filesize 6M" .htaccess
root@00dbff533853:/var/www/html# cat .htaccess
php_value upload_max_filesize 6M
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
# END WordPress
手間取りましたが、これで無事テーマをアップロードできました。
- 親テーマのzipファイルをアップロード(インストール完了)
- 子テーマのzipファイルをアップロード(インストール完了)
- 子テーマを有効化
見た目が変わりました。
管理画面に<Luxeritas>というメニューが表示されるようになりました。
印象としては、CocoonよりもLuxeritasの設定画面がすっきりしています。
データの確認
DB
まずはDBについて見ておきます。
[centos@pmsv02 ~]$ sudo docker exec -it mariadb mysql -uroot -p
MariaDB [(none)]> use wp
MariaDB [wp]> show tables;
+---------------------------+
| Tables_in_wp |
+---------------------------+
| wp_cocoon_accesses |
| wp_cocoon_affiliate_tags |
| wp_cocoon_function_texts |
| wp_cocoon_item_rankings |
| wp_cocoon_speech_balloons |
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+---------------------------+
17 rows in set (0.001 sec)
MariaDB [wp]> select count(*) from wp_options;
+----------+
| count(*) |
+----------+
| 185 |
+----------+
1 row in set (0.007 sec)
Cocoonが独自のテーブルを5つ作成しています。
Luxeritasのほうは独自テーブルを作成しないようです。
どちらのテーマによるかはわかりませんが、wp_options
テーブルのエントリーが増えています。
ファイル
WordPressのテーマというのが、スタイルだけではなくいろいろと「機能」を含んだものであることを知りました。
ということは、データはDBだけではなく、プログラムファイルも含まれるはずです。テーマのzipファイルの中身を見れば一目瞭然ですが。
[centos@pmsv02 ~]$ sudo docker exec -it wp /bin/bash
root@00dbff533853:/var/www/html# ls -l
total 212
-rw-r--r--. 1 www-data www-data 405 Feb 6 2020 index.php
-rw-r--r--. 1 www-data www-data 19915 Mar 13 19:24 license.txt
-rw-r--r--. 1 www-data www-data 20 Mar 17 14:52 phpinfo.php
-rw-r--r--. 1 www-data www-data 7345 Mar 13 19:24 readme.html
-rw-r--r--. 1 www-data www-data 7165 Mar 13 19:24 wp-activate.php
drwxr-xr-x. 9 www-data www-data 4096 Feb 22 15:10 wp-admin
-rw-r--r--. 1 www-data www-data 351 Feb 6 2020 wp-blog-header.php
-rw-r--r--. 1 www-data www-data 2328 Oct 8 21:15 wp-comments-post.php
-rw-r--r--. 1 www-data www-data 2913 Feb 6 2020 wp-config-sample.php
-rw-rw-rw-. 1 www-data www-data 3183 Mar 17 15:04 wp-config.php
drwxrwxrwx. 8 www-data www-data 112 Mar 17 16:22 wp-content
-rw-r--r--. 1 www-data www-data 3939 Jul 30 2020 wp-cron.php
drwxr-xr-x. 25 www-data www-data 8192 Mar 13 19:24 wp-includes
-rw-r--r--. 1 www-data www-data 2496 Feb 6 2020 wp-links-opml.php
-rw-r--r--. 1 www-data www-data 3313 Mar 13 19:24 wp-load.php
-rw-r--r--. 1 www-data www-data 44993 Mar 13 19:24 wp-login.php
-rw-r--r--. 1 www-data www-data 8509 Apr 14 2020 wp-mail.php
-rw-r--r--. 1 www-data www-data 21125 Mar 13 19:24 wp-settings.php
-rw-r--r--. 1 www-data www-data 31328 Mar 13 19:24 wp-signup.php
-rw-r--r--. 1 www-data www-data 4747 Oct 8 21:15 wp-trackback.php
-rw-r--r--. 1 www-data www-data 3236 Jun 8 2020 xmlrpc.php
ファイルの更新日付が3月(Mar)になっているものは、テーマのインストールによって更新されたものです。
wp-contentフォルダの中身やwp-includesの中身もそうで、この様子ではWordPress本来のプログラムとテーマが持つプログラムとをファイル単位で分離することはできそうにありません。
少し悩みましたが、/var/www/html
以下の全てを永続化しておいて、WordPressのバージョンとテーマのバージョンを含めたデータとして管理するしかなさそうです。WordPressのアップデートもテーマのアップデートも、このディレクトリとDB以外には影響しないということであれば、コンテナを消した場合も復旧できるでしょう。
補足と感想
WordPressは世界的なOSSですが、LuxeritusはOSSとは雰囲気が違い、個人開発の無料ツールと考えたほうがいいようです。ページのフッターに提供元の表示を簡単に消せないように仕込んであり、消したければ有料プラグインを購入してねという姿勢です。個人が開発しなくなると更新されなくなると考えられるため、業務利用するには将来性に不安があります。
CocoonはGitHubを公開してプルリクエストも受け付けているようですが、やはり個人開発という点では同じでしょう。また、どちらも日本製なので世界的なコミュニティは形成されないと思われます。
じゃあそれで世界的によく使われるテーマみたいなのがあるのかというと、よくわかりません。
phpをちょこっと触ってみたのですが、WordPressのエラーをうまく出力することができませんでした。DEBUGモードにすれば標準エラー出力でdocker logsに出力されると思っていたのですが。
また、結局ちょっとこみいった機能的なことを開発しようと思えばあちこち触らなければいけなくて、テーマとかプラグインが絡んでいるとむしろやりにくいと感じました。簡単なコーポレートサイトやブログ程度であれば良さそうですが、ユーザーにログインしてもらってサービス提供するようなサイトとしては、慣れないPHPでレスポンスの遅いサイトを開発する意味はないように思います。
入門しようかと思って覗いてみたけどちょっと違うなーと感じました。
WordPressを試すのはここまでとします。
Discussion