Help us understand the problem. What is going on with this article?

Nginx入りのWindows ServerにWordPressを導入する件

More than 1 year has passed since last update.

背景

イントラ内のWindows Server上で動作させているアプリがあり、その使い方を社内ユーザ向けに説明するマニュアルを作成したかったのですが、いちいちWordでマニュアルとか書いてられないので、WordPressを使うことになりました。

「WordPressのインストール? そんなもん余裕でしょ」
と思ってたのですが、全然余裕ではなく、むしろかなり手間取ったので:japanese_goblin:
ここに顛末を記します:pencil:

今回の環境

  • 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に入れ直せ」って言われたら、たぶん以下の順にします
1. Python
2. PHP
3. MySQL
4. WordPress
5. 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
  • serverlisten を実際に使うポート番号に変更すること(たとえば 8088) (余談ですが、Webサーバを持つアプリを複数入れると「80xx」がだんだん衝突しだしますよね…)

起動/終了バッチファイル作成

既に多くの情報がWebにあるので、それらを参考に

  • PHPは、FastCGI(9000/tcp)を使う設定
  • 終了時も必ずバッチファイルで落とすこと

運用時

公開ファイルはとりあえず .\html 以下にどんどん置いていけばよい

おわりに

既存の環境に何かを足しこむのは難しいです:frowning2:
特に、今回ハマったのはMySQL8が割と新しいために、関連する情報がWebになかったことです。
ただ、時間をかけて探した結果、リンク先の文章があったのでだいぶ救われました:relaxed:
やはりWeb上に知見を残していくことは、後から来た誰かにとって有益になるのだと思います。

羽生さん 風に言えば、高速道路を敷くイメージですね:red_car:

これからも誰かの知の高速化に役立てるような記事を書いていきたいと思いました
(おわり)

hideh_hash_845
最近はインスタとnoteに力入れてます。 https://www.instagram.com/hideh_hash_845/ https://note.mu/hideh_hash_845 ※発言は個人の感想であり、所属団体の意見を表明するものでもないし、効果・効能を保証するものでもありません。
https://www.instagram.com/hideh_hash_845/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした