SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Project Nami の環境をオンプレミスに手動で構築してみる

3 comments

Project Nami という、SQL Server / SQL Database を使用した WordPress の環境を構築できるものがあります。
Deploy to Azure により、Azure 上にすぐに構築ができるようになっていますが、オンプレミスの環境で一から構築するとどうなるのかと思って試してみました。

今回は、Windows Server 2016 + SQL Server 2016 SP 1 (Japanese_CI_AS でデフォルトインストール) の環境に対して、構築を行っています。
# Web サーバー兼 DB サーバーの環境となります。

https://github.com/ProjectNami/projectnami に記載されていますが、SQL Server on Linux との互換性もありますので、Windows の SQL Server から Linux の SQL Server にバックアップを復元しての相互利用についてのデモ用途としても使えるのかなと。

少し古い情報かも知れませんが、Any interest in a step by step guide on how to setup Project Nami self-hosted? のスレッドの内容も参考になります。

IIS で PHP をインストールについては、手順 1:IIS および PHP のインストール からの一連の流れが参考になります。

■ IIS のインストール

最初に、PHP の実行環境を整備するために IIS をインストールします。

# IIS のインストール
Install-WindowsFeature -Name @("Web-Server","Web-CGI") -IncludeManagementTools

 

■PHP のインストール

IIS のインストールが終わったら、PHP をインストールします。

IIS で使用する場合、NTS を使用するのが一般的なようなので、http://windows.php.net/download/ からダウンロードをします。

現状、WordPress は PHP 7 以上での動作が推奨となっているようですので、以下のいずれかを使用することになるかと。

  • PHP 7.1 VC14 x64 Non Thread Safe (2017-Jan-18 21:06:20)
  • PHP 7.0 VC14 x64 Non Thread Safe (2017-Jan-18 00:32:26)

どちらのバージョンを使うかは任意ですが、以下のような形で「C:\PHP」に展開して、パスを通しておきます。

# C:\PHP に展開
Expand-Archive .\PHP\php-7.1.1-nts-Win32-VC14-x64.zip -DestinationPath C:\PHP
Expand-Archive .\PHP\php-7.0.15-nts-Win32-VC14-x64.zip -DestinationPath C:\PHP
# PATH の展開
[Environment]::SetEnvironmentVariable("Path", ($env:Path += "C:\PHP"), [System.EnvironmentVariableTarget]::Machine )

 

PHP がインストールできたら、WinCache を追加します。

PHP のバージョンによってファイルが異なりますので使用する PHP に合わせたバージョンを入手します。

WinCache 2.0 for PHP 7.1 x64

WinCache 2.0 for PHP 7.0 x64

https://www.iis.net/downloads/microsoft/wincache-extension

入手したバージョンに応じて、以下のようなコマンドで PHP の ext に展開します。

# C:\PHP\ext に展開
.\PHP\wincache-2.0.0.8-dev-7.1-nts-vc14-x64.exe /Q /T:C:\PHP\ext
.\PHP\wincache-2.0.0.8-dev-7.0-nts-vc14-x64.exe /Q /T:C:\PHP\ext

 

■IIS の PHP 向けの設定

PHP のベース部分の導入が終わったので、IIS に設定を行います。

# IIS の設定
# ハンドラーマッピングの設定
New-WebHandler -Name "PHP" -Path "*.php" -Verb "*" -Modules FastCgiModule -ScriptProcessor C:\PHP\php-cgi.exe -ResourceType File
Add-WebConfiguration "system.webServer/fastCgi" -Value @{fullPath="C:\PHP\php-cgi.exe"}
# 既定のドキュメントの設定
Add-WebConfiguration -Filter "//defaultDocument/files" -AtIndex 0 -Value @{value="index.php"}

 

IIS の設定が終わったら、phpinfo() をつかって、PHP の動作確認を実施します。

以下を実行して、情報が取得できれば、PHP を実行する環境は構築ができているかと。

# PHP のテスト
"<?php phpinfo(); ?>" | Out-File C:\inetpub\wwwroot\phpinfo.php -Encoding UTF8
(Invoke-WebRequest -Uri "http://localhost/phpinfo.php").Content

 

■PHP ドライバーのインストール

PHP から、SQL Server に接続をする際に使用する、PHP ドライバーについては、以下からダウンロードすることが可能ですので、こちらも入手をしておきます。

Microsoft SQL Server 用 PHP Driver

Microsoft Drivers for PHP for SQL Server

PHP 7.1 を使用する場合は、Github から 7.1 用のドライバーをダウンロードすることになるかと。

https://github.com/Microsoft/msphpsql/releases

ダウンロードしたモジュールは「C:\PHP\Ext」に SQL Server 向けの PHP ドライバーをコピーします。

今回使用するのは、

  • php_sqlsrv_7_nts.dll
  • php_sqlsrv_7_nts_x64.dll

のどちらかになるかと。

# 自分が DL したタイミングでは、上が 7.1 / 下が 7.0 向けのファイル名でした。

ダウンロードが設定したら PHP.ini に設定を行います。

初期ですと PHP.ini がないと思いますので、ベースとなるものをコピーし、Extension の記述を追加します。

PHP.ini を「extension=」で検索れば、追加するブロックはわかるかと。

 

# PHP.ini の作成
Copy-Item "C:\PHP\php.ini-production" "C:\PHP\php.ini"
# PHP.ini Extension を追加 (追加したバージョンの DLL について記述を追加)
extension=php_sqlsrv_7_nts.dll
extension=php_sqlsrv_7_nts_x64.dll

Extension が正常に追加できているかは、以下を実行することで確認ができます。

「sqlsrv」というモジュールが表示されていれば正常に追加できています。

# Extension のロード確認
php -m

 

