見出し画像

HomebrewでApache(httpd)を再インストールして、デフォルトのを潔く削除した

前回の投稿(2021-02-12)からだいぶ間が空いたねぇ。

さて、今回は、Homebrewでhttpd、php@7.4、phpMyAdminを再インストールした話にしようか。これ、あくまで「非公開・開発」用途ですよ。

1. 標準インストールされたApache httpdの自動起動を解除

WEB ARCH LABO「Apache httpdをmacOSにHomebrewでインストールする手順」を参考に、launchctlでstop、unloadの順番で、実施します。

$ sudo apachectl stop /System/Library/LaunchDaemons/org.apache.httpd.plist
$ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist

2. httpdを再インストール

自動起動を解除した後は、httpdを再インストールします。

$ brew reinstall httpd
==> Downloading https://ghcr.io/v2/homebrew/core/httpd/manifests/2.4.48-1
Already downloaded: /Users/ログインユーザー名/Library/Caches/Homebrew/downloads/131cb1c5a6635bee208d5edf6652eac1cc517c00c003dd5756f6cd21ff6ecd77--httpd-2.4.48-1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/httpd/blobs/sha256:98e4dd6f6f5a5703ceda01113a0e712946bcd299872ea97b54eb55952d5d2fbf
Already downloaded: /Users/ログインユーザー名/Library/Caches/Homebrew/downloads/d2396955c65214aed925fc5bb8d2b872bdf88da02550e475952f721928259d34--httpd--2.4.48.big_sur.bottle.1.tar.gz
==> Reinstalling httpd 
==> Pouring httpd--2.4.48.big_sur.bottle.1.tar.gz
==> Caveats
DocumentRoot is /usr/local/var/www.

The default ports have been set in /usr/local/etc/httpd/httpd.conf to 8080 and in
/usr/local/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo.

To restart httpd after an upgrade:
  brew services restart httpd
Or, if you do not want/need a background service you can just run:
  /usr/local/opt/httpd/bin/httpd -D FOREGROUND
==> Summary
🍺  /usr/local/Cellar/httpd/2.4.48: 1,660 files, 31.5MB

「/usr/local/etc/httpd/httpd.conf」(及び、そこからincludeで呼び出される設定ファイル)の設定内容を修正する都度、「$ apachectl configtest」または「$ httpd -t」で構文チェックします。

3. hostsでバーチャルホストをバインド

it-swarm-ja「OS Xの/etc/hostsのエントリにポートを指定できますか?」に2009-08-15付けでstuart Brand氏が以下の様に回答しています。

Hostsファイルでポートを指定する必要はありません。 127.0.0.1 xyz.comのように、ポートを省略したのと同じようにエントリを作成します。

これに従って、「/private/etc/hosts」に必要な数だけ、バーチャルホストをバインドします。

# Hostデータベース
# localhostは、システムの起動時にループバックインターフェースを設定するために使用されます。このエントリは変更しないでください。
# この設定ファイルを変更した場合は、「sudo killall -HUP mDNSResponder」または「sudo dscacheutil -flushcache」を実行して、構文を確認してください。
127.0.0.1		localhost
127.0.0.1		example.jp
127.0.0.1		frontsamp.example.com
127.0.0.1		localweb01.local
127.0.0.1		apache-test.example.com
127.0.0.1		php-test.example.com
(以後、省略)

Rriver「Macでhostsファイルを編集して設定を確認する方法」に記載されてる様に、「ping」コマンドで変更が反映されてるか確認します。

$ ping apache-test.example.com
PING apache-test.example.com (127.0.0.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
(中略)

DNSキャッシュのフラッシュ方法も、上記ページに記載されてます。

$sudo dscacheutil -flushcache ←Yosemite前の方法
$sudo killall -HUP mDNSResponder

3.1. httpd.conf

「非公開・開発」用途なので、ここは、設定箇所を絞ることを優先して、「httpd.conf」で待受ポートを8080から80に仮変更しよう。その他、デフォルト値から変更したり、コメント解除したりした所に絞って転記します。

※「php 7.4」「phpMyAdmin」を(再)インストールする前の状態。

# Listen: Apacheをデフォルトではなく、特定のIPアドレスやポートに割り当てることができる。<VirtualHost>ディレクティブも参照するように。
# これを以下のように特定のIPアドレスでListenするように変更すると、ApacheがバインドされたすべてのIPアドレスに群がるのを防げる。
#Listen 12.34.56.78:80

#Listen 8080
Listen 80


# 動的共有オブジェクト(DSO)のサポート
# DSOとしてビルドされたモジュールの機能を使用するためには、対応するLoadModule行をこの場所に置かなければならない。そうすることで、その中に含まれているディレクティブが、使用される前に実際に使用できるようになる。
# 静的にコンパイルされたモジュール("httpd -l"で表示されるモジュール)はここでロードする必要はない。

#LoadModule include_module lib/httpd/modules/mod_include.so
LoadModule include_module lib/httpd/modules/mod_include.so

#LoadModule userdir_module lib/httpd/modules/mod_userdir.so
LoadModule userdir_module lib/httpd/modules/mod_userdir.so

#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so


# ServerNameは、サーバーが自身を識別するために使用する名前とポートを指定する。
これは、多くの場合、自動的に決定されますが、起動時の問題を防ぐために、明示的に指定することをお勧めする。
# ホストのDNS名が登録されていない場合は、そのIPアドレスをここに入力する。
#
#ServerName www.example.com:8080
ServerName コンピュータ名.local:80


# DocumentRoot: ドキュメントを提供するためのディレクトリ。デフォルトでは、すべてのリクエストはこのディレクトリから行われるが、シンボリックリンクやエイリアスを使って他の場所を指定することもできる。
DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">
	# Optionsディレクティブで指定できる値は、"None"、"All"、または以下の組み合わせ:
	# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
	#
	# "MultiViews"は*明示的に*指定しなければならないことに注意すること --- "Options All"では指定できない。
	#
	# Optionsディレクティブは複雑かつ重要。 http://httpd.apache.org/docs/2.4/mod/core.html#options を参照する様に。
	#
	#Options Indexes FollowSymLinks
	Options FollowSymLinks Multiviews
	MultiviewsMatch Any
</Directory>


# 補足構成
# usr/local/etc/httpd/extra/ディレクトリにある設定ファイルは、エクストラ機能の追加やサーバーのデフォルト設定の変更のために含めれる。必要に応じて変更する様に。

# ユーザーのホームディレクトリ
#Include /usr/local/etc/httpd/extra/httpd-userdir.conf
Include /usr/local/etc/httpd/extra/httpd-userdir.conf

# バーチャルホスト
#Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf

3.2. httpd-userdir.conf

ホームディレクトリの設定です。「httpd-userdir.conf」でジェネリックなものを設定し、ログインユーザー専用のものを設定した「ログインユーザー名.conf」をincludeする様に設定しています。

# ユーザーのホームディレクトリの設定
# 必要モジュール: mod_authz_core, mod_authz_host, mod_userdir

Include /usr/local/etc/httpd/users/*.conf

# UserDir: 「~ログインユーザー名」リクエストを受信した際に、ユーザーのホームディレクトリに追加されるディレクトリの名前。なお、これらのディレクトリには、以下の例のように、デフォルトのアクセスコントロールを設定する必要がある。
#UserDir public_html
UserDir Sites

# UserDirディレクトリへのアクセスを制御する。以下は、これらのディレクトリが読み取り専用に制限されているサイトの例。
#<Directory "/home/*/public_html">
#	AllowOverride FileInfo AuthConfig Limit Indexes
#	Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#	Require method GET POST OPTIONS
#</Directory>
<IfModule bonjour_module>
	RegisterUserSite customized-users
</IfModule>
<Directory "/Users/ログインユーザー名/Sites/">
	Options Indexes MultiViews FollowSymLinks Includes ExecCGI
	AllowOverride All
	Order allow,deny
	Allow from localhost
	Require all granted
</Directory>

3.3. httpd-vhosts.conf

hostsでバインドしたバーチャルホスト「apache-test.example.com」「php-test.example.com」について、設定します。

# バーチャルホスト
# 必要モジュール: mod_log_config

# マシン上で複数のドメイン/ホスト名を管理したい場合は、それらのためにVirtualHostコンテナを設定することができる。殆どの設定では、名前ベースのバーチャルホストだけを使い、サーバはIPアドレスを気にする必要がない。これは以下のディレクティブでアスタリスクで示されている。
#
# バーチャルホストの設定を行う前に、ドキュメンテーションを参照する様に。
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
#
# コマンドラインオプション「-S」を使って、バーチャルホストの設定を検証できる。

# VirtualHost例:
# 殆ど全てのApacheディレクティブがVirtualHostコンテナに入る。最初のVirtualHostセクションは、どの<VirtualHost>ブロックのServerNameや ServerAliasにもマッチしないすべてのリクエストに使われる。
#<VirtualHost *:8080>
#	ServerAdmin webmaster@dummy-host.example.com
#	DocumentRoot "/usr/local/opt/httpd/docs/dummy-host.example.com"
#	ServerName dummy-host.example.com
#	ServerAlias www.dummy-host.example.com
#	ErrorLog "/usr/local/var/log/httpd/dummy-host.example.com-error_log"
#	CustomLog "/usr/local/var/log/httpd/dummy-host.example.com-access_log" common
#</VirtualHost>
<VirtualHost *:80>
	ServerAdmin webmaster@apache-test.example.com
	DocumentRoot "/Users/ログインユーザー名/Sites/apache-test.example.com"
	ServerName apache-test.example.com
	ErrorLog "/usr/local/var/log/httpd/apache-test.example.com-error_log"
	<IfModule log_config_module>
		CustomLog "/usr/local/var/log/httpd/apache-test.example.com-access_log" common
	</IfModule>
	<Directory "/Users/ログインユーザー名/Sites/apache-test.example.com">
		Options +Indexes
		AllowOverride Fileinfo Options
		Order deny,allow
		Deny from all
		Allow From localhost 127.0.0.1
	</Directory>
</VirtualHost>

<VirtualHost *:80>
	ServerAdmin webmaster@php-test.example.com
	DocumentRoot "/Users/ログインユーザー名/Sites/php-test.example.com"
	ServerName php-test.example.com
	ErrorLog "/usr/local/var/log/httpd/php-test.example.com-error_log"
	<IfModule log_config_module>
		CustomLog "/usr/local/var/log/httpd/php-test.example.com-access_log" common
	</IfModule>
	<Directory "/Users/ログインユーザー名/Sites/php-test.example.com">
		Options +Indexes
		AllowOverride Fileinfo Options
		Order deny,allow
		Deny from all
		Allow From localhost 127.0.0.1
	</Directory>
</VirtualHost>

3.4. ヴァーチャルホストの表示確認1(apache-test.example.com)

「/Users/ログインユーザー名/Sites/」配下にフォルダ「apache-test.example.com」を追加し、下記内容の「index.html」を追加します。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>Apache Test</title>
</head>
<body>
	<p>Apacheのテスト!</p>
</body>
</html>

webブラウザーで「http://apache-test.example.com/index.html」にアクセスして、無事に想定通りに表示されることを確認しましょう。

4. php 7.4を再インストール

$ brew reinstall php@7.4
==> Downloading https://ghcr.io/v2/homebrew/core/php/7.4/manifests/7.4.21_1
Already downloaded: /Users/ログインユーザー名/Library/Caches/Homebrew/downloads/62bca05a7d0d07cfd84d5e2d384a76fca8b3f329c5c59b819e549ff0936d8d9a--php@7.4-7.4.21_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/php/7.4/blobs/sha256:c4c3d32c3389182e1cee26480c1a23aa73e4bf342dee60e0c896a9a6ad15
Already downloaded: /Users/ログインユーザー名/Library/Caches/Homebrew/downloads/dc793206c4ff5b92ae4a93e921b3b8b55abea7278594a73e4981f6143871c111--php@7.4--7.4.21_1.big_sur.bottle.tar.gz
==> Reinstalling php@7.4 
==> Pouring php@7.4--7.4.21_1.big_sur.bottle.tar.gz
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set php_ini /usr/local/etc/php/7.4/php.ini system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set php_dir /usr/local/share/pear@7.4 system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set doc_dir /usr/local/share/pear@7.4/doc system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set ext_dir /usr/local/lib/php/pecl/20190902 system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set bin_dir /usr/local/opt/php@7.4/bin system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set data_dir /usr/local/share/pear@7.4/data system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set cfg_dir /usr/local/share/pear@7.4/cfg system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set www_dir /usr/local/share/pear@7.4/htdocs system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set man_dir /usr/local/share/man system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set test_dir /usr/local/share/pear@7.4/test system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear config-set php_bin /usr/local/opt/php@7.4/bin/php system
==> /usr/local/Cellar/php@7.4/7.4.21_1/bin/pear update-channels
==> Caveats
ApachePHPを有効にするには、httpd.confに以下を追加し、Apacheを再起動する:
    LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

最後に、DirectoryIndexにindex.phpが含まれていることを確認する:
    DirectoryIndex index.php index.html

php.iniとphp-fpm.iniファイルは、以下の場所にある:
    /usr/local/etc/php/7.4/

php@7.4 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have php@7.4 first in your PATH, run:
  echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> /Users/stein/.bash_profile
  echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> /Users/stein/.bash_profile

For compilers to find php@7.4 you may need to set:
  export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
  export CPPFLAGS="-I/usr/local/opt/php@7.4/include"


To have launchd start php@7.4 now and restart at login:
  brew services start php@7.4
Or, if you don't want/need a background service you can just run:
  php-fpm
==> Summary
🍺  /usr/local/Cellar/php@7.4/7.4.21_1: 497 files, 72.4MB

httpd.confに、DSOサポートを追加し、「/usr/local/etc/httpd/extra/php7.conf」をincludeする様に追記します。

LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so


Include /usr/local/etc/httpd/extra/php7.conf

続いて「/usr/local/etc/httpd/extra/php7.conf」を新規作成し、そこに再インストール時に提示された設定を記載します。

<IfModule php7_module>
	AddType application/x-httpd-php .php
	AddType application/x-httpd-php-source .phps

	# DirectoryIndex: ディレクトリがリクエストされたときに Apache が提供するファイルを設定する。
	<IfModule dir_module>
		DirectoryIndex index.php index.html
	</IfModule>
</IfModule>

4.1. ヴァーチャルホストの表示確認2(php-test.example.com)

「/Users/ログインユーザー名/Sites/」配下にフォルダ「php-test.example.com」を追加し、下記内容の「index.php」を追加します。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>Apache Test - php</title>
</head>
<body>
	<p>Apacheのテスト!</p>
	<p>TZ:<?php echo date_default_timezone_get(),PHP_EOL; ?></p>
<?php phpinfo(); ?>
</body>
</html>

webブラウザーで「http://php-test.example.com/index.php」にアクセスして、無事に想定通りに表示されることを確認しましょう。

5. phpMyAdminを再インストール

$ brew install phpmyadmin
Updating Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/core/phpmyadmin/manifests/5.1.1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/phpmyadmin/blobs/sha256:3cfa3633d65f13cc01ea68e30138f4cba9d11f0f2335db7c92b49e441
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:3cfa3633d65f13cc01ea68e30138f4cba9d11f0f2335d
######################################################################## 100.0%
==> Pouring phpmyadmin--5.1.1.big_sur.bottle.tar.gz
==> Caveats
ApacheでphpMyAdminを有効にするには、httpd.confに以下を追加し、Apacheを再起動する:
    Alias /phpmyadmin /usr/local/share/phpmyadmin
    <Directory /usr/local/share/phpmyadmin/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        <IfModule mod_authz_core.c>
            Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
            Order allow,deny
            Allow from all
        </IfModule>
    </Directory>
次に http://localhost/phpmyadmin を開く。
設定ファイルは、/usr/local/etc/phpmyadmin.config.inc.php 。
==> Summary
🍺  /usr/local/Cellar/phpmyadmin/5.1.1: 3,145 files, 47.8MB

httpd.confに、「/usr/local/etc/httpd/extra/httpd-phpmyadmin.conf」をincludeする様に追記します。

Include /usr/local/etc/httpd/extra/httpd-phpmyadmin.conf

続いて「/usr/local/etc/httpd/extra/httpd-phpmyadmin.conf」を新規作成し、そこに再インストール時に提示された設定を記載します。

<IfModule alias_module>
	Alias /phpmyadmin /usr/local/share/phpmyadmin
</IfModule>

<Directory "/usr/local/share/phpmyadmin/">
	Options Indexes FollowSymLinks MultiViews
	AllowOverride All

	<IfModule mod_authz_core.c>
		Require all granted
	</IfModule>

	<IfModule !mod_authz_core.c>
		Order allow,deny
		Allow from all
	</IfModule>
</Directory>

5.1. phpMyAdminの表示確認

webブラウザーで「http://php-test.example.com/index.php」にアクセスして、無事に想定通りにログインページが表示されることを確認しましょう。

この記事が気に入ったらサポートをしてみませんか?