# PHP 安裝指南 (本地部署) ## 概述 本文檔說明如何在 macOS 上安裝 PHP 及 PHP-FPM,配置為本地部署。 --- ## 當前狀態 | 項目 | 狀態 | |------|------| | PHP | ✅ 已安裝 v8.5.2 | | PHP-FPM | ✅ 執行中 | | 配置目錄 | /Users/accusys/momentry/etc/php/ | | 日誌目錄 | /Users/accusys/momentry/log/ | | Plist | /Library/LaunchDaemons/com.momentry.php.plist | --- ## 安裝步驟 ### Step 1: 安裝 PHP (使用 brew) ```bash # 安裝 PHP brew install php # 安裝 PHP-FPM (通常包含在 php 中) brew install php --fpm ``` **驗證**: ```bash php --version # PHP 8.5.2 (cli) ``` --- ### Step 2: 建立目錄 ```bash # 建立配置目錄 mkdir -p /Users/accusys/momentry/etc/php # 建立日誌目錄 mkdir -p /Users/accusys/momentry/log # 建立日誌文件 touch /Users/accusys/momentry/log/php.log touch /Users/accusys/momentry/log/php.error.log # 設定權限 chown -R accusys:staff /Users/accusys/momentry/etc/php chown -R accusys:staff /Users/accusys/momentry/log ``` --- ### Step 3: 建立設定檔 建立 `/Users/accusys/momentry/etc/php/php-fpm.conf`: ```ini [global] pid = /Users/accusys/momentry/var/php-fpm.pid error_log = /Users/accusys/momentry/log/php.error.log log_level = notice [www] user = accusys group = staff listen = 127.0.0.1:9000 listen.owner = accusys listen.group = staff pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ``` 複製 php.ini: ```bash cp /opt/homebrew/etc/php/8.5/php.ini /Users/accusys/momentry/etc/php/ ``` --- ### Step 4: 使用 plist 開機自動啟動 ```bash # 複製 plist 到 LaunchDaemons 目錄 sudo cp /Users/accusys/momentry_core_0.1/momentry_runtime/plist/com.momentry.php.plist /Library/LaunchDaemons/ # 載入並啟動 sudo launchctl load /Library/LaunchDaemons/com.momentry.php.plist ``` --- ## 監控配置 ### 添加到監控配置 在 `monitor/config/monitor_config.yaml` 中添加: ```yaml service: services: - name: "php-fpm" type: "tcp" port: 9000 host: "localhost" timeout: 5 enabled: true ``` --- ## 卸載步驟 ### 重要: 路徑說明 | 路徑 | 類型 | 說明 | |------|------|------| | `/Users/accusys/momentry/etc/php/` | 配置 | **不要刪除** - PHP 配置 | | `/Users/accusys/momentry/log/` | 日誌 | **不要刪除** - 日誌目錄 | | `/opt/homebrew/opt/php/` | 安裝 | **刪除** - PHP 安裝目錄 | ### Step 1: 停止 PHP-FPM ```bash # 找到 PHP-FPM 進程 ps aux | grep php-fpm | grep -v grep # 停止 PHP-FPM pkill php-fpm # 確認停止 ps aux | grep php-fpm | grep -v grep || echo "PHP-FPM 已停止" ``` --- ### Step 2: 卸載 PHP ```bash # 卸載 PHP brew uninstall php # 移除 plist sudo launchctl unload /Library/LaunchDaemons/com.momentry.php.plist sudo rm /Library/LaunchDaemons/com.momentry.php.plist ``` --- ### Step 3: 刪除專屬檔案 ```bash # 刪除配置目錄 (可選) rm -rf /Users/accusys/momentry/etc/php # 刪除日誌 (可選) rm -f /Users/accusys/momentry/log/php.log rm -f /Users/accusys/momentry/log/php.error.log ``` **注意: 不要刪除以下共用目錄**: ```bash # 這些是共用的,不要刪除! # /Users/accusys/momentry/etc # /Users/accusys/momentry/log ``` --- ### Step 4: 卸載後檢查清單 ```bash echo "=== PHP 卸載後檢查 ===" # 1. 檢查 PHP-FPM 進程 echo "1. PHP-FPM 進程:" ps aux | grep php-fpm | grep -v grep && echo " ✗ 仍在運行" || echo " ✓ 已停止" # 2. Port 9000 echo "2. Port 9000:" lsof -i :9000 > /dev/null 2>&1 && echo " ✗ 仍被佔用" || echo " ✓ 已釋放" # 3. php 命令 echo "3. php 命令:" which php > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 4. brew 安裝 echo "4. brew 安裝:" brew list php > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 5. launchctl 服務 echo "5. launchctl 服務:" sudo launchctl list | grep php > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 6. 配置目錄 (可選刪除) echo "6. 配置目錄:" [ -d "/Users/accusys/momentry/etc/php" ] && echo " ✓ 保留" || echo " ✗ 已刪除" # 7. 日誌目錄 (可選刪除) echo "7. 日誌目錄:" [ -d "/Users/accusys/momentry/log" ] && echo " ✓ 保留" || echo " ✗ 已刪除" ``` --- ## 手動檢查命令 ```bash # 1. 檢查 PHP 版本 php --version # 2. 檢查 PHP-FPM 進程 ps aux | grep php-fpm | grep -v grep # 3. 檢查 Port lsof -i :9000 # 4. 測試 PHP php -r "echo 'PHP OK' . PHP_EOL;" # 5. 查看 PHP 模組 php -m # 6. 查看 PHP 配置 php -i | grep "Loaded Configuration File" # 7. 查看日誌 tail -20 /Users/accusys/momentry/log/php.log ``` --- ## 連線資訊 | 項目 | 值 | |------|-----| | PHP-FPM Port | 9000 | | PHP Version | 8.5.2 | | Config | /Users/accusys/momentry/etc/php/php-fpm.conf | | php.ini | /Users/accusys/momentry/etc/php/php.ini | --- ## 環境變數 在 `.env` 中: ```env PHP_INI_SCAN_DIR=/Users/accusys/momentry/etc/php/conf.d ``` --- ## 故障排除 ### PHP-FPM 無法啟動 ```bash # 檢查日誌 tail -f /Users/accusys/momentry/log/php.error.log # 檢查配置語法 /opt/homebrew/opt/php/sbin/php-fpm --test --fpm-config /Users/accusys/momentry/etc/php/php-fpm.conf # 檢查目錄權限 ls -la /Users/accusys/momentry/etc/php/ # 重新設定權限 chown -R $(whoami):staff /Users/accusys/momentry/etc/php ``` ### Port 被佔用 ```bash # 檢查哪個程序佔用 port 9000 lsof -i :9000 # 終止佔用程序 kill ``` ### 需要重新載入 plist ```bash # 卸載舊服務 (如果存在) sudo launchctl unload /Library/LaunchDaemons/com.momentry.php.plist 2>/dev/null # 載入新服務 sudo launchctl load /Library/LaunchDaemons/com.momentry.php.plist ``` --- ## 檔案位置 | 類型 | 路徑 | 說明 | |------|------|------| | 安裝 | `/opt/homebrew/opt/php/` | PHP 安裝目錄 | | 執行檔 | `/opt/homebrew/bin/php` | PHP 執行檔 | | PHP-FPM | `/opt/homebrew/opt/php/sbin/php-fpm` | PHP-FPM 執行檔 | | php.ini | `/Users/accusys/momentry/etc/php/8.5/php.ini` | PHP 配置 | | PHP-FPM 配置 | `/Users/accusys/momentry/etc/php/8.5/php-fpm.conf` | PHP-FPM 主配置 | | PHP-FPM pool | `/Users/accusys/momentry/etc/php/8.5/php-fpm.d/` | Pool 配置 | | 日誌 | `/Users/accusys/momentry/log/php.log` | 執行日誌 | | 錯誤日誌 | `/opt/homebrew/var/log/php-fpm.log` | PHP-FPM 錯誤日誌 | | plist | `/Library/LaunchDaemons/com.momentry.php.plist` | 開機啟動 | | 備份 | `/Users/accusys/momentry/backup/daily/php/` | 配置備份 | --- ## 常用指令 ```bash # 測試 PHP-FPM 配置 /opt/homebrew/opt/php/sbin/php-fpm --test --fpm-config /Users/accusys/momentry/etc/php/php-fpm.conf # 查看 PHP 模組 php -m # 查看已載入的配置 php -i # 測試 PHP 腳本 php -r "echo 'Hello World' . PHP_EOL;" # 查看 PHP-FPM 狀態 curl http://127.0.0.1:9000/status ``` --- ## 備份與恢復 ### 備份 ```bash TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/Users/accusys/momentry/backup/daily/php" mkdir -p "$BACKUP_DIR" # 備份配置 (注意:PHP-FPM 實際使用 /Users/accusys/momentry/etc/php/8.5/ 配置) tar -czf "$BACKUP_DIR/php_cfg_${TIMESTAMP}.tar.gz" \ /Users/accusys/momentry/etc/php/8.5/php.ini \ /Users/accusys/momentry/etc/php/8.5/php-fpm.conf \ /Users/accusys/momentry/etc/php/8.5/php-fpm.d/ # 驗證 sha256sum "$BACKUP_DIR/php_cfg_${TIMESTAMP}.tar.gz" > "$BACKUP_DIR/php_${TIMESTAMP}.sha256" ``` ### 恢復 ```bash # 解壓配置 tar -xzf /Users/accusys/momentry/backup/daily/php/php_cfg_20260316_102727.tar.gz -C / # 測試配置 /opt/homebrew/opt/php/sbin/php-fpm --test --fpm-config /Users/accusys/momentry/etc/php/8.5/php-fpm.conf ``` --- ## 版本資訊 - PHP Version: 8.5.2 - PHP-FPM Port: 9000 - 配置目錄: /Users/accusys/momentry/etc/php/ - 日誌目錄: /Users/accusys/momentry/log/