首页 > php框架 > Laravel > MacBook下laravel多版本docker开发环境配置方案

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

藏色散人
发布: 2023-04-06 14:52:17
转载
1502 人浏览过

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

项目集背景

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

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

目录结构参考:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

./

├── 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 内容参考:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

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 虚拟机配置参考:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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 配置参考:

1

2

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/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开发环境配置方案的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板