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

Win64 AMP スタックを一から構築する

More than 1 year has passed since last update.

目標

64-bit Windows で、XAMPP や bitnami WAMP などのパッケージに頼らずに、開発環境としての AMP スタックを一から構築する。スタックの構成は、以下のとおり。

  • Apache 2.4
  • PHP 7.3
  • MySQL の代りに MariaDB
  • および、これらの付属ユーティリティ

すべて、64-bit の最新バージョンとする。

実際の作業は 64-bit の Windows 10 で行った。

ディレクトリ

C: ドライブのルートに kamp というディレクトリを作成。kkiharak

Visula C++ ランタイム

ここで使用する Apache 2.4 や PHP 7.3 などは、Visual C++ のランタイムに依存しているので、Microsoft のサイト "最新のサポートされる Visual C++ のダウンロード" から vc_redist.x64.exe をダウンロードしてインストールする。これは、VC++ 2015(VC14), VC++ 2017(VC15), および VC++ 2019(VS16) に共通のランタイム・ライブラリである。64-bit 版を使う。

以下、Apache と PHP および PHP エクステンションのバイナリを入手するときは、VC14, VC15, または VS16 でコンパイルされた TS (Thread Safe)x64 用のものを選んでダウンロードする。

Apache 2.4

インストール

Apache 2.4.39 Win64 (httpd-2.4.39-win64-VS16.zip) を Apache Lounge からダウンロードし、C:\kamp\Apache24 に展開する。

C:\kamp\Apache24\conf\httpd.conf の中の、c:/Apache24 をすべて C:/kamp/Apache24 に変更する。

サービスに登録

アパッチをサービスとして登録する。すなわち、コマンド・プロンプトを管理者権限で起動して、以下のコマンドを実行する。

C:\kamp\Apache24\bin\httpd -k install

ApacheMonitor

ApacheMonitor をスタート・アップに登録する。

C:\kamp\Apache24\bin\ApacheMonitor.exe のショートカットをC:\Users\xxxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup に入れれば良い。

以上で、とりあえず、Apache が動くことを確認する。http://localhost/ にブラウザでアクセスして、"It Works!!" と出ればオーケー。

index.html

"動くぜ!" では味気ないので、C:\kamp\Apache24\htdocs\index.html を適当にいじる。後で加えたものを含めると、最終的には、こんな感じになった。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Apache 2.4</title>
</head>
<body>
<h1>Apache 2.4</h1>
<p>Running ... </p>
<h2>ユーティリティ</h2>
<ul>
  <li><a href="phpinfo.php">phpinfo</a></li>
  <li><a href="opcache.php">OPCache</a></li>
  <li><a href="apc.php">APCu</a></li>
  <li><a href="phpmyadmin/index.php">phpMyAdmin</a></li>
</ul>
</body>
</html>

PHP 7.3

インストール

windows.php.net から、"VC15 x64 Thread Safe (2019-Jul-30 16:05:58)" (php-7.3.8-Win32-VC15-x64.zip) をダウンロードして、C:\kamp\php 以下に展開する。

システム環境変数の PATHC:\kamp\php を追加する。そうしないと、いくつかのエクステンションが、依存する DLL を読み込むことが出来なくてスカタンする (例えば、php_curl.dll が libeay32.dll と ssleay32.dll を読み込めない) 。

Apache との連携

C:\kamp\Apache24\conf\extra\httpd-php.conf によって PHP 用設定を追加する。

httpd-php.conf
LoadModule php7_module c:\kamp\php\php7apache2_4.dll
AddHandler application/x-httpd-php .php
PHPIniDir "C:/kamp/php"
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

メインの C:\kamp\Apache24\conf\httpd.conf で上記をインクルードする。

# for PHP
Include conf/extra/httpd-php.conf

phpinfo

PHP 情報確認用に、phpinfo.php というファイルを C:\kamp\Apache24\htdocs に作成する。中身は、至極簡単。

phpinfo.php
<?php
phpinfo(
    INFO_GENERAL 
    // | INFO_CREDITS
    | INFO_CONFIGURATION
    | INFO_MODULES
    | INFO_ENVIRONMENT
    | INFO_VARIABLES
    // | INFO_LICENSE
);

これを index.html からリンクする。

ApacheMonitor で apache を再起動してから http://localhost/ にアクセスして、PHP との連携が有効になっていることを確認する。

php.ini

C:\kamp\php\php.ini-development をコピーして C:\kamp\php\php.ini を作成し、編集する。

タイムゾーンを設定する。

php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'Asia/Tokyo'

エクステンションを有効にする。まず、extension_dir を適切に設定する必要がある。

php.ini
; On windows:
extension_dir = "c:/kamp/php/ext"

そして、適当に、必要と思われるエクステンションを有効にする。

php.ini
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
extension=intl
...
extension=exif
extension=mysqli
...
extension=pdo_mysql
;extension=pdo_oci

後は、必要になったときに追加すればよいだろう。

なお、かつては extension=php_<ext>.dll と書いていたが、今は extension=<ext> と書く。従来の書き方も当面はサポートされているとのことである。

OPCache

Zend OPCache を有効にする。

php.ini
[opcache]
zend_extension=opcache
; Determines if Zend OPCache is enabled
opcache.enable=1

php_opcache.dll は、既に、ext ディレクトリに入っている。extension ではなく、zend_extension であることに注意。

https://github.com/amnuts/opcache-gui から、OPCache の Web UI を取得する。必要なのは、index.php だけ。これを opcache.php などに名前を変えて、C:\kamp\Apache24\htdocs に置いて、index.html からリンクする。

APCu

APCu のエクステンションは入っていないので、PECL website - APCu または windows.php.net - /downloads/pecl/releases/apcu からパッケージをダウンロードする必要がある。

最新である 5.1.17 の "PHP 7.3 Thread Safe (TS) X64"版 (php_apcu-5.1.17-7.3-ts-vc15-x64.zip) をダウンロードし、書庫の中に入っている php_apcu.dllC:\kamp\php\ext の中に入れる。そして、php.ini に以下を追加する。

php.ini
[APCu]
extension = apcu
apc.enabled = 1
apc.shm_size = 64M

また、PECL website - APCu から、ソースファイル (apcu-5.1.17.tgz) をダウンロードする。この中に Web UI apc.php があるので、これを C:\kamp\Apache24\htdocs に置いて、index.html からリンクする。apc.php の 33 行目以下をちょっと修正して、ログイン出来るようにしておく。

apc.php
defaults('USE_AUTHENTICATION',0);  // 1 を 0 に変更

これで無条件にログイン出来るようになる。

それではいかにも気持ちが悪いと思った場合は、ローカルの開発環境でそんなことをする必要はないと思うが、パスワードを設定すれば良い。

apc.php
defaults('USE_AUTHENTICATION',1);
...
defaults('ADMIN_USERNAME','apc');
defaults('ADMIN_PASSWORD','xxxxxxxx');

パスワードを password 以外の文字列に変えなければならないのである。

APCu_bc

使用している PHP アプリが APCu ではなく古い APC の API に依存している場合、APCu だけでは動かない。つまり、大抵のアプリは、たぶん動かない。後方互換のためのパッケージ APCu_bc が必要である。

APCu_bc の Windows 用の最新版は PECL website - APCu_bc にある。または、困ったときの
windows.php.net、その奥まったところ、windows.php.net - /downloads/pecl/releases/apcu_bc/1.0.5/ 以下に置いてある "php_apcu_bc-1.0.5-7.3-ts-vc15-x64.zip" をダウンロードする。この中に入っている php_apc.dllC:\kamp\php\ext に入れて使う。

php.ini
[APCu_bc]
extension = apc

Xdebug

Xdebug も付いてこないので、別途、xdebug.org からダウンロードする。現時点での最新バージョンは、2.7.2 である。

"PHP 7.3 VC15 TS (64 bit)" (php_xdebug-2.7.2-7.3-vc15-x86_64.dll) を取ってくる。長ったらしい名前なので、php_xdebug.dll と改名して、ext ディレクトリに置く。

php.ini に、下記を追記。これも zend_extension

php.ini
[XDebug]
zend_extension=xdebug
xdebug.remote_enable = 1

ImageMagick

ImageMagick のサイトで、64-bit 版 Windows 用の最新版をダウンロードしてインストールしても良いのだろうが、PHP から ImageMagick の API を呼び出して使う限りでは、そこまでする必要は無い。

windows.php.net - /downloads/pecl/releases/imgagick/ または PECL website - imagick で、最新のライブラリ (現時点では、3.4.4) をダウンロードする。"php_imagick-3.4.4-7.3-ts-vc15-x64.zip" を選ぶこと。

中に沢山ファイルが入っているが、必要なのは .dll だけで(と言ってもかなり沢山あるが)、これを C:\kamp\php\ext ディレクトリに入れて、C:\kamp\php\ext にパスを通せば良い。(パスを通さなくても Apache から利用する限りでは問題が無いようなのだが、何故だか、コマンドラインで php を使うときに imagick をロード出来ないと文句を言われる。)

