Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

Microsoft AzureにWindows2008を入れてWordPressが動作する環境を構築する その6

1 Comment wordpress,,,

その5まででなんとかWordpressが動作するようになったが、ISS用にLinuxとは別の設定を行う必要がある。

プラグインのインストール・削除ができない

プラグインが削除できない

wp-content/plugins/ フォルダに対して、Users(サーバ名\Users)へフル権限を与える

プラグインをインストール出来るようにする。

プラグインをインストールしようとすると

「インストールに失敗しました: ダウンロードに失敗しました。No working transports found」
「インストールに失敗しました: ダウンロードに失敗しました。 ファイルストリーミングの送り先となるディレクトリが存在しないか、書き込み不可になっています。」

などのエラーメッセージが出る。

wp-config.phpに84行目あたり、define('WP_DEBUG', false);の後くらいに

define('WP_TEMP_DIR','C:\temp');

を追記。
(Windows上では半角¥だが、Dreamweaverなどのエディタでは逆スラッシュであることに注意)

C:¥tempフォルダを作ってからphp.iniのupload_tmp_dirを検索し、コメントアウトして

upload_tmp_dir = "C:\temp"

と書き換える。

また、php.iniの

extension=php_curl.dll
extension=php_openssl.dll

をコメントアウトして有効化。

パーマリンクを変更すると、リンクエラーが出る

・test-site.com/index.php/slug/ といったurlになる
・リンクが500エラーになる

まずリライトモジュールをIISにインストールする。
こちらから「view all」をクリックして

ページ内で「URL Rewrite」と検索し、ファイルをダウンロード、サーバにインストールする。
インストールが済んだらServer Managerを開きなおすと「URL rewrite」のアイコンが追加されている。

その後、wordpressがインストールされているフォルダに移動し、web.configという名前で下記の内容でファイルを作る。
(LinuxではWordpressは.htaccessを自動作成するが、Windowsでは.htaccessは使えず作成されない、代わりにweb.configというファイルを使用してリライトやアクセス制限を設定する。)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
 <rules>
 <rule name="wordpress" patternSyntax="Wildcard">
 <match url="*"/>
 <conditions>
 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
 </conditions>
 <action type="Rewrite" url="index.php"/>
 </rule>
 </rules>
</rewrite>
</system.webServer>
</configuration>

再度Wordpressのパーマリンク設定に行くと、index.phpが含まれないURLに変更可能。

パーマリンクを変更すると画像がアップロード出来なくなった

デフォルトのパーマリンク(domain.com/p=1111 など)ではアップロード出来ていた画像が、
「アップロード中にエラーが発生しました。後ほど再度お試しください。」
エラーが出てアップロードできなくなる。
(デフォではユーザとしてアップロードされていた画像が、変更後アップロードした画像ファイルは、IUSRが所有者になる)

→ uploadsディレクトリに「IIS_IUSERS」の権限フルコントロールを付与する。

確認箇所

・php.iniでextension=php_gd2.dll がコメントアウトされているか?
phpinfoでGDが読み込まれているかどうかを確認。読み込まれていればphpinfoに以下の項目が表示される。

・extension_dirの読込先は合っているか? (extension_dir = "C:\phpのフォルダ\ext")

・設定変更後IISを再起動

参考・こちらこちら

メール送信エラー

メールフォームプラグインなど(当環境では主にContactform7を使用しています)を使用してメールを送信することが出来ない。

SMTPサーバをインストールする

サーバマネージャ「Features (Rolesの下)」を右クリック「Add Features」をクリック。

SMTP Server と Telnet Client にチェックを入れる。
選択時に

このようなメッセージが出るがAdd Required Role Serviceを押下。

そのままNext

そのままInstall

インストールが終わると、FeatureにSMTP ServerとTelnet Clientが追加されている。

リレーの設定

Start → Administrative Tools → IIS 6.0 Manager をクリック

[SMTP Virtual Server #1]を右クリック「Propaties」

上記手順で設定すると

メールの送信が可能になった。

参考

日本語URLが文字化けする

投稿名などをURLにしていた場合、日本語のタイトルを投稿すると自動的に日本語のURLが生成される。
が、シングルページで表示すると500エラーが出る。

※2017/12/15時点では、Window2008サーバをWindows Updateで最新版にアップデートした時点で文字化けなく表示された。
(但し、日本語と英語が混じるURLでは文字化けする。アクセスは可能))

対策

Windowsサーバでスタート→コマンドプロンプトを右クリック→Run as Administrator(管理者権限で実行)をクリック。
※レジストリの操作を伴うので、最悪サーバが壊れる可能性があります。まずWindows Updateを行って日本語URLが表示される場合は行わないほうが吉。

reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO 

と入力。
その後IISを再起動。

日本語スラッグでも

エラーが出ないで表示されるようになった。
※日本語OSの場合、レジストリの当該箇所が
「REQUEST_URI¥0PATH_INFO」
として登録されてしまうケースがあるようだが、英語OSでは
REQUEST_URI
PATH_INFO
の2行で登録される。
この場合は直接レジストリを変更すれば反映された。

未解決問題

スラッグに日本語と英語が混じる場合、自動転送エラーが出る場合がある。
僕はリダイレクトや正規表現に詳しくないので、教えてエラい人。

URLの頭が日本語、最後が英語の場合、日本語文字列が「?」にはなるが表示される。

URLの頭が英語、最後が日本語の場合、自動転送エラー。

英語が混じると、日本語URL部分が全て???になってしまう・
頭が日本語でかつ文字数が偶数の場合は文字化けしなく、奇数の時だけ文字化けするなどからマルチバイトの処理をどうこうだとは思うのだが、Azureが今日で期限切れなので、ギブアップ。

Microsoft AzureにWindows2008を入れてWordPressが動作する環境を構築する その5

No Comment wordpress,,

その4はこちら

WordPressのダウンロード、インストール

WordPress公式から最新版をダウンロードする。
ダウンロードしたWordpressをフォルダごと(C:\inetpub\wwwroot\wordpress)に展開する。

http://IPアドレス/wordpress/

にアクセスすると

http://IPアドレス/wordpress/wp-admin/setup-config.php

にリダイレクトされ、

「wp-config.php ファイルが見つかりません。開始する前にこのファイルが必要です。~」

というメッセージが出る。
wp-config-sample.phpを複製してwp-config.phpという名で保存し、テキストエディタで

/** WordPress のためのデータベース名 */
define('DB_NAME', 'database_name_here'); //作成したデータベース名(全ページではtest-db)

/** MySQL データベースのユーザー名 */
define('DB_USER', 'username_here'); //ユーザー名(初期ではroot)

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_here'); //MySQLを作成した時のパスワード

上記を修正。
するとインストール画面が表示され、

入力項目を埋めるとインストール出来る。

ログインも可能。
トップページも表示される。

その6へ。

Microsoft AzureにWindows2008を入れてWordPressが動作する環境を構築する その4

1 Comment wordpress,,

その3はこちら

phpMyAdminのインストール

phpMyAdminはPHPで作られたWEB管理ツール。
MySQLをGUIで操作できるので、Wordpressの移行などにも便利。
ファイルをサーバにアップロードして設定ファイルを編集するだけで使用可能。

こちらからダウンロード

解凍したものをC:\inetpub\wwwrootに設置。
悪意を持ってサーバにアクセスしてくるものの中には

http://domain.com/phpMyAdmin/
http://domain.com/pma/

など、フォルダ名を指定して探りを入れてくるものが多いので、

フォルダ名をユニークな名前(phpMyAdmin-q24fawrgawfgawef など)に変更しておいたほうが良いかも。

ファイルをアップロードしたのち、ブラウザから

http://IPアドレス/phpMyAdminを入れたフォルダ名/

にアクセス。

mysqli 拡張がありません。と怒られてしまう。

php.iniを開いて

extension=php_mysqli.dll
extension_dir = "C:\php-7.1.12\ext"
extension=php_mbstring.dll
mbstring.language = Japanese

 

上記を検索、コメントアウトする。
( extension_dir = "C:\phpのフォルダ\ext" に置き換え)
また、

mbstring.internal_encoding = UTF-8

内部エンコーディングをUTF-8にする。
再度アクセスすると、

ログイン画面が表示されるので、MySQLのユーザ名(初期ID = root)、パスワードを入力して実行。

ログインできた。

設定

・PHP の mbstring 拡張が見つかりませんでした。

phpMyAdminのフォルダにある「config.sample.inc.php」ファイルを「config.inc.php」という名前でコピー&リネーム。
この「config.inc.php」をテキストエディタで開く。
※改行コードが「LF」なのでWindowsのメモ帳では改行が表示されない。対応したテキストエディタを使うなり、Dreamweaverなどでリモートから編集するなどして対応。

17行目↓

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

ここに32文字以上の文字列を入力する。
後でどこかで使用する、といったものではないので、ランダムでユニークなフレーズを入れて保存。

一度phpMyAdminをログアウトすると怖めのエラーがずらりとログイン画面に出るが、かまわず再ログイン。
エラーメッセージは消える。