■その他の PHP.ini の設定

PHP.ini にそのほかの設定を行います。

デフォルトの設定ですと、エラーログが IIS のアプリケーションプールのデフォルトの設定では、アクセス権が不足していて出力ができないと思いますので、エラーログの場所の設定を含めて変更を行っています。

今回は、C ドライブ直下に出力しています。

# PHP.ini にエラーログ設定を追加
;error_log = php_errors.log
↓
error_log = c:\translate.log
# ファイルのアクセス権
Out-File c:\translate.log -Encoding ascii
$ACL = Get-ACL c:\translate.log
$permission = @("IIS AppPool\DefaultAppPool", "Fullcontrol", "Allow")
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$ACL.SetAccessRule($accessRule)
Set-Acl c:\translate.log -AclObject $ACL

 

検証環境で、スペックが低い場合などは、PHP.ini のタイムアウト設定も変更しておくとよいかと。

# 検証環境等でスペックが低い場合は、以下の設定変更も検討
max_execution_time = 30
↓
max_execution_time = 120

 

■Project Nami の配置

これで、下準備が終わりましたので、Nami の配置を行います。

今回は、以下のコマンドでダウンロードした Nami の ZIP を展開しています。

# C:\temp が存在していることを前提の記載です。

# Nami のファイルを C:\Inetput\wwwroot に展開
Expand-Archive .\Nami\projectnami-1.5.4.zip -DestinationPath C:\temp
Move-Item C:\temp\projectnami-1.5.4\* C:\inetpub\wwwroot

 

ここまでが終わったら、「wp-config.php」の作成を行います。

# wp-config.php の作成
Copy-Item "C:\inetpub\wwwroot\wp-config-sample.php" "C:\inetpub\wwwroot\wp-config.php"

 

作成が終わりましたら、DB の接続の設定を行うため、以下の記載を変更します。

# wp-config.php のDB の設定
/** The name of the database for WordPress */
define('DB_NAME', '<db 名>');
/** MySQL database username */
define('DB_USER', '<ログイン名>');
/** MySQL database password */
define('DB_PASSWORD', '<パスワード>');

 

■DB の作成

ここまででアプリ側の設定は完了していますので DB の作成を行います。

DB 名 / ログイン名 / パスワードは適宜変更していただければ。

# DB 周りの設定
# WP 用ログインと DB の作成
$sql = @"
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
GO
"@
Invoke-Sqlcmd -ServerInstance localhost -Query $sql
Restart-Service -Name "MSSQLSERVER"
$sql =@"
CREATE DATABASE WordPress COLLATE Japanese_XJIS_100_CI_AS
GO
USE [master]
GO
CREATE LOGIN [wp-login] WITH PASSWORD=N'<パスワード>', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [WordPress]
GO
CREATE USER [wp-login] FOR LOGIN [wp-login]
GO
ALTER ROLE [db_datareader] ADD MEMBER [wp-login]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [wp-login]
GO
ALTER ROLE [db_ddladmin] ADD MEMBER [wp-login]
GO
"@
Invoke-Sqlcmd -ServerInstance localhost -Query $sql

 

■WordPres へのアクセス

ここまでの設定が完了していれば、「http://localhsot」にアクセスすることで WordPress が起動できるようになっているかと。

# 「iisreset」についてはおまじない程度に

imageimage

 

■日本語の対応

Nami は、英語版となっているため、日本語版については別途対応が必要です。

ProjectNami で Unicode 文字列を扱う

Unicode #17

最初に「wp-config.php」に UTF8 の対応を行います。

# wp-config.php の修正
putenv('ProjectNami.UTF8=1');

 

次に「wp-includes\wp-db.phpi」に N プレフィックス対応を行います。

# wp-db.php の修正
$query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
↓
$query = preg_replace( '|(?<!%)%s|', "N'%s'", $query ); // quote the strings, avoiding escaped strings like %%s

これで、CP932 に含まれていない文字についてもデータベースに格納することが可能となります。

image

WordPress の Update については、Nami 側のソースを用いる必要がありますので、そこが大きな違いかと思いますが、WordPress の日本語化用のリソースについても適用できましたので、後の操作感は通常の WordPress と同じかと。

Share

Written by Masayuki.Ozawa

2月 4th, 2017 at 7:55 pm

Posted in SQL Server

Tagged with ,

3 Responses to 'Project Nami の環境をオンプレミスに手動で構築してみる'

Subscribe to comments with RSS or TrackBack to 'Project Nami の環境をオンプレミスに手動で構築してみる'.

  1. お世話になります。
    前々から、DreamSparkでWindowsServer2016とSQL Server2016が手に入っていたので仮想マシンで何度も検証を重ねてはおりますが、データベース作成の手順の部分で $sql = @” とあり、最後に @” で閉められていますが何かの変数のようにも思えません。
    $sql = @” は何でしょうか…
    何分、触ってみるか程度で触っているので理解が全く追いついていないのが現状なのでご迷惑をおかけしているかもしれませんがご教授いただけたら幸いです。

    ピンソン

    21 4月 17 at 19:42


  2. $sql = @"
    "@

    の箇所ですが、こちらはヒアストリング (ヒア文字列) を使用した記載となります。
    今回の投稿では、SQL をスクリプト内に記載する際に改行を入れて読みやすい形にしておきたかったので、そのような記載を行うための用途ととして使用しています。

    masayuki.ozawa

    23 4月 17 at 14:22

  3. 回答の方、ありがとうございました。
     もしかしたらと思いpowershell iseの方で実行したらエラー出ずに通ったので、スクリプト処理なんだということが分かりました。
    分かりやすい説明ありがとうございました。

    ピンソン

    23 4月 17 at 15:28

Leave a Reply