背景
イントラ内のWindows Server上で動作させているアプリがあり、その使い方を社内ユーザ向けに説明するマニュアルを作成したかったのですが、いちいちWordでマニュアルとか書いてられないので、WordPressを使うことになりました。
「WordPressのインストール? そんなもん余裕でしょ」
と思ってたのですが、全然余裕ではなく、むしろかなり手間取ったので
ここに顛末を記します
今回の環境
- OS: Windows Server 2012 R2 【構築済み】
- Nginx: v1.13.12 【構築済み】
- WordPress: v4.9.6
- PHP: v7.2.6 NTS(non thread safe版)
- MySQL: v8.0.11
- Python: v2.7.15
思えば、Apacheじゃなく、Nginxだけが先に入っているという時点で、普通じゃないと少し警戒しておくべきだったのかもしれない…
作業
インストール順
もし「今から素のWinに入れ直せ」って言われたら、たぶん以下の順にします
- Python
- PHP
- MySQL
- WordPress
- Nginx
インストール
Python
Download Pythonから入手可能
https://www.python.org/downloads/
ウィザードに従って入れていくだけなので、特に苦労はない
PHP
バイナリ入手
PHP for Windowsから入手可能
https://windows.php.net/download/
- NginxやIISの場合は「Non Thread Safe」を選ぶこと
- Apacheなら「Thread Safe」で問題なし
インストール
既に多くの情報がWebにあるので、それらを参考にすれば難しくない
- 任意のフォルダに展開
- php.iniを作成
- 環境変数 PATH を設定
ハマりどころ
extension系の設定を追加
Webの情報だと「コメント “;” を削除」と書いてあったが、
私のものには書かれていなかったので、都度追記
extension_dir = “ext”
extension=php_mbstring.dll
extension=php_mysqli.dll
動作確認
<?php
phpinfo();
?>
MySQL
これが一番面倒だった
※インストール時にPython 2.7を使うので、先に入れておくこと
バイナリ入手
MySQL :: Download MySQL Installerから入手
https://dev.mysql.com/downloads/installer/
Community > Windows > Installer の順に手繰っていく
32bit用のしか無いように見えるが、実際には64bit環境でも同じインストーラを利用可能
オフライン版(サイズの大きい方)を選んでおけば、ネットが繋がらない環境でも問題なし
なお「Oracleのユーザアカウント」を作ることを促されます
- いらない場合は無視
- Oracle JDK入手などにも使えるアカウントなので、必ずしも無駄になるかと言われると…
インストール
ダウンロードした.msiを実行
面倒なら「Developer Default」で問題なしですが、インストールフォルダを変えたければ、「Choosing a Setup Type」で「Custom」を選ぶ必要がある
(なぜフォルダを選ぶだけで「カスタム」なんだ…)
データベースとユーザを作る
MySQLに繋ぐ
> mysql -u root -p`
MySQL内で以下の操作
mysql> CREATE DATABASE test_db;`
Query OK, 1 row affected (0.06 sec)
mysql> CREATE USER 'testman'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.11 sec)
mysql> GRANT ALL ON test_db.* to 'testman'@'localhost';
Query OK, 0 rows affected (0.08 sec)`
ユーザの認証方式を変更
WordPressから、MySQLを呼び出す際には以下の設定が必要
MySQL 8.0以降のみで発生するため、Web上にはほとんど情報がない
現在作成済みユーザの一覧を表示すると
mysql> select user,host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| root | localhost | caching_sha2_password |
| testman | localhost | caching_sha2_password |
| wpman | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)
となるが、ここで caching_sha2_password
はMySQL 8.0からサポートされた認証プラグインで、このままだと、testman
がWordPressからMySQLに対して参照することができません。
一番簡単な方法は、wpman
のように mysql_native_password
にしておくことのようです。
詳しくはmysql8-0におけるデフォルトの認証プラグインの変更 を参照のこと。
Nginx
Nginxは、ご存知の通りWebサーバだけでも使えるため、今回はたまたま先に入っていた
ただ、WordPressを後から入れると結構手間がかかるようなので、一緒に使うことが分かっているならWordPressから入れたほうが良いようです
(頑張ればどちらでもいけるんですが)
バイナリ入手
nginx: downloadから入手
https://nginx.org/en/download.html
基本的に「Mainline version」を選ぶ
インストール
任意のフォルダに置く
コマンドプロンプトでカレントに移動し、
> start nginx
で、Webサーバ起動
http://localhost/ にアクセスし、「Welcome to nginx!」と表示されることを確認
Config設定
既に多くの情報がWebにあるので、それらを参考に
-
\cong\nginx.conf
が変更対象 - コメント
#
を外し、機能を有効化 - 拡張子 *.php のところ(今回はPHPを使うので)
- log_format, access_log, error_log
-
server
のlisten
を実際に使うポート番号に変更すること(たとえば8088
)
(余談ですが、Webサーバを持つアプリを複数入れると「80xx」がだんだん衝突しだしますよね…)
起動/終了バッチファイル作成
既に多くの情報がWebにあるので、それらを参考に
- PHPは、FastCGI(9000/tcp)を使う設定
- 終了時も必ずバッチファイルで落とすこと
運用時
公開ファイルはとりあえず .\html
以下にどんどん置いていけばよい
おわりに
既存の環境に何かを足しこむのは難しいです
特に、今回ハマったのはMySQL8が割と新しいために、関連する情報がWebになかったことです。
ただ、時間をかけて探した結果、リンク先の文章があったのでだいぶ救われました
やはりWeb上に知見を残していくことは、後から来た誰かにとって有益になるのだと思います。
羽生さん 風に言えば、高速道路を敷くイメージですね
これからも誰かの知の高速化に役立てるような記事を書いていきたいと思いました
(おわり)