・mbstringの設定

「PHP の mbstring 拡張が見つかりませんでした。」
と出る場合は、
extension=php_mbstring.dll
がコメントアウトされていない。
また、UTF-8の日本語環境に対応するために
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
も変更。

・phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。

こちらを参考に

phpMyAdminのフォルダ/sql/create_tables.sql

をクライアントPCにコピペして、phpMyAdminのメニュー「インポート」をクリック。

インポート画面のアップロードファイル「参照」でcreate_tables.sqlを選択し、

そのまま下部の実行ボタンを押す。

・その他

下部の
「You are using an incomplete translation, please help to make it better by contributing.(翻訳が不完全なので協力して下さい。)」
は気にしないでOK。

データベースを作る

phpMyAdminで新しいデータベースを作成する。(例はtest-dbというデータベース名を作成)
Wordpressをインストールする場合はutf8-general-ciで作成。

その5へ。

Microsoft AzureにWindows2008を入れてWordPressが動作する環境を構築する その3

1 Comment wordpress,,,

その2はこちら

MySQLのインストール

公式サイトからインストーラを選択

インストーラはWEBインストーラでもどちらでもOK。

サインアップなどしなくてもNo thanks...を選択することでDL可能。

DownloadしたものをWindowsサーバにコピペして実行。

同意してNext。

Server onlyでmySQLサーバのみを選択。

ここでまたRuntimeがないと怒られるので、Visual Studio 2013 の Visual C++をインストール。

こちらから

ダウンロードをクリックし、

vcredist_x64.exeを選択してダウンロードし、Windowsサーバにインストール。

MySQLの画面に戻って再度Check Requirementsのページを表示すると、

要件を満たしている。
あとはそのまま

初期状態のままNextを押していく。

MySQLのパスワードを入力。
ユーザーの追加もするならここで。

そのままNext。

設定を適用して

Finish。

WindowsのスタートにMySQL 5.7 Command Line Clientが追加されているので、起動、パスワードを入れてshow databases;と打ち込むと

テーブル一覧が表示される。

その4へ。

Microsoft AzureにWindows2008を入れてWordPressが動作する環境を構築する その2

No Comment wordpress,,

その1はこちら
引き続きPHPのインストール。

IISのFastCGIを有効化する。

・PHPをFastCGIで動かすため、Web Manager(IIS)を右クリック「Add Role Services」でCGIをインストール。

PHPのインストール

phpをDL

Windowsが64bit版なので64bit版のVC14 x64 Non Thread Safeを選択。
(スレッドセーフ版とノンスレッドセーフ版の違いはこちら参照。)

Windowsリモートデスクトップへはファイルのコピペが可能(Ctrl+C→Ctrl+V)なので、サーバ側のC:\にコピペ後展開。
フォルダ名を分かりやすく(php-7.1.12など適宜)変更。

フォルダ内のphp.ini-developmentをphp.iniにリネームしてメモ帳で開き、

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0
extension=php_gd2.dll

上記項目のコメントアウト;を外し、数値をそれぞれ書き換えて保存。

IIS内のConnectionsツリーにて該当サーバを選択、Handler Mappingsから「Add Module Mapping」を開く。

ダイヤログに

Request path: *.php
Module: FastCgiModule
Executable: C:\PHP をインストールしたパス\php-cgi.exe
Name: PHP_via_FastCGI

と入力する。

Request Restrictions" ボタンをクリックし、 リクエストがファイルあるいはフォルダにマップされたときだけハンドラが起動するように設定する。
(この辺の設定はPHP公式参照)

Visual C++ 2015 Runtimeをインストール

このままではphpは動作しないので、Visual C++ 2015をMicrosoftからダウンロードしてインストールする。

ダウンロードをクリックし、

64bit版をダウンロード。
Windowsサーバのデスクトップにでもコピペして実行。

同意にチェックを入れて、Installを押す。

その後、ルートにindex.phpを作成して

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title&gt;phpinfo</title>
</head>
<body>
<?php phpinfo();>
</body>
</html>

などすると、

ブラウザ上でphpが動作する。

index.phpをデフォルトドキュメントにする

初期状態ではURLでディレクトリを指定した時に500エラーが出てしまうため、index.phpをデフォルトドキュメントに指定する。

サーバマネージャの当該Web Site(ここではDefault Web Site)をクリック、「Default Document」をWクリックして右側のActionからadd「index.php」を追加。これでブラウザからフォルダを指定したらindex.phpも読み込まれるようになる。

その3へ。