MacBook下laravel多版本docker开发环境配置方案
时间:2023-04-07 16:02
首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于docker的PHP开发环境配置方案,希望能给小伙伴们在搭建PHP开发环境上带来思路上的参考。 项目集背景 laravel版本不同对PHP的版本要求不同。 目录结构参考: docker-compose.json 内容参考: nginx 虚拟机配置参考: 宿主机 hosts 配置参考: php-fpm 的 docker image 获取参考: 作者在官方image的基础上补充了一些开发必须扩展,然后build的image MacBook Intel芯片 docker PHP images : MacBook M1芯片 docker PHP images : 好用的第三方老版本PHP 作者的开发体验: docker 开发环境: 可以任意切换软件版本(PHP,MySQL,Nginx等),与测试环境或者生产环境保持一致。 homestead 开发环境: 需要基于vgrant,依赖vbox或者wmware,目前对M1支持还不够友好。 基于brew软件管理的开发环境: brew 方式安装、管理软件(PHP,MySQL,Nginx等)。当brew版本升级时,可能会影响已安装软件出现不可预知问题。如下: 以上就是MacBook下laravel多版本docker开发环境配置方案的详细内容,更多请关注Gxl网其它相关文章!
如果遇到同时调试多个版本项目,且使用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
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"
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; }}
127.0.0.1 sso.example.com127.0.0.1 app.example.com
包含 PHP7.4、PHP8.0、PHP8.1、PHP8.2
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...
1、携带底层依赖同步升级,不再支持低版本PHP运行(如,PHP5.6 及以下版本不能运行)。
2、软件默认安装路径变更,依赖原路径的软件不能运行。
brew 3.x 软件默认安装路径 /opt/homebrew/bin/
brew 4.x 软件默认安装路径 /usr/local/bin/
3、PHP,MySQL,Nginx等版本切换不够灵活。