在 macOS 作業系統中架設 PHP 開發環境,通常會使用 Homebrew 進行安裝。 Homebrew 是一款開源的套件管理工具,能夠讓你在 macOS 上更加輕鬆地安裝軟體套件,從而提高你的工作效率。 Homebrew 提供了一個方便的方式來管理你的軟體套件,使你可以輕鬆地安裝、更新和移除套件,有點類似 Ubuntu 中的 apt 指令。 本文將使用 Homebrew 工具安裝 Nginx、PHP 及 MariaDB,這是我自己常用的組合,在安裝上有問題的話,都歡迎留言討論。

安裝 Homebrew

以下連結為 Homebrew 官方網站,提供參考:

Homebrew 安裝方法非常簡單,只要在終端機執行以下指令即可。

            
                # 安裝 Homebrew
                /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

                # 移除 Homebrew
                /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
            
        

Homebrew 常用指令

指令 說明
brew home 訪問 Homebrew 官方網站
brew help 指令說明
brew doctor 檢查 Homebrew 狀態
brew update 更新 Homebrew
brew list 查詢目前已安裝套件
brew search [套件名稱] 查詢套件
brew info [套件名稱] 查詢套件資訊
brew install [套件名稱] 安裝套件
brew uninstall [套件名稱] 移除套件
brew upgrade [套件名稱] 更新套件
brew options [套件名稱] 查詢套件安裝選項
brew link [套件名稱] 將套件捷徑連結至特定版本 (用於切換版本)
brew unlink [套件名稱] 移除套件捷徑
brew tap [user/repo] 安裝第三方來源
brew untap [user/repo] 移除第三方來源
brew services list 查看所有透過 Homebrew 安裝的服務
brew services start [套件名稱] 啟動套件服務,並開啟開機自動啟動服務。
brew services stop [套件名稱] 停止套件服務,並關閉開機自動啟動服務。
brew services restart [套件名稱] 重啟套件服務

