Mac OS X Yosemite(10.10)でのphp/MariaDB/Nginx/Python開発環境の構築

MacBook Pro(OS X Yosemite)へのphp,MySQL開発環境を構築した際のメモです。

作業時期

2015/8/28~9/7頃

前提環境

MacBook Pro Early 2015
OS X Yosemite(10.10.5)

本稿で導入するアプリケーション

  • Xcode
  • Homebrew
  • MariaDB
  • php
  • Nginx

Xcode

App StoreからXcodeをインストール。

Xcodeをインストール後に以下を実行
—————————

$ xcode-select –install
$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
$ brew doctor
Your system is ready to brew.
$ brew -v
Homebrew 0.9.5 (git revision cf2e; last commit 2015-08-25)
$ brew update
Already up-to-date.
—————————

参考:MacにHomebrewをインストールする(_daisuke様、2014/7/28)
http://qiita.com/_daisuke/items/d3b2477d15ed2611a058

MariaDB

参考:
Building MariaDB on Mac OS X Using Homebrew
https://mariadb.com/kb/en/mariadb/building-mariadb-on-mac-os-x-using-homebrew/

MariaDBのインストール

$ brew install mariadb
$ unset TMPDIR
$ mysql_install_db

MariaDBの起動

$ mysql.server start
Starting MySQL
. SUCCESS!
$ mysql.server status
SUCCESS! MySQL running (643)

セキュリティ関連の初期設定

$ mysql_secure_installation

Enter current password for root (enter for none): (空Enter)
OK, successfully used password, moving on…

Set root password? [Y/n] Y
New password:  新しいパスワード
Re-enter new password: 新しいパスワード
Password updated successfully!

Remove anonymous users? [Y/n] Y
… Success!

Disallow root login remotely? [Y/n] Y
… Success!

Remove test database and access to it? [Y/n] Y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

Reload privilege tables now? [Y/n] Y
… Success!

Cleaning up…
All done! 

MariaDBへの接続テスト

$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.0.21-MariaDB Homebrew

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
+——————–+
3 rows in set (0.00 sec)

MariaDB [(none)]> quit
Bye

ログイン時にMariaDBが自動起動するよう設定

$ ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents

OSを再起動し、ログイン後にMariaDBが自動起動することを確認

Nginx

参考サイト

Homebrewをインストール!ついでにNginx, PHP-FPM, MySQLも!
(takeshi81様、2015/6/4)
http://qiita.com/takeshi81/items/0f21a9469be296aea5bd

