Mac 下 Nginx、MySQL、PHP-FPM 的安裝配置

remotesupport發表於2014-09-17

PS:下面的安裝都是基於 homebrew,如果不熟悉或者還沒安裝有 homebrew 的話,可以檢視這篇關於 homebrew 的介紹

安裝nginx

用 brew 一鍵安裝 nignx:

1
brew install nginx

如果需要安裝其他 nginx 的版本,可以 "brew edit nginx" 開啟修改 nginx 的安裝資訊包 formula,預設會用 vi 開啟,在檔案開頭處修改 nginx 相應版本的下載地址就行。

brew 執行完後,nginx 就安裝好了。可以用以下指令對 nginx 進行操作:

1
2
3
4
5
6
#開啟 nginx
sudo nginx
#重新載入配置|重啟|停止|退出 nginx
nginx -s reload|reopen|stop|quit
#測試配置是否有語法錯誤
nginx -t

詳細 nginx 幫助資訊:

1
2
3
4
5
6
7
8
9
10
11
12
13
nginx 版本: nginx/1.2.6
用法: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
 
選項:
    -?,-h           : 開啟幫助資訊
    -v              : 顯示版本資訊並退出
    -V              : 顯示版本和配置選項資訊,然後退出
    -t              : 檢測配置檔案是否有語法錯誤,然後退出
    -q              : 在檢測配置檔案期間遮蔽非錯誤資訊
    -s signal       : 給一個 nginx 主程式傳送訊號:stop(停止), quit(退出), reopen(重啟), reload(重新載入配置檔案)
    -p prefix       : 設定字首路徑(預設是:/usr/local/Cellar/nginx/1.2.6/)
    -c filename     : 設定配置檔案(預設是:/usr/local/etc/nginx/nginx.conf)
    -g directives   : 設定配置檔案外的全域性指令

開啟 nginx 後,預設的訪問埠 8080,如果要改為常用的 80 埠,則要修改 "/usr/local/etc/nginx/nginx.conf" 下監聽(listen)埠值。

預設的檔案訪問目錄(root)是 "/usr/local/Cellar/nginx/1.2.6/html"(這裡的1.2.6是安裝的nginx的版本,資料夾名以安裝的nginx版本為準)。

把 nginx 設定為開機啟動執行:

1
2
3
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/nginx/1.2.6/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

不過試了一下,不是超級使用者登陸,而是普通使用者登陸,並且監聽的埠在1024以下的(例如把預設的8080埠改為了80埠),nginx 開機是啟動不了。因此,要 nginx 開機啟動的話,需要給予它管理員許可權:

1
2
sudo chown root:wheel /usr/local/Cellar/nginx/1.2.6/sbin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.2.6/sbin/nginx

安裝mysql

1
brew install mysql

在上面 brew 安裝完後,會在終端上顯示一些初始配置 mysql 的資訊,如下:

1)初始安裝 mysql 的一些配置資料庫(例如:information_schema、mysql)

1
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

執行完後,就可以在終端裡執行 "mysql",直接進入mysql資料庫裡。對,不用輸入密碼,可以直接連線,初始預設是可以匿名訪問的。超級使用者 "root" 也是沒設密碼,要設密碼的話可以執行下面指令

1
/usr/local/opt/mysql/bin/mysqladmin -u root password 'new-password'

現在訪問 mysql 還是不用密碼就可以連線,如果要設定一些登陸密碼的安全訪問限制,則需執行下面的 mysql安全安裝指令

1
/usr/local/opt/mysql/bin/mysql_secure_installation

主要是設定修改root密碼(設定過了可以不用設定,略過)、刪除匿名訪問、刪除root網路訪問、刪除test資料庫。指令執行完後,登陸mysql就需要密碼驗證了

1
mysql -u root -p

開機啟動 mysql

1
2
3
mkdir -p ~/Library/LaunchAgents/
cp /usr/local/Cellar/mysql/5.5.28/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

如果要停止 mysql 服務則:

1
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

設定 MySQL 的配置檔案 my.cnf(預設在 /usr/local/Cellar/mysql/5.5.28/my.cnf,最好把配置檔案移到 /etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf 這些位置之一,避免以後升級版本後 MySQL 配置被覆蓋):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[client]
port = 3306
 
 
 
[mysqld]
port = 3306
server_id = 1
character-set-server = utf8
default-storage-engine = INNODB
socket = /tmp/mysql.sock
skip-external-locking
 
key_buffer = 16K
query_cache_limit = 256K
query_cache_size = 4M
max_allowed_packet = 1M
table_open_cache = 128          # 表快取的數目,一般是 max_connections 的倍數
 
max_connections = 32
thread_concurrency = 2
 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
 
#skip-bdb
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
 
 
[mysqldump]
quick
max_allowed_packet = 16M
 
 
 
