MacBook下laravel多版本docker開發環境配置方案

首先感謝社區,作者從本社區汲取了很多技術營養?,F分享作者基于dockerphp開發環境配置方案,希望能給小伙伴們在搭建PHP開發環境上帶來思路上的參考。

項目集背景

laravel版本不同對PHP的版本要求不同。
如果遇到同時調試多個版本項目,且使用docker環境進行開發。具體場景如下(舉例):
? ? ? 認證系統基于laravel6,PHP運行版本7.2。
? ? ? 應用系統基于laravel9,PHP運行版本8.1。
應用需要跳轉認證系統進行統一登錄。在認證通過后,攜帶臨時ticket參數code回跳應用。應用拿到code參數后,請求認證系統rpc服務獲取用戶詳細信息。

MacBook下laravel多版本docker開發環境配置方案

目錄結構參考:

./ ├──?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/…

MacBook M1芯片 docker PHP images :
hub.docker.com/r/bai615/amd64-php/…

好用的第三方老版本PHP
包含 PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.0、PHP7.1、PHP7.2、PHP7.3
hub.docker.com/r/bai615/amd64-php/…

作者的開發體驗:

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下

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享