OS : Mojaveへアップデートしたらlocalhostの設定が変わってしまった件。対処方法。

localhost, mac, mojave, os, サーバー, ローカル

みなさん、こんにちは。
いつも通り今日も研究しよーって思ってローカルサーバーにあるファイル開こうと思ったら404エラーが出て焦ったPQTomです。
マジで焦りました。
私、何事も期間が迫らないと本気を出せないタイプなもんで。。。
進捗発表前日の出来事だったので
これは夢か
と思いました。

さて、なぜこんなことになったのか。
それは

MacOSをアップデートしたから

です。
最近アップデートありましたよね。また。

High Sirrera → Mojave

これで私はトンデモないミスを犯しました。

発表前日にアップデートする

ってこと。
ありえないミスです。
そんな大きなアップデートではないだろうとタカを括ってました。。。

ローカルサーバーの設定全部持ってかれました。

いつもローカル環境でテストしているこの私にとっては

最悪

でした。

そこで今回はどのようにして元の設定に戻していったのか話していこうと思います。

目次

目標(ローカル環境設定変更後)

今回の設定についてですが、

Mac
OS:mojave

を使用していることを前提に

パスを変更して、よくある

Sitesディレクトリにアクセス

できるところまで行っていきます。

ドキュメントルート(Document Root)の変更

ドキュメントルート(Document Root)とは

そもそもドキュメントルートとは

ウェブサイトのファイルを置いておくディレクトリ

です。
つまり、

localhostに誰かが訪ねてきた時、アクセスされる場所

のことですね。
このドキュメントルートは二つあります。

システムレベルドキュメントルート(System level document root)

一つ目が

システムレベルのドキュメントルート

です。
ここは、

localhostに接続するとデフォルトでアクセスされる場所

ですね。
なので、何も設定していない人はlocalhost接続時に

it works!

が出るかと思いますが、それはここのファイルにアクセスしているからですね。
Macでは基本

/Library/WebServer/Documents/

ですね。
一度アクセスしに行ってみてはどうでしょう。

ユーザーレベルドキュメントルート(User level document root)

ユーザーが作るやつですね。
これがいわゆる

Sites

と呼ばれるものです。
このディレクトリは

ユーザーが自ら作成する

もので、作成してルートを設定するじ感じになります。

では、始めて行きましょう!!

Sitesディレクトリ作成

localhostに接続した時に動くSitesディレクトリの作成です。
このディレクトリは

ユーザーホームディレクトリ内

に作成します。
ターミナル開いて始めの場所です。
そこで

$ mkdir Sites

はい。作成できましたね。
きっと

/Users/username(自分のユーザー名)/Sites

にあるはずです。

ユーザー名.confの作成

次に作ったSitesディレクトリの設定をするためのファイルを作成します。
それが

ユーザー名.conf

です。
ユーザー名は自分のユーザー名を使用してください。

$ whoami

で自分の名前がわからない人はわかるので参考に。
で、このconfファイルを作る場所なんですけど、

/etc/apache2/users/

のところで作ってください。
なので

$ cd /etc/apache2/users/
$ sudo vi ユーザー名.conf

という感じです。
Vimを使っていない人は他のエディターで良いです。もちろん。
中身なんですけど、

AllowOverride All
Options Indexes MultiViews FollowSymLinks
Require all granted

を書いておきます。

Webサーバーソフトウェアの設定

Macには標準で

Apacheが入っています。

なので、そのApacheの設定ですね。
まず、Apacheのディレクトリまで行きます。

$ cd /etc/apache2/

で、ここに

httpd.conf

があるので、これを書き換えます。
ただ、ここは設定で重要な部分となるので、変なことをすると

Webサーバーが動かなくなります。

そうならないために

バックアップを取っておきましょう。

$ sudo cp httpd.conf httpdbackup.conf

これで、動かなくなっても、元ファイルに戻せばいいのでバッチリです。
では、書き換えていきましょう。

$ sudo vi httpd.conf

書き換えると言っても、いろいろな設定が書かれているファイルなので、ただ、

コメントアウトを削除したり付け足したりするだけです。基本。

LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule rewrite_module libexe
Include /private/etc/apache2/extra/httpd-userdir.conf

この6つを探して、コメントアウトを削除します。

次は、

DocumentRoot "/Library/WebServer/Documents"

これを
コメントアウトします(#をつける)
なぜなら

ドキュメントルートは/Users/ユーザー名/Sites/

にしたいからですね。なのでさらに、

DocumentRoot "/Users/ユーザー名/Sites/"

を付け足します。
すぐ下くらいに書いとけば後からもわかりやすいでしょう。
ユーザー名は自分の名前を使ってくださいね。
あと、そのまま下にスクロールしていくと

AllowOverride None

となっている部分があるのでそこを

AllowOverride All

に直してください。

これが終わったら、保存してこのファイルへの用はなくなります。

次に

httpd-userdir.conf

の方も設定します。
まず

$ cd /etc/apache2/extra/

でファイルのあるディレクトリへ。
これも非常に重要なファイルなのでバックアップはしておきましょう。
この中にファイルがあるのでファイルを開きます。

$ sudo vi httpd-userdir.conf

ファイルの中の

Include /private/etc/apache2/users/*.conf

という部分があるのでコメントアウトを消してください。

apacheのテスト

ここまで、全ての作業が終了したら、apacheが正常に動くかテストします。

$ sudo apachectl configtest

これで、文法エラーが発生していないかとかわかるので、何もなければ

Syntax OK

と出力されるはずです。

サーバーの再起動

問題なければサーバーを再起動します。

$ sudo apachectl restart

もともと起動していなかった人は起動させてください。

$ sudo apachectl start

おまけにサーバーの停止についても

$ sudo apachectl stop

これで、localhost接続時に自分の作ったSitesディレクトリにアクセスするようになったはずです。
もし、変化なかった場合は

パソコンごと再起動

してみてください。
僕はそれで直りました。

まとめ

今回、localhostで接続時、自分のユーザーディレクトリへアクセスするように設定を変更してきました。
ちょっと文章が長くなってしまい、わかりずらい部分もあったかと思いますが、申し訳ございません。
ここらへんの設定を変更する時は十分に気をつけて行ってくださいね。

タイの話を続けたかったんですが、さすがにやばかったので忘れないうちに書きました。
これでまた、タイについての話に安心して戻ることができそうです。
ではまた。

でわでわ。

参考資料

[1]. MacOS MojaveのApacheでSitesディレクトリを使ってlocalhostを特定アカウントで利用する方法, https://pqtomblog.com/wp-admin/post.php?post=749&action=edit, Qiita
[2]. How to install Apache, MySQL, PHP on macOS Mojave 10.14, https://www.dyclassroom.com/howto-mac/how-to-install-apache-mysql-php-on-macos-mojave-10-14, CLASSROOM
[3]. Document Root, https://www.karelia.com/support/sandvox/help/z/Document_Root.html, Sandvox Help