php.ini に、下記を追記。

php.ini
[ImageMagick]
extension=imagick

MariaDB

MariaDB のサイトから、mariadb-10.4.7-winx64.msi をダウンロードして、C:\kamp\mariadb にインストールする。

インストール先を変更した以外に、次のように設定した。

■ Modify password for database user 'root'
   xxxxx
  □ Enable access from remote machines for 'root' user
□ Create An Anonymous Account
■ Use UTF8 as default server's character set

■ Install as service
   Service Name: MySQL
■ Enable networking
   TCP port: 3306
■ Optimize for transaction
   Buffer pool size: 767MB

□ Enable the Feedback plugin and submit anonymous usage information

c:\kamp\mariadb\bin をシステム環境変数の PATH に追加しておく。

コマンド・プロンプトでアクセスしてみる。

mysql -uroot -pxxxxx

ログイン出来て、show databases; などのコマンドが動けば、オーケー。

デスクトップに "HeidiSQL" のショートカットが作成されるが、ゴミ箱にポイする。どうせ、phpMyAdmin を使うんだし ... と思っていたが、コメントで "HeidiSQL" は SSH トンネルで外部の MySQL にも繋げられることを教えてもらった。便利そうなので、使ってみることにする。

となると、phpMyAdmin は不要になるが、一応、設定の仕方を書いておく。

phpMyAdmin

phpMyAdmin のサイト から、最新版 phpMyAdmin-4.9.0.1-all-languages.zip を取得して、C:\kamp\phpMyAdmin 以下に展開する。

phpMyAdmin 用の設定として C:\kamp\Apache24\conf\extra\httpd-phpmyadmin.conf を作成する。

httpd-phpmyadmin.conf
Alias /phpmyadmin /kamp/phpMyAdmin

<Directory /kamp/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /kamp/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /kamp/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /kamp/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /kamp/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

なんか、冗長な気がする。動いている linux サーバでの設定を真似したらこうなった。まあ、いいか。

メインの C:\kamp\Apache24\conf\httpd.conf で上記をインクルードする。

httpd.conf
# for phpMyAdmin
Include conf/extra/httpd-phpmyadmin.conf

index.htmlphpmyadmin/index.php へのリンクを追加して、動作を確認する。

とりあえず動くが、いろいろ文句を言われる。

config.inc.php

C:\kamp\phpMyAdmin\config.sample.inc.php をコピーして C:\kamp\phpMyAdmin\config.inc.php を作成し、編集する。

config.inc.php
$cfg['blowfish_secret'] = 'xxxxx'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

これだけで文句が少なくなるので、phpMyAdmin を使って作業を進めることが出来る。

C:\kamp\phpMyAdmin\sql\create_tables.sql をインポートして、phpmyadmin 用のデータベースを作成する。そして、作成したデータベースにアクセス可能なユーザを作成する。何も考えずに、アカウント:pma、パスワード:pmapass としたが、まあ、適当でよいだろう。

そして、これに合うように、config.inc.php を編集する。

config.inc.php
/**
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/**
 * phpMyAdmin configuration storage settings.
 */

/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = '';
$cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
...
/* 以下、同様に、コメントを外す */
...
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';

以上で、phpMyAdmin は問題なく動くようになった。

SSL

サーバ証明書の準備

CentOS 6.5 OpenSSLでオレオレ認証局 などを参考にして、オレオレ証明書を準備する。

証明書の Common Name をサーバ名、すなわち、localhost にしないと具合が悪い。

準備した証明書と鍵 (oreore.crtoreore.key) は、C:\kamp\Apache24\conf に置く。

httpd.conf の修正

以下のモジュールを追加で有効にする。

httpd.conf
LoadModule socache_dbm_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

SSL の設定ファイルを読み込むようにする。

httpd.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

httpd-ssl.conf の修正

すべての c:/Apache24c:/kamp/Apache24 に置換する。そして、サーバ証明書のファイル名を変更する。

httpd-ssl.conf
SSLCertificateFile "c:/kamp/Apache24/conf/oreore.crt"
...
SSLCertificateKeyFile "c:/kamp/Apache24/conf/oreore.key"

サーバを再起動し、https://localhost/ にアクセスして、確認する。

残りの作業

いくらか作業が残っているが、まあ、もう良いだろう。

  • バーチャル・ホストの設定
  • C:\kamp\Apache24\conf\httpd.conf のチューニング
  • C:\kamp\php\php.ini のチューニング
softark
山の中の半農半プログラマ。
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
ユーザーは見つかりませんでした