1
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

手元の環境構築手順(macOS Sierra)

Last updated at Posted at 2017-01-16

2017/05/31
Chrome 58 からこの方法のSSL環境は証明書エラーになってしまいます(´д`)
こちらの記事を参考に証明書を作ることで回避できます。

いつもは最初から入っているApacheとbrewのphpとmysqlって組み合わせにしていたけど、MacBookを初期化したタイミングでnginxとphp-fpmとmariadbにしてみたので、備忘録として残す。(2017年1月16日)

Dockerとかお勉強中だけど、やっぱ手元でぶん回せる環境は欲しいよなぁ。

Homebrew

これが無いとはじまらない。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

以降、ざっと必要な物をインストール

dnsmasq

いちいち、hostsファイルをいじりたくないからね。

$ brew install dnsmasq
$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
$ echo 'address=/dev/127.0.0.1' >> /usr/local/etc/dnsmasq.conf
$ sudo brew services start dnsmasq
$ sudo mkdir /etc/resolver
$ echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/dev

参考: osxでプロダクションに限りなく近い開発環境を準備する

nginx

SSLの設定もするので、http2付けてみた。

$ brew install nginx --with-http2
$ sudo brew services start nginx

起動時は80番ポートを使うので、sudoで。
この状態で http://localhost:8080 で nginx の Hello! みたいなのが見られるはず。

細かい設定は後ほど。

php

バージョンはとりあえず最新で。php56でもphp70でも同じかな。

$ brew tap homebrew/php
$ brew install php71
$ brew services start php71

いつもは、Apache用に--with-httpd24ってつけていたけど、もう要らないね。

手元の環境でパーミッションとか面倒なので、phpの実行ユーザーを自分にしておく。

/usr/local/etc/php/7.1/php-fpm.d/www.conf
user = nemooon
group = staff

設定変えたら、再起動。

$ brew services restart php71

mariadb

特に変わったことはなし。

$ brew install mariadb
$ brew services start mariadb

初期状態はrootでパスワード無し。

この辺もMySQLと変わらないのね。

$ mysql_secure_installation

Sequel Pro で適当にユーザー作る。

yarn

最近は「にゃーん」ですね。

$ brew install yarn

これでnodeも勝手に入る。

諸々の設定

インストールは終わったところで、Laravelが動くくらいまでの設定をば。
なお、~/Workspace/に色々と溜め込む方向。

nginxの設定

まずはディレクトリを作っておく。

$ mkdir -p ~/Workspace/nginx
$ cd ~/Workspace/nginx
$ mkdir logs servers ssl

nginx.confをいじって、Workspaceの設定を読ませる。
serverディレクティブを全部コメントアウトして、
最後にあるinclude servers/*;の後に以下を追記。

/usr/local/etc/nginx/nginx.conf
include /Users/nemooon/Workspace/nginx/servers/*

http://localhost 用のVirtualHost設定を作る。

~/Workspace/nginx/localhost.conf
server {
    listen 80 default_server;
    server_name localhost;
    root /Users/nemooon/Workspace/localhost;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log  off;
    error_log  /Users/nemooon/Workspace/nginx/logs/localhost-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
       deny  all;
    }
}

fastcgi_paramsの最後に以下を追記。

/usr/local/etc/nginx/fastcgi_params
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO          $fastcgi_path_info;
fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_script_name;

設定を確認して、nginxをリロードする。

$ sudo nginx -t
$ sudo nginx -s reload

ドキュメントルートに適当にindex.htmlとかphpinfo();書いたPHPファイルを置いて確認する。

SSLの設定

ついでに https://localhost を表示出来るようにする。

まずは、ssl_dhparam用のDH交換鍵とやらを作る。

$ cd ~/Workspace/nginx/ssl
$ openssl dhparam 2048 -out dhparams.pem

お次は、localhost用の鍵を作る。

$ cd ~/Workspace/nginx/ssl
$ openssl genrsa -out localhost.key 2048
$ openssl req -new -x509 -key localhost.key -out localhost.crt -days 3650 -subj /CN=localhost
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain localhost.crt

別のホスト用の鍵を作るときはlocalhostの部分をhoge.devとかに置換でOK。

localhost.conflisten 443 ssl http2;と、出来上がった鍵の記述を追加。

~/Workspace/nginx/localhost.conf
server {
    listen 80 default_server;
    listen 443 ssl http2;
    server_name localhost;
    root /Users/nemooon/Workspace/localhost;

    ssl_certificate     /Users/nemooon/Workspace/nginx/ssl/localhost.crt;
    ssl_certificate_key /Users/nemooon/Workspace/nginx/ssl/localhost.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;
    ssl_dhparam /Users/nemooon/Workspace/nginx/ssl/dhparams.pem;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log  off;
    error_log  /Users/nemooon/Workspace/nginx/logs/localhost-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
       deny  all;
    }
}

保存した、nginxを再起動。

$ sudo nginx -t
$ sudo nginx -s reload

これで、 https://localhost が動く。
キーチェーンに登録したから、アドレスバーのところが緑色になって気分がイイネ。

でも、Apache環境も欲しい

でもさー、やっぱり Apache 案件が絶対あるよねー
ということで、8080番ポートで動かして nginx からプロキシしてみる。

httpd24 + mod_rpaf

mod_rpafでリバースプロキシ時に上手く SSL やってくれるモノがある。
ので、ここでも最初から入っている Apache には手を出さず、homebrew から入れる。

$ brew install httpd24
$ brew install mod_rpaf --with-homebrew-httpd24
$ brew services start httpd24

今回は8080番ポートなんで、起動時にsudo要らないです。

php56

どうせなら、phpも別バージョンを入れましょう。

$ brew install php56 --with-httpd24

今回は、Apache 用なので、--with-httpd24を付けましょう。
別に同じバージョンでもいいけど、この記事どおりなら、php71 --with-httpd24でインストールし直しです。

Apacheの設定

まずは、Apache を8080番ポートで動かす。
Apache も nginx 同様、Workspace にディレクトリを作る。

$ mkdir -p ~/Workspace/apache
$ cd ~/Workspace/apache
$ mkdir logs vhosts

rewrite_moduleのLoadModuleのコメントアウトを外して、
php5_modulerpaf_moduleの記述を追加。

/usr/local/etc/apache2/2.4/httpd.conf
LoadModule rewrite_module libexec/mod_rewrite.so
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
LoadModule rpaf_module /usr/local/opt/mod_rpaf/libexec/mod_rpaf.so

あと、例のごとくパーミッションとか面倒なのでユーザー変える。

/usr/local/etc/apache2/2.4/httpd.conf
User nemooon
Group staff

末尾まで来たら、php5_modulerpaf_moduleの設定を追加。
ついでに、Workspace ディレクトリ以下の設定をまとめて。

/usr/local/etc/apache2/2.4/httpd.conf
<IfModule php5_module>
	AddType application/x-httpd-php .php
	AddType application/x-httpd-php-source .phps
	<IfModule dir_module>
		DirectoryIndex index.php index.html
	</IfModule>
</IfModule>

<IfModule mod_rpaf.c>
	RPAF_Enable      On
	RPAF_Header      X-Real-Ip
	RPAF_ProxyIPs    127.0.0.1
	RPAF_SetHostName On
	RPAF_SetHTTPS    On
	RPAF_SetPort     On
</IfModule>

<Directory /Users/nemooon/Workspace>
	Options All
	AllowOverride All
	Order allow,deny
	Allow from all
	Require all granted
</Directory>

まずは http://localhost:8080 の VirtualHost の設定を追加。

~/Workspace/apache/vhosts/localhost.conf
<VirtualHost _default_:8080>
	ServerName localhost
	DocumentRoot /Users/nemooon/Workspace/localhost
	CustomLog /dev/null common env=0
	ErrorLog /Users/nemooon/Workspace/apache/logs/localhost-error_log
</VirtualHost>

と、Apache 環境用 http://legacy.dev:8080 の VirtualHost も追加。

~/Workspace/apache/vhosts/legacy.dev.conf
<VirtualHost _default_:8080>
	ServerName legacy.dev
	DocumentRoot /Users/nemooon/Workspace/legacy.dev
	CustomLog /dev/null common env=0
	ErrorLog /Users/nemooon/Workspace/apache/logs/legacy.dev-error_log
</VirtualHost>

必要な設定ができたら、保存して、Apache を再起動。

$ apachectl -t
$ apachectl restart

phpinfo();あたりを設置して、 http://localhost:8080http://legacy.dev:8080 をチェック。

nginxの設定

Apache 側はもう受ける準備が整っているので、次は nginx 側の設定を追加します。

いや、8080番ポートで問題ないなら、別にこの先不要なんですよね。
せっかく nginx がいるのなら、80番とか443番みたく、見せたいじゃあないですか。

まずは、80番ポート用のプロキシ設定。
server_nameはスペース区切りで複数 Apache 用環境のホスト名を記述すれば設定はこれだけでOK。

~/Workspace/nginx/servers/apache_proxy.conf
server {
    listen 80;
    server_name legacy.dev;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $remote_addr;
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
}

保存して、nginx をリロードする。

$ sudo nginx -t
$ sudo nginx -s reload

これで、 http://legacy.devhttp://legacy.dev:8080 にプロキシされます。

次は443番ポート用の設定です。
今回はホスト名毎に鍵の設定を追記しないといけませんので、ホスト名毎に用意しましょう。
#鍵の生成は、前述のやり方と同じです。

~/Workspace/nginx/servers/apache_proxy.conf
server {
    listen 443 ssl http2;
    server_name legacy.dev;

    ssl_certificate     /Users/nemooon/Workspace/nginx/ssl/legacy.dev.crt;
    ssl_certificate_key /Users/nemooon/Workspace/nginx/ssl/legacy.dev.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $remote_addr;
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
}

保存して、nginx をリロードする。

$ sudo nginx -t
$ sudo nginx -s reload

これで、 https://legacy.dev が、SSL接続で http://legacy.dev:8080 にプロキシされます。

以上で、Apache 環境も設定できたことですし、メデタシメデタシ。

※ 検証しながらやりましたが、記事は継ぎ接ぎなのでどっかしら間違っているかもネー。

1
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?