MacBook下laravel多版本docker开发环境配置方案

首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于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 分享