環(huán)境指南)
1. 項目概述在macOS系統(tǒng)上搭建完整的Web開發(fā)環(huán)境Docker無疑是最優(yōu)雅的解決方案之一。作為一名長期在macOS平臺工作的全棧開發(fā)者我親測通過Docker容器化部署NginxPHP環(huán)境不僅解決了傳統(tǒng)安裝方式的各種依賴沖突問題還能實現(xiàn)開發(fā)環(huán)境的快速復(fù)制和遷移。本文將詳細記錄從零開始的全過程包括Docker Desktop的安裝配置、Nginx與PHP容器的協(xié)同部署以及實際開發(fā)中最容易遇到的坑點解決方案。2. 環(huán)境準(zhǔn)備2.1 硬件與系統(tǒng)要求建議使用配備Apple Silicon芯片(M1/M2)或Intel Core i5及以上處理器的Mac設(shè)備系統(tǒng)版本至少為macOS Monterey(12.0)。我目前在MacBook Pro M1 Pro(16GB內(nèi)存)上運行Ventura 13.5環(huán)境進行演示。特別提醒若使用M系列芯片需注意部分x86鏡像需要Rosetta 2轉(zhuǎn)譯。2.2 Docker Desktop安裝訪問Docker官網(wǎng)下載對應(yīng)芯片版本的Docker Desktop雙擊下載的.dmg文件將鯨魚圖標(biāo)拖拽到Applications文件夾首次啟動時會要求授權(quán)安裝網(wǎng)絡(luò)組件需輸入系統(tǒng)密碼在Preferences → Resources中建議分配CPU: 4核Memory: 6GBSwap: 1GB注意安裝后若遇到Virtualization support wasnt detected錯誤需Intel芯片檢查BIOS中VT-x是否啟用Apple Silicon確保沒有禁用虛擬化擴展3. Docker基礎(chǔ)配置3.1 鏡像加速設(shè)置國內(nèi)用戶建議配置鏡像加速器在Preferences → Docker Engine中添加{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }3.2 常用命令驗證docker --version # 確認版本(建議20.10) docker-compose --version # 確認compose版本 docker run hello-world # 測試基礎(chǔ)功能4. NginxPHP容器部署4.1 方案選型對比方案優(yōu)點缺點單容器(nginxphp-fpm)部署簡單不符合單一職責(zé)原則多容器鏈接架構(gòu)清晰擴展性強需要配置容器網(wǎng)絡(luò)Docker Compose集成一鍵啟動管理方便學(xué)習(xí)曲線稍陡推薦使用多容器Docker Compose方案下面是具體實現(xiàn)。4.2 目錄結(jié)構(gòu)準(zhǔn)備mkdir -p ~/docker-webapp/{nginx,php,html} cd ~/docker-webapp4.3 編寫docker-compose.ymlversion: 3.8 services: nginx: image: nginx:1.25-alpine ports: - 8080:80 volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./html:/var/www/html depends_on: - php php: image: php:8.2-fpm-alpine volumes: - ./html:/var/www/html environment: - PHP_MEMORY_LIMIT256M4.4 Nginx配置文件在nginx/conf.d下創(chuàng)建app.confserver { listen 80; server_name localhost; root /var/www/html; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }5. 環(huán)境驗證與優(yōu)化5.1 啟動服務(wù)docker-compose up -d5.2 測試PHP解析在html目錄創(chuàng)建info.php?php phpinfo(); ?訪問 http://localhost:8080/info.php 應(yīng)顯示PHP信息頁。5.3 PHP擴展安裝修改docker-compose.yml中php部分php: build: context: ./php dockerfile: Dockerfile創(chuàng)建php/DockerfileFROM php:8.2-fpm-alpine RUN docker-php-ext-install pdo_mysql opcache重建容器docker-compose down docker-compose up -d --build6. 常見問題解決方案6.1 文件權(quán)限問題當(dāng)出現(xiàn)文件寫入權(quán)限錯誤時解決方案# 查看容器內(nèi)www-data用戶ID docker exec -it webapp-php-1 id www-data # 在宿主機設(shè)置相同UID(通常為82) sudo chown -R 82:82 ./html6.2 性能調(diào)優(yōu)參數(shù)在php/Dockerfile中添加RUN { \ echo opcache.enable1; \ echo opcache.memory_consumption128; \ echo opcache.max_accelerated_files10000; \ } /usr/local/etc/php/conf.d/opcache.ini6.3 Xdebug配置(開發(fā)環(huán)境)RUN apk add --no-cache $PHPIZE_DEPS \ pecl install xdebug \ docker-php-ext-enable xdebug RUN { \ echo xdebug.modedevelop,debug; \ echo xdebug.client_hosthost.docker.internal; \ echo xdebug.start_with_requestyes; \ } /usr/local/etc/php/conf.d/xdebug.ini7. 生產(chǎn)環(huán)境建議7.1 安全加固措施禁用危險函數(shù)disable_functions exec,passthru,shell_exec,system限制PHP訪問路徑location ~ /\.ht { deny all; }7.2 日志監(jiān)控配置services: nginx: logging: driver: json-file options: max-size: 10m max-file: 3查看日志命令docker-compose logs -f nginx7.3 多項目擴展方案通過修改nginx配置實現(xiàn)server { listen 80; server_name project1.local; root /var/www/project1/public; # ... } server { listen 80; server_name project2.local; root /var/www/project2/public; # ... }在/etc/hosts中添加127.0.0.1 project1.local project2.local