Mac に導入した nginx を起動/停止/再起動する((kakku22様、2013/12/12)
http://kakakakakku.hatenablog.com/entry/2013/12/12/183806

Nginxのインストール

$ brew install nginx
$ which nginx
/usr/local/bin/nginx

Nginxの手動起動

$ sudo nginx

http://localhost:8080/
にてNginxのTopページが表示されることを確認した

Nginxの手動終了

$ sudo nginx -s stop

http://localhost:8080/をリロードし、サイトが表示されないことを確認した

Nginxの再起動

$ sudo nginx -s reload

Nginxのプロセス確認

$ ps -ef | grep -e nginx
0687 1 0 10:39AM ?? 0:00.00 nginx: master process nginx
-2 704 687 0 10:41AM ?? 0:00.00 nginx: worker process

ログイン時にNginxが自動起動するよう設定

$ ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
/Users/kowloon/Library/LaunchAgents/homebrew.mxcl.nginx.plist -> /usr/local/opt/nginx/homebrew.mxcl.nginx.plist

OSを再起動し、ログイン後にNginxが自動起動することを確認した
・・・が、その後、3回に1回程度は自動起動に失敗していることが判明。
自動起動に失敗していたら上記の「 sudo nginx 」コマンドで手動起動でとりあえず対処。 

Nignxの設定ファイル等

デフォルトのWWWルート

$ ls /usr/local/var/www/
50x.html index.html

Nginxの設定ファイル

/usr/local/etc/nginx/
$ ls
fastcgi.conf koi-utf nginx.conf servers
fastcgi.conf.default koi-win nginx.conf.default uwsgi_params
fastcgi_params mime.types scgi_params uwsgi_params.default
fastcgi_params.default mime.types.default scgi_params.default win-utf

$ ls -l
-rw-r–r– 1 kowloon admin 1034 8 29 20:13 fastcgi.conf
-rw-r–r– 1 kowloon admin 1034 8 29 20:13 fastcgi.conf.default
-rw-r–r– 1 kowloon admin 964 8 29 20:13 fastcgi_params
-rw-r–r– 1 kowloon admin 964 8 29 20:13 fastcgi_params.default
-rw-r–r– 1 kowloon admin 2837 8 29 20:13 koi-utf
-rw-r–r– 1 kowloon admin 2223 8 29 20:13 koi-win
-rw-r–r– 1 kowloon admin 3957 8 29 20:13 mime.types
-rw-r–r– 1 kowloon admin 3957 8 29 20:13 mime.types.default
-rw-r–r– 1 kowloon admin 2680 8 29 20:13 nginx.conf
-rw-r–r– 1 kowloon admin 2680 8 29 20:13 nginx.conf.default
-rw-r–r– 1 kowloon admin 596 8 29 20:13 scgi_params
-rw-r–r– 1 kowloon admin 596 8 29 20:13 scgi_params.default
drwxr-xr-x 2 kowloon admin 68 8 29 20:13 servers
-rw-r–r– 1 kowloon admin 623 8 29 20:13 uwsgi_params
-rw-r–r– 1 kowloon admin 623 8 29 20:13 uwsgi_params.default
-rw-r–r– 1 kowloon admin 3610 8 29 20:13 win-utf

→「ファイル名.default」という名前で各設定ファイルのデフォルト状態がバックアップされていた。

Nginxの設定ファイル修正

エラーログの出力先指定

ログは/var/log配下で集中管理したいので、以下の通り変更。

  1. Nginxのエラーログ出力を有効化
    /usr/local/etc/nginx/nginx.conf
    ============
    error_log  /var/log/nginx/error.log;
    ============
     
  2. エラーログ出力先を準備

    $ sudo mkdir /var/log/nginx
    $ ls -ld /var/log/nginx/
    drwxr-xr-x 2 root wheel 68 9 30 16:29 /var/log/nginx/
     
    $ sudo chown kowloon /var/log/nginx/
    $ sudo chgrp admin /var/log/nginx/
    $ ls -ld /var/log/nginx/
    drwxr-xr-x 2 kowloon admin 68 9 30 16:29 /var/log/nginx/
     
    $ touch /var/log/nginx/error.log
    $ chmod 755 /var/log/nginx/error.log
    $ ls -l /var/log/nginx/error_log
    -rw-r–r– 1 kowloon admin 0 9 30 17:12 /var/log/nginx/error.log
     

  3. Nginxを再起動
    $ sudo nginx -s reload
    $ ps -ef | grep nginx
     

  4. 再起動後、ログファイルにエラーが記録されることを確認した。
    $ tail -n 1 /var/log/nginx/error.log
    2015/09/30 17:17:12 [error] 1029#0: *1 FastCGI sent in stderr: “Access to the script ‘/Users/kowloon/www/index.html’ has been denied 

Nginxからphpを利用するための設定

※本設定と並行して、php-fpm側の設定も実施すること。

/usr/local/etc/nginx/nginx.conf
以下を追記
==============
location ~ \.php$ {
root /Users/kowloon/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
==============

また、「.html」ファイル内のphpスクリプトを実行できるようにするため、以下も併せて追記する。
================
location ~ \.html$ {
root /Users/kowloon/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
================

Nginxのルートディレクトリに以下2ファイルを配置
index.php(中身はphpinfo())
index.html(中身はphpinfo())

Nginxを再起動
$ sudo nginx -s reload

再起動後、
http://localhost/index.php
にアクセスし、phpinfoが表示されることを確認した。

http://localhost/index.html
にアクセスし、phpinfoの画面が表示されることを確認した。

php

OS Xデフォルトでのphpインストール状況

OS Xにはデフォルトでphpがインストールされていた

==================
$ php -v
PHP 5.5.27 (cli) (built: Jul 23 2015 00:21:59)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
==================

コンフィグはデフォルト状態のものが/etc 直下にあり
$ ls -l /etc/php*
-rw-r–r– 1 root wheel 22488 5 20 02:10 /etc/php-fpm.conf.default
-r–r–r– 1 root wheel 69266 5 20 02:11 /etc/php.ini.default

php5.6のインストール

phpもHomebrew管理下におきたいので、改めてphp5.6をインストール

参考
macにnginx + php-fpmを導入する際の手順(makotok7様、2015/2/9) http://qiita.com/makotok7/items/2ca1c50d37cb2f8f3972

php5.6をHomebrewからインストール
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/php
$ brew install php56 –with-fpm

phpの自動起動設定

$ ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
/Users/kowloon/Library/LaunchAgents/homebrew.mxcl.php56.plist -> /usr/local/opt/php56/homebrew.mxcl.php56.plist

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

phpの設定ファイル所在

Homebrewでインストールしたphpの設定ファイルは以下に存在する。

/usr/local/etc/php/(phpバージョン番号)/

$ ls -la /usr/local/etc/php/5.6/
drwxr-xr-x 8 kowloon admin 272 9 30 15:57 .
drwxr-xr-x 3 kowloon admin 102 9 7 11:29 ..
-rw-r–r– 1 kowloon admin 1540 9 7 11:29 pear.conf
-rw-r–r– 1 kowloon admin 22932 9 30 15:57 php-fpm.conf
-rw-r–r– 1 kowloon admin 22858 9 7 11:29 php-fpm.conf.default
-rw-r–r– 1 kowloon admin 72312 9 7 11:29 php.ini

phpの設定ファイル編集

タイムゾーンの明示的な指定

タイムゾーンを指定しない状態でphpスクリプト内でdate関数を実行するとエラーで怒られる(下記)

Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

スクリプトにdefault_timezone_setを都度書くのではなく、phpの設定ファイルにあらかじめ指定しておく。

/usr/local/etc/php/5.6/php.ini
=================
[Date]
date.timezone = Asia/Tokyo
=================

ログ出力先の指定

デフォルトでは以下にログが出力される。
/usr/local/opt/php56/var/log/php-fpm.log

 ログは/var/log配下で集中管理したいので、以下の通り変更。

  1. php-fpmのログを有効化
    /usr/local/etc/php/5.6/php-fpm.confに以下追記
    ==========
    error_log = /var/log/php-fpm/php-fpm.log
    ==========
     
  2. ログ出力先を準備
    $ sudo mkdir /var/log/php-fpm
    $ ls -ld /var/log/php-fpm/
    drwxr-xr-x 2 root wheel 68 9 30 16:34 /var/log/php-fpm/

    この状態ではPermission不足でログに書き込めない
    (php-fpmの自動起動時に以下のエラーが出る)
    [30-Sep-2015 16:35:31] ERROR: failed to open error_log (/var/log/php-fpm.log): Permission denied (13)
     

  3. ログディレクトリのパーミッションを変更
    $ sudo chown kowloon /var/log/php-fpm/
    $ sudo chgrp admin /var/log/php-fpm/
    $ ls -ld /var/log/php-fpm/
    drwxr-xr-x 3 kowloon admin 102 9 30 16:48 /var/log/php-fpm/

    $ touch /var/log/php-fpm/php-fpm.log 
    $ ls -l /var/log/php-fpm/php-fpm.log
    -rw-r–r– 1 kowloon admin 0 9 30 16:48 /var/log/php-fpm/php-fpm.log

  4. php-fpmの再起動後、ログに書き込まれることを確認。

「.html」ファイルでもphpスクリプトが実行されるよう設定

php-fpmの設定を以下の通り変更

/usr/local/etc/php/5.6/php.ini
====================
security.limit_extensions = .php .php3 .php4 .php5 .html
====================
(コメントアウトを解除して、末尾に.htmlを追記している)

最後にphp-fpmを再起動
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
$ ps -ef | grep php-fpm

 

Python3

OS XデフォルトでのPythonインストール状況

OS XにはデフォルトでPython2.7.10がインストールされていた

$ python –version
Python 2.7.10

Python3.xのインストール

HomebrewからPython3をインストール

$ brew install python3
$ python3 –version
Python 3.4.3

以下、必要なライブラリを追加でインストール

BeautifulSoup4

$ pip3 install beautifulsoup4

インポートする際は「bs4」と指定する

>> import bs4

Flask

以下のサンプルコードで動作を確認

 

html5lib

【コマンド】
$ pip3 install html5lib

【実機ログ】

 

Numpy

$ pip3 install numpy

Pandas

$ pip3 install pandas

Pandasの動作確認

Pandas-datareader

参考:
sinhrks様、Python pandas で日本の株価情報取得とローソク足チャート描画
http://sinhrks.hatenablog.com/entry/2015/02/04/002258

上記サイトのコードを試そうとしたところ、
pandas.io.dataは利用不可能で「pandas-datareader」を使うように指示あり。

>>> import pandas.io.data as web

/usr/local/lib/python3.4/site-packages/pandas/io/data.py:33: FutureWarning:
The pandas.io.data module is moved to a separate package (pandas-datareader) and will be removed from pandas in a future version.
After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), you can change the import from pandas.io import data, wb to from pandas_datareader import data, wb.
FutureWarning)

そこで、pandas-datareaderをインストール

【コマンド】
$ pip3 install pandas-datareader

【確認】

 

lxml

【コマンド】
$ pip3 install lxml

【実機ログ】

 

matplotlib

【コマンド】
$ pip3 install matplotlib

【実機ログ】

 

MySQL Connector

【コマンド】
$ pip3 install –allow-external mysql-connector-python mysql-connector-python

【実機ログ】

mysql-connector-pythonの動作確認

テスト用DB・テーブルの作成

 

uWSGI

【コマンド】
pip3 install uwsgi

【実機ログ】