筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

鴻蒙怪客發表於2019-03-22

之前在mac上使用自帶的apache、php配置過,都是百度東拼西湊弄,都沒記錄。這次修改成nginx環境,寫個筆記記錄一下,方便以後自己檢視,也希望能借花獻佛,幫助他人。內容都是網上拼湊的,感謝網路上各位無私奉獻的大神們。

安裝xcode-select

在通過brew安裝某些應用時需要使用到此程式進行編譯(用詞如果不準確還請大家諒解),所以為了避免安裝失敗,建議先安裝;

xcode-select --install
複製程式碼

安裝homebrew

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

[系統會在/usl/local/*這個目錄下,新增一系列檔案]

以上資訊來源:

安裝nginx及配置

命令如下

brew install nginx
複製程式碼

測試修改是否成功

sudo nginx -t
複製程式碼

啟動

sudo nginx
複製程式碼

重啟

sudo nginx -s reload
複製程式碼

安裝好nginx後直接執行nginx -s reload會出現如下錯誤:

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
出現這個錯誤的原因是,沒有nginx.pid這個檔案;根據網上查到的資料,nginx在啟動時候會在/usr/local/var/run/這個目錄下建立一個名為nginx.pid的檔案,在執行nginx -s stop的時候,會去刪除這個檔案。那麼執行nginx -s reload 進行重啟時,則會先刪除,然後在建立。這裡報錯的原因,就是該檔案不存在無法被刪除;

解決辦法: 執行啟動命令

sudo nginx
複製程式碼

開機自動啟動

方法1

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
確定homebrew.mxcl.nginx.plist檔案存在

ln -sfv /usr/local/opt/nginx/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
複製程式碼

方法2:

sudo brew services start nginx
複製程式碼

配置主機

修改本地hosts檔案

sudo vim /etc/hosts
複製程式碼

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
新增一個127.0.0.1 localhost的指向,然後在瀏覽器輸入localhost:8080,進行訪問。出現下圖表面nginx已經初步配置成功了;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
nginx初始埠為8080;

修改nginx的埠

vim /usr/local/etc/nginx/nginx.conf
複製程式碼

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
修改監聽的8080為80即可; server_name即為主機域名,這裡是localhost。大家可以在/etc/hosts裡新增一個本地ip的域名指向,然後在nginx裡新增該域名,即可通過瀏覽器輸入域名地址訪問;

nginx.conf檔案配置

cd /usr/local/etc/nginx
vim nginx.conf
複製程式碼

修改後的nginx.conf的程式碼如下

user  root owner;
worker_processes  4;

error_log  /usr/local/var/log/nginx/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid   /usr/local/var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /usr/local/var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include servers/*;
    include vhosts/*;
}
複製程式碼

nginx.conf有個備份檔案,檔名nginx.conf.default

對應的access_log、error_log、pid的具體檔案位置,需提前確認是否存在;否則nginx會報錯,無法啟動;

修改完nginx.conf儲存退出,可以執行

sudo nginx -t
複製程式碼

進行測試,檢查有無錯誤;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

如此表示配置成功;

配置虛擬主機

cd /usr/local/etc/nginx
mkdir vhosts
cd vhosts
vim www.test.com.conf
複製程式碼

虛擬主機程式碼如下

server {
    #監聽埠
    listen    80;
 
    #虛擬主機域名
    server_name  www.test.com;

    #網站根目錄
    root /Users/aaa/wroot/test;

    #定義路徑下預設訪問的檔名
    index index.php index.html;

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

        #開啟目錄瀏覽功能,可以列出整個目錄
        #autoindex on;
    }

    access_log /usr/local/var/log/www.test.com-access.log main;
    error_log /usr/local/var/log/www.test.com-error.log error;

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        fastcgi_pass     127.0.0.1:9000;
        fastcgi_index    index.php;
        include          fastcgi_params;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}
複製程式碼

獨立執行的二級欄目解析

以前用apache解析二級欄目,只需要在對應的目錄下新增.htaccess檔案,在檔案中配置規則,nginx不支援.htaccess。所以直接在對應的主機檔案裡配置

location /a {
    index index.php index.html;
    try_files $uri $uri/ /a/index.php?query_string;
}
複製程式碼

安裝php

我的mac安裝的是php7.1,新homebrew安裝php的命令如下:

先安裝php擴充套件

brew tap homebrew/homebrew-php
複製程式碼

在安裝php

brew install php@7.1
複製程式碼

採用brew安裝時,無需使用sudo命令,或通過sudo 進入超級管理員模式。 現在使用次命令安裝時,會自動安裝上一些基於php的擴充套件;

安裝好php,配置好主機後,通過瀏覽器訪問有php程式碼的頁面檔案會出現如下錯誤;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

根據翻查日誌發現是php-fpm配置問題;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

#0: *70 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www.test.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.test.com"
複製程式碼

這個錯誤是沒啟動php-fpm導致的,但是在命令終端輸入php-fpm啟動php-fpm,同樣會出現如下錯誤

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

我們先按照如下方式進行php-fpm的配置,來排除錯誤;

配置php-fpm

修改檔案

sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
複製程式碼

編輯/private/etc/php-fpm.conf檔案

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
如圖所示,修改儲存錯誤日誌的儲存路徑,請先落實該路徑下的檔案確實存在;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

進入php-fpm.d目錄

cd /private/etc/php-fpm.d
sudo cp www.conf.default www.conf
cd ..
sudo vim php-fpm.conf
複製程式碼

設定pid檔案的位置,我這裡放的絕對路徑。

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

修改完畢後,記得啟動php-fpm 命令終端直接執行

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

至此,nginx已經可以正常解析php檔案了,502錯誤也沒了

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

結果發現,頁面上phpinfo()出來的版本與php -v、php-fpm -v的版本不一致。查了資料發現

通過brew安裝php後,對應php、php-fpm的存放目錄如下:

php目錄 /usr/local/Cellar/php@7.1/版本號/bin
php-fpm目錄 /usr/local/Cellar/php@7.1/版本號/sbin
配置目錄 /usr/local/etc/php/7.1
複製程式碼

mac系統自帶了php,安裝目錄位置

php /usr/bin/php
php-fpm /user/sbin/php-fpm
複製程式碼

需要把系統自帶的php更換為通過brew install php安裝的版本,

方法一:(操作相對簡單)

brew link --force php@7.1
複製程式碼

使用這個方法時,結果出現了下面的提示

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
應該是許可權問題,網上找了下解決方法

$ sudo mkdir /usr/local/sbin
$ sudo chown -R whoami:admin /usr/local/sbin
$ brew link php71
複製程式碼

記得把whoami換成自己當前登陸的使用者名稱,執行後終於不報錯了。真的淚奔啊!~~

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

然後按照提示執行如下命令;

echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.bash_profile
複製程式碼

方法二:操作相對複雜

要麼把這兩個目錄刪除,或重新命名,否則無法使用brew 安裝的php,後面redis使用了軟鏈的方式,重新關聯了php,結果出現了php -v 和phpinfo()版本不一致的情況;

cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
複製程式碼

通常brew安裝php後,會自動在/usr/local/bin目錄下建立對php的軟連線,php-fpm就需要我們手動關聯;

ln -s /usr/local/Cellar/php\@7.1/7.1.26/sbin/php-fpm  /usr/local/bin/php-fpm
複製程式碼

建立軟連線以後,關閉終端,重新進入,分別執行php -vphp-fpm -v看下版本是否一致

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

重啟php-fpm和nginx;(我直接重啟的電腦)

開機自動啟動php-fpm

建立自動啟動檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>org.phpfpm</string>
	<key>RunAtLoad</key>
	<true/>
	<key>Program</key>
	<string>/usr/local/sbin/php-fpm</string>
</dict>
</plist>
複製程式碼

其中php-fpm的路徑,可以通過whereis php-fpmfind / -name php-fpm,which php-fpm檢視,務必保證對應目錄下的版本,與php-fpm -v的版本一致;

配置開機自動啟動

sudo chown messia:wheel ~/Library/LaunchAgents/org.php.php-fpm.plist
sudo chmod +x ~/Library/LaunchAgents/org.php.php-fpm.plist
launchctl load -w ~/Library/LaunchAgents/org.php.php-fpm.plist
複製程式碼

檢查是否啟動成功

launchctl list | grep php
複製程式碼

安裝redis及php對應redis擴充套件

採用brew安裝

brew install redis
複製程式碼

安裝目錄

/usr/local/bin
複製程式碼

檢查版本

redis-server -v
redis-cli -v
複製程式碼

後臺執行redis

brew services start redis
複製程式碼

php安裝redis的擴充套件

採用pecl命令進行安裝; pecl命令,在使用brew 安裝php時,已經為我們安裝上了,這裡我們直接使用即可。

我們先進入php的bin目錄看下命令是否存在,對應路徑如下: cd /usr/local/Celler/php@7.1/7.1.26 這裡的7.1.26為我通過brew install php@7.1安裝的php具體版本號,大家可以通過ls命令檢視資料夾下是否存在pecl命令

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

mac系統是自帶了php的,大家可以通過php -v檢查當前的php 版本是否與自己安裝的一致,或者也可以在 cd /usr/local/bin 目錄,使用 ls -al 檢視

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

如若為指向brew 安裝後的目錄,可以使用如下命令,重新進行軟關聯;

cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
ln -s ../Cellar/php@7.1/7.1.26/bin/pecl pecl
複製程式碼

重新軟關聯後,記得退出客戶終端,然後在進入,執行php -v檢視版本號; 修改pecl下載目錄、快取目錄許可權,不然有可能會失敗;

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

sudo chown -R 自己賬號:分組 目錄
sudo chown -R messia:wheel /private/tmp/pear/
複製程式碼

安裝redis的擴充套件依賴

pecl install igbinary
複製程式碼

現在可以安裝redis了,命令如下:

pecl install redis
複製程式碼

靜靜等待安裝完成,確認模組是否安裝成功;

php -m|grep r
複製程式碼

如圖所示

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

在php.ini檔案中確認

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
確定so檔案的位置

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
檢視檔案

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis
至此redis安裝完畢

啟動redis服務

redis-server
複製程式碼

開機自動啟動redis命令

brew services start redis
複製程式碼

檢查redis是否啟動成功

ps -ef | grep -E 'php|nginx|redis'
複製程式碼

安裝mysql

直接使用如下命令安裝mysql即可;

brew install mysql
複製程式碼

設定mysql密碼,前提先要啟動mysql,否則會報錯。不過本地開發環境都沒配置密碼。

sudo mysql_secure_installation
複製程式碼

mysql啟動命令

sudo mysql.server start
複製程式碼

開機啟動mysql

sudo brew services start mysql
複製程式碼

重啟

brew services restart mysql
複製程式碼

phpMyAdmin相關配置

config.sample.inc.php 另存文 config.inc.php

$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
複製程式碼

筆記:MAC使用brew配置nginx、php、mysql、php-fpm、redis

解決方法,貌似8.0的必須要求有密碼; 修改my.cnf

cd /usr/local/etc
vim my.cnf
新增一行
default_authentication_plugin = mysql_native_password
複製程式碼

登陸資料庫,修改密碼

mysql -u root -p
mysql>use mysql;
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '您的密碼';
mysql>FLUSH PRIVILEGES;
複製程式碼

Laravel連結資料庫錯誤處理

SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode'  
   can't be set to the value of 'NO_AUTO_CREATE_USER'
複製程式碼

修改database.php

'mysql' => [
            'modes'  => [
                'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ],
        ],
複製程式碼

即可修復;

相關文章