安裝 Nginx

  • STEP 1

    打開終端機,並執行以下指令安裝 Nginx。

                        
                            # 安裝 Nginx
                            brew install nginx
                        
                    
  • STEP 2

    修改 Nginx 設定檔,開啟 /opt/homebrew/etc/nginx/nginx.conf 設定檔,參考以下內容進行修改。

                        
                            # 開啟 php.ini
                            vim /opt/homebrew/etc/nginx/nginx.conf
                        
                    
                        
                            #user  nobody;
                            worker_processes  1;
    
                            # Log 檔預設儲存目錄為 /opt/homebrew/Cellar/nginx/[版號]/logs/
                            # 我習慣的儲存目錄為 /opt/homebrew/var/log/nginx/
                            error_log  /opt/homebrew/var/log/nginx/error.log;
                            #error_log  /opt/homebrew/var/log/nginx/error.log  notice;
                            #error_log  /opt/homebrew/var/log/nginx/error.log  info;
    
                            #pid        logs/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  /opt/homebrew/var/log/nginx/access.log  main;
    
                                sendfile        on;
                                #tcp_nopush     on;
    
                                #keepalive_timeout  0;
                                keepalive_timeout  65;
    
                                #gzip  on;
    
                                server {
                                    listen          80;                 # 預設為 8080,改為 80
                                    server_name     localhost;
                                    root            /var/www/html;      # 網頁預設目錄
                                    charset         utf-8;
    
                                    location / {
                                        index index.php index.html index.htm;
                                    }
                                }
    
                                include servers/*;
                            }
                        
                    

    # 字號開頭的為註解,沒有任何作用。

  • STEP 3

    啟動 Nginx 服務,並設定開機自動啟動。

                        
                            # 啟動前,檢查一下設定檔
                            nginx -t
    
                            # 啟動 Nginx 服務
                            # 這個指令會自動開啟開機自動啟動
                            brew services start nginx
    
                            # 關閉 Nginx 服務
                            # 這個指令會自動關閉開機自動啟動
                            brew services stop nginx
                        
                    
  • STEP 4

    啟動服務後,打開瀏覽器,網址輸入 http://localhost,如果設定無誤並正確啟動的話,就能看到以下畫面,即表示 Nginx 安裝完成。

安裝 PHP

  • STEP 1

    打開終端機,並執行以下指令安裝 PHP。

                        
                            # 安裝 PHP
                            brew install php
    
                            # 啟動 PHP-FPM 服務
                            # 這個指令會自動開啟開機自動啟動
                            brew services start php
    
                            # 關閉 PHP-FPM 服務
                            # 這個指令會自動關閉開機自動啟動
                            brew services stop php
                        
                    
  • STEP 2

    開啟 /opt/homebrew/etc/php/8.2/php.ini 設定檔,修改 display_errors 及 date.timezone 兩個參數,其他設定都先使用預設值即可,後續會再另外一篇文章詳細說明。

                        
                            # 開啟 php.ini
                            vim /opt/homebrew/etc/php/8.2/php.ini
                        
                    
                        
                            ; 預設應該就是 On,確認一下即可。
                            display_errors = On
    
                            ; 記得把前面的分號(;)移除,分號表示註解。
                            date.timezone = Asia/Taipei
                        
                    
  • STEP 3

    修改 Nginx 設定檔,讓 Nginx 將 HTTP 請求轉發給 PHP FPM 處理。 開啟 /opt/homebrew/etc/nginx/nginx.conf 設定檔,參考以下內容進行修改。

                        
                            # 開啟 nginx.conf
                            vim /opt/homebrew/etc/nginx/nginx.conf
                        
                    
                        
                            ... (省略) ...
    
                            http {
                                ... (省略) ...
    
                                upstream php_fpm {
                                    server 127.0.0.1:9000;
                                }
    
                                server {
                                    listen          80;
                                    server_name     localhost;
                                    root            /var/www/html;
                                    charset         utf-8;
    
                                    location / {
                                        index index.php index.html index.htm;
                                    }
    
                                    location ~ \.php$ {
                                        include fastcgi_params;
                                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                                        fastcgi_param SERVER_SOFTWARE nginx;
                                        fastcgi_index index.php;
                                        fastcgi_pass php_fpm;
                                        fastcgi_connect_timeout 600;
                                        fastcgi_read_timeout 600;
                                        fastcgi_send_timeout 600;
                                    }
                                }
    
                                include servers/*;
                            }
                        
                    
  • STEP 4

    重啟 PHP-FPM 及 Nginx 服務。

                        
                            # 重啟 PHP-FPM 服務
                            brew services restart php
    
                            # 重啟 Nginx 服務
                            brew services restart nginx
                        
                    
  • STEP 5

    接下來撰寫一個簡單的 PHP 程式測試。使用 vim 建立檔案,輸入以下程式碼,並使用檔名 index.php 存檔,最後將檔案放到 /var/www/html 目錄底下。

                        
                            <?php
                            phpinfo();
                        
                    
  • STEP 6

    打開瀏覽器,網址輸入 http://localhost/,如果設定無誤並正確啟動的話,就能看到以下畫面,即表示 PHP 及 Nginx 都安裝完成,並且設定無誤。

安裝多版本 PHP 環境

如果您要在同一台電腦,安裝多個版本的 PHP 環境,可以參考以下流程進行安裝。

                
                    # 安裝 PHP
                    brew install php
                    brew install php@8.1
                    brew install php@8.0
                    brew install php@7.4

                    # 啟動 PHP-FPM 服務,並設定開機自動啟動
                    # 您可以同時啟動不同版本的 PHP-FPM,但必需使用不同的 Port
                    brew services start php
                    brew services start php@8.1
                    brew services start php@8.0
                    brew services start php@7.4

                
            

此時,在終端機的 PHP 指令為最新版本,如果要切換不同版本,可以透過以下指令切換。

                
                    # 目前版本為 PHP 8.2.1
                    php -v
                    PHP 8.2.1 (cli) (built: Jan 12 2023 15:19:18) (NTS)
                    ... (省略) ...

                    # 切換版本
                    brew unlink php
                    brew link --overwrite --force php@8.1

                    # 切換後版本為 PHP 8.1.14
                    php -v
                    PHP 8.1.14 (cli) (built: Jan 12 2023 15:54:07) (NTS)
                    ... (省略) ...
                
            

安裝 MariaDB

  • STEP 1

    打開終端機,並執行以下指令安裝 MariaDB。

                        
                            # 安裝 MariaDB
                            brew install mariadb
                        
                    
  • STEP 2

    啟動 MariaDB 服務,並設定開機自動啟動。

                        
                            # 啟動 MariaDB
                            # 這個指令會自動開啟開機自動啟動
                            brew services start mariadb
    
                            # 關閉 MariaDB
                            # 這個指令會自動關閉開機自動啟動
                            brew services stop mariadb
                        
                    
  • STEP 3

    初始化資料庫。

                        
                            cd /opt/homebrew/Cellar/mariadb/10.11.2/bin
                            ./mysql_secure_installation
                        
                    

    初始化 MariaDB 會詢問幾個問題,如下:

    Enter current password for root (enter for none)
    輸入 root 密碼,預設 MariaDB 沒有密碼,直接按 enter 就好了。
    Switch to unix_socket authentication [Y/n]
    切換到 unix_socket 身份驗證,這是在 10.4.3 版新增的身份驗證方式,沒有強制使用,輸入 n。
    Change the root password? [Y/n]
    修改資料庫 root 帳號密碼,輸入 y。
    New password
    輸入要設定的 root 帳號密碼。
    Re-enter new password
    再輸入一次輸入要設定的 root 帳號密碼。
    Remove anonymous users? [Y/n]
    移除匿名帳號,輸入 y。
    Disallow root login remotely? [Y/n]
    不允許遠端使用 root 帳號登入,這邊我是輸入 n,不過考量安全性應該要輸入 y。
    Remove test database and access to it? [Y/n]
    移除測試資料庫與帳號,輸入 y。
    Reload privilege tables now? [Y/n]
    重新載入權限設定,輸入 y。
  • STEP 4

    最後,測試登入資料庫,如果登入成功,表示資料庫已經安裝完成了。

                        
                            mysql -u root -p
                            Enter password: <輸入剛剛設定的密碼>
    
                            Welcome to the MariaDB monitor.  Commands end with ; or \g.
                            Your MariaDB connection id is 33
                            Server version: 10.11.2-MariaDB Homebrew
    
                            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
                            Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
                            MariaDB [(none)]>
                        
                    

常用目錄及檔案

Homebrew

/opt/homebrew/Cellar/
Homebrew 套件實際安裝目錄。
/opt/homebrew/bin/
Homebrew 套件執行檔捷徑目錄,會連結到 /opt/homebrew/Cellar 目錄中的執行檔。
/opt/homebrew/etc/
Homebrew 套件設定檔目錄。

Nginx

/opt/homebrew/etc/nginx/nginx.conf
Nginx 設定檔。
/opt/homebrew/var/log/nginx/access.log
存取紀錄 Log 檔,如果有使用者連入您的網站,這邊都會有紀錄。
/opt/homebrew/var/log/nginx/error.log
錯誤紀錄 Log 檔,網頁伺服器產生的錯誤訊息。
/var/www/html/
預設的網頁存放路徑,未來您寫的 HTML、CSS、JavaScript、PHP... 都放在這裡。

PHP

/opt/homebrew/etc/php/[版號]/php.ini
PHP 設定檔。
/opt/homebrew/etc/php/[版號]/php-fpm.d/www.conf
PHP-FPM 設定檔。

MariaDB

/opt/homebrew/etc/my.cnf
資料庫設定檔。