首先感謝社區,作者從本社區汲取了許多技術營養。現分享作者基於docker的PHP開發環境配置方案,希望能為小夥伴們在搭建PHP開發環境上帶來想法上的參考。
專案集背景
laravel版本不同對PHP的版本要求不同。
如果遇到同時調試多個版本項目,且使用docker環境進行開發。具體場景如下(舉例):
認證系統基於laravel6,PHP運行版本7.2。
應用系統基於laravel9,PHP運行版本8.1。
應用程式需要跳轉認證系統進行統一登入。在認證通過後,攜帶臨時ticket參數code回跳應用程式。套用拿到code參數後,請求認證系統RPC服務取得使用者詳細資料。
目錄結構參考:
./ ├── docker-compose.yaml ├── mariadb-data ├── mariadb-log ├── nginx-config # nginx 配置 │ ├── conf.d │ │ ├── default.conf │ │ ├── sso.example.com.conf │ │ ├── app.example.com.conf │ ├── fastcgi.conf │ ├── fastcgi_params │ ├── koi-utf │ ├── koi-win │ ├── mime.types │ ├── nginx-bak.conf │ ├── nginx.conf │ ├── scgi_params │ ├── uwsgi_params │ └── win-utf ├── nginx-html # laravel 项目代码目录 │ ├── sso.example.com │ ├── app.example.com ├── nginx-log │ ├── access.log │ ├── error.log │ ├── sso.example.com-error.log │ ├── app.example.com-error.log ├── php-config-7.2 │ ├── conf.d │ ├── php.ini │ ├── php.ini-development │ └── php.ini-production ├── php-config-8.1 │ ├── conf.d │ ├── php.ini │ ├── php.ini-development │ └── php.ini-production └── php-log
docker-compose.json 內容參考:
version: "3" services: mysql: hostname: mysql image: mariadb:10.5.10 container_name: lara-mariadb-10.5 ports: - "3308:3306" volumes: - ./mariadb-log:/var/log/mysql - ./mariadb-data:/var/lib/mysql environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 - MYSQL_USER=username - MYSQL_PASSWORD=password networks: lara-net: ipv4_address: 172.23.0.2 php72: hostname: php-fpm-72 image: leleos/php-fpm:7.2 container_name: lara-php-fpm-7.2 ports: - "9001:9000" links: - mysql:lara-mariadb-10.5 - redis:lara-redis-6 extra_hosts: - "sso.example.com:172.23.0.10" - "app.example.com:172.23.0.10" volumes: - ./nginx-html:/usr/share/nginx/html:rw - ./php-log:/var/log/phplog - ./php-config-7.2:/usr/local/etc/php environment: - TZ=Asia/Shanghai networks: lara-net: ipv4_address: 172.23.0.4 php81: hostname: php-fpm-81 image: bai615/amd64-php:8.1.17-fpm container_name: lara-php-fpm-8.1 ports: - "9002:9000" links: - mysql:lara-mariadb-10.5 - redis:lara-redis-6 extra_hosts: - "sso.example.com:172.23.0.10" - "app.example.com:172.23.0.10" volumes: - ./nginx-html:/usr/share/nginx/html:rw - ./php-log:/var/log/phplog - ./php-config-8.1:/usr/local/etc/php environment: - TZ=Asia/Shanghai networks: lara-net: ipv4_address: 172.23.0.5 redis: hostname: redis container_name: lara-redis-6 image: redis:6.2.6 ports: - "6479:6379" environment: - TZ=Asia/Shanghai networks: lara-net: ipv4_address: 172.23.0.8 nginx: hostname: nginx container_name: lara-nginx-1.22.0 image: nginx:1.22.0 ports: - "81:81" - "443:443" links: - "php72:lara-php-fpm-7.2" - "php81:lara-php-fpm-8.1" - "mysql:lara-mariadb-10.5" - "mongo:lara-mongo-5" - "redis:lara-redis-6" extra_hosts: - "sso.example.com:127.0.0.1" - "app.example.com:127.0.0.1" environment: - TZ=Asia/Shanghai volumes: - ./nginx-config:/etc/nginx - ./nginx-log:/var/log/nginx - ./nginx-html:/usr/share/nginx/html networks: lara-net: ipv4_address: 172.23.0.10 mongo: hostname: mongo container_name: lara-mongo-5 image: mongo:5.0.12 ports: - "27018:27017" environment: - TZ=Asia/Shanghai volumes: - mongo-data:/data/db networks: lara-net: ipv4_address: 172.23.0.9 volumes: mongo-data: networks: lara-net: ipam: config: - subnet: "172.23.0.0/24"
nginx 虛擬機器設定參考:
server { listen 80; server_name app.example.com; root "/usr/share/nginx/html/app.example.com/public"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/sso.example.com-error.log error; sendfile off; client_max_body_size 100m; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php81:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; } location ~ /\.ht { deny all; } }
宿主機器hosts 設定參考:
127.0.0.1 sso.example.com 127.0.0.1 app.example.com
php-fpm 的docker image取得參考:
作者在官方image的基礎上補充了一些開發必須擴展,然後build的image
包含PHP7.4、PHP8.0、PHP8.1、PHP8.2
MacBook Intel晶片docker PHP images :
hub.docker.com/r/bai615/amd64-php/...
hub.docker.com/r/bai615/arm64-php/...
包含PHP5.3、PHP5 .4、PHP5.5、PHP5.6、PHP7.0、PHP7.1、PHP7.2、PHP7.3
hub.docker.com/r/leleos/php-fpm/ta...
作者的開發體驗:
docker 開發環境:
可以任意切換軟體版本(PHP, MySQL,Nginx等),與測試環境或生產環境保持一致。homestead 開發環境:
需要基於vgrant,依賴vbox或wmware,目前對M1支援還不夠友善。基於brew軟體管理的開發環境:
brew 方式安裝、管理軟體(PHP,MySQL,Nginx等)。當brew版本升級時,可能會影響已安裝軟體出現不可預測問題。如下:1、攜帶底層依賴同步升級,不再支援低版本PHP運作(如,PHP5.6 以下版本無法運作)。
2、軟體預設安裝路徑變更,依賴原路徑的軟體不能運作。
brew 3.x 軟體預設安裝路徑/opt/homebrew/bin/
brew 4.x 軟體預設安裝路徑/usr/local/bin/
3、PHP,MySQL,Nginx等版本切換不夠靈活。
以上是MacBook下laravel多版本docker開發環境配置方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

選擇Laravel開發項目是因為其靈活性和強大功能適應不同規模和復雜度的需求。 Laravel提供路由系統、EloquentORM、Artisan命令行等功能,支持從簡單博客到復雜企業級系統的開發。

Laravel和Python在開發環境和生態系統上的對比如下:1.Laravel的開發環境簡單,僅需PHP和Composer,提供了豐富的擴展包如LaravelForge,但擴展包維護可能不及時。 2.Python的開發環境也簡單,僅需Python和pip,生態系統龐大,涵蓋多個領域,但版本和依賴管理可能複雜。

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用