您的位置:首页 > 技术中心 > php框架 >

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

时间:2023-04-07 16:02

首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于docker的PHP开发环境配置方案,希望能给小伙伴们在搭建PHP开发环境上带来思路上的参考。

项目集背景

laravel版本不同对PHP的版本要求不同。
如果遇到同时调试多个版本项目,且使用docker环境进行开发。具体场景如下(举例):
认证系统基于laravel6,PHP运行版本7.2。
应用系统基于laravel9,PHP运行版本8.1。
应用需要跳转认证系统进行统一登录。在认证通过后,携带临时ticket参数code回跳应用。应用拿到code参数后,请求认证系统RPC服务获取用户详细信息。

6873f38e79584798fed33b1ab645bae.png

目录结构参考:

./├── 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.9volumes:  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.com127.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/arm64-php/...

好用的第三方老版本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开发环境配置方案的详细内容,更多请关注Gxl网其它相关文章!

热门排行

今日推荐

热门手游