[mysql]
no-auto-rehash
default-character-set = utf8
 
 
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
 
 
 
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
 
 
 
[mysqlhotcopy]
interactive-timeout

至此,mysql安裝完畢。

安裝php-fpm

Mac是預裝了php,不過很多擴充套件都沒安裝,目測最多隻能在終端裡執行下php指令,所以我選擇重新安裝php。由於 brew 預設是沒有 php 安裝,所以要使用 “brew tap” 來安裝 brew 的第三方程式包,這裡使用 josegonzalez 的php安裝包,具體操作如下:

1
2
brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php

執行完後,就可以用 brew 安裝php了。這裡php有幾個版本可以安裝,具體可以執行 "brew search php" 檢視一下有什麼php版本可以安裝,一般會有“php52、php53、php54”版本,我安裝的是最新的php5.4版本。由於PHP5.4版本已經內嵌了 FPM(FastCGI Process Manager),在安裝選項裡標明就行,本人 php 的安裝配置指令如下:

1
brew install php54 --with-imap --with-tidy --with-debug --with-pgsql --with-mysql --with-fpm

更多的安裝選項可以通過 "brew options php54" 檢視。指令執行完後,php 跟 php-fpm 就安裝好了。

由於是重灌php,之前系統預裝的php還沒解除安裝,因此在終端呼叫php時,還是以之前系統的php版本做解析,所以這裡需要修改path,指定 php 的解析路徑。在~/.bashrc(沒有則建立)最後加入一行:

1
export PATH="$(brew --prefix php54)/bin:$PATH"

新增之後再執行一下source,使之生效

1
source ./.profile

OK,php-fpm安裝完成。

要修改配置 php 或者 php-fpm 的話,可以修改 "/usr/local/etc/php/5.4/php.ini" 、 "/usr/local/etc/php/5.4/php-fpm.conf"。

啟動 php-fpm 的話就直接在終端裡執行 "php-fpm",預設開啟 php-fpm 會顯示一個狀態 shell 出來,也可以把 php-fpm 的配置檔案裡的 "daemonize = no" 改為 "daemonize = yes",就會以後臺守護程式的方式啟動,對於剛修改的配置檔案,可以執行 "php-fpm -t" 來檢測配置有沒有問題。

開機啟動 php-fpm(下面的 5.4.9 是當前安裝 php 的具體版本號):

1
2
3
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/php54/5.4.9/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist

為了方便,寫了個啟動、關閉、重啟 php-fpm 的 shell 指令碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/sh
 
 
param=$1
 
start()
{
    fpms=`ps aux | grep -i "php-fpm" grep -v grep awk '{print $2}'`
    if [ ! -n "$fpms" ]; then
        php-fpm
        echo "PHP-FPM Start"
    else
        echo "PHP-FPM Already Start"
    fi
}
 
stop()
{
    fpms=`ps aux | grep -i "php-fpm" grep -v grep awk '{print $2}'`
    echo $fpms | xargs kill -9
 
    for pid in $fpms; do
        if echo $pid | egrep -q '^[0-9]+$'then
            echo "PHP-FPM Pid $pid Kill"
        else
            echo "$pid IS Not A PHP-FPM Pid"
        fi
    done
}
 
case $param in
    'start')
        start;;
    'stop')
        stop;;
    'restart')
        stop
        start;;
    *)
        echo "Usage: ./phpfpm.sh start|stop|restart";;
esac

設定 Nginx 的 PHP-FPM 配置

開啟 nginx 預設註釋掉的php location設定,修改如下(具體配置引數,例如路徑,這裡以我本地安裝為準):

1
2
3
4
5
6
7
location ~ \.php$ {
    fastcgi_intercept_errors on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/local/Cellar/nginx/1.2.6/html$fastcgi_script_name;
    include        /usr/local/etc/nginx/fastcgi_params;
}

OK,這樣就可以在訪問目錄下(預設是/usr/local/Cellar/nginx/1.2.6/html)執行 php 檔案了。嗯,趕快輸出一下 "phpinfo()" 吧:)

一些問題

1
2
3
4
5
Error: SHA256 mismatch
Expected: 3fe780e5179e90c4d37276e79acc0d0692f1bc0911985af694b92c664c0ef3c4
Actual: f9dbbb4e5ecd98010a3c4686d0713dcda6a77223fb9d05537089b576ab8f7fdd
Archive: /Library/Caches/Homebrew/php54-5.4.28
To retry an incomplete download, remove the file above.

這裡是 PHP 5.4.28 原始碼地址出錯的問題,修改檔案 /usr/local/Library/Taps/josegonzalez/homebrew-php/Formula/abstract-php-version.rb 下 Php54Defs 的原始碼地址 PHP_SRC_TARBALL 的值,這裡改用http://mirrors.sohu.com/php/php-5.4.28.tar.bz2 這個地址。

相關文章