Maison  >  Article  >  cadre php  >  Plan de configuration de l'environnement de développement Docker multiversion Laravel sous MacBook

Plan de configuration de l'environnement de développement Docker multiversion Laravel sous MacBook

藏色散人
藏色散人avant
2023-04-06 14:52:171325parcourir

Tout d'abord, je voudrais remercier la communauté. L'auteur a appris beaucoup de nutrition technique grâce à cette communauté. Je partage maintenant le plan de configuration de l'environnement de développement PHP de l'auteur basé sur Docker, dans l'espoir de fournir une référence pour des idées sur la création d'un environnement de développement PHP.

Contexte du projet

Différentes versions de Laravel ont des exigences de version PHP différentes.
Si vous rencontrez le débogage de plusieurs versions de projets en même temps et utilisez l'environnement Docker pour le développement. Le scénario spécifique est le suivant (exemple) :
Le système d'authentification est basé sur laravel6, et PHP exécute la version 7.2.
Le système d'application est basé sur laravel9 et PHP exécute la version 8.1.
L'application doit accéder au système d'authentification pour une connexion unifiée. Une fois l'authentification réussie, le code de paramètre de ticket temporaire est transmis pour revenir à l'application. Une fois que l'application a obtenu le paramètre de code, elle demande au service RPC du système d'authentification d'obtenir les détails de l'utilisateur.

Plan de configuration de lenvironnement de développement Docker multiversion Laravel sous MacBook

Référence de la structure du répertoire :

./
├── 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 Référence du contenu :

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 Référence de configuration de la machine virtuelle :

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;
    }
}

Référence de configuration des hôtes :

127.0.0.1 sso.example.com
127.0.0.1 app.example.com

Référence pour obtention de l'image docker de php-fpm :

L'auteur a ajouté quelques extensions nécessaires au développement basées sur l'image officielle, puis l'image construite
inclut PHP7.4, PHP8.0, PHP8.1, PHP8.2

Images PHP du docker de la puce MacBook Intel :
hub.docker.com/r/bai615/amd64-php/...

Images PHP du docker de la puce MacBook M1 :
hub.docker.com/r/bai615/arm64- php /...

Ancienne version tierce utilisable de PHP
y compris PHP5.3, PHP5.4, PHP5.5, PHP5.6, PHP7.0, PHP7.1, PHP7.2, PHP7.3
hub.docker.com/r/leleos/php-fpm/ta...

L'expérience de développement de l'auteur :

Environnement de développement docker :

Vous pouvez changer de version du logiciel à volonté (PHP, MySQL , Nginx, etc. ), cohérents avec l'environnement de test ou l'environnement de production.

Environnement de développement homestead :

Doit être basé sur vgrant et s'appuie sur vbox ou wmware Actuellement, il n'est pas assez convivial pour le support M1.

Environnement de développement basé sur la gestion de logiciels Brew :

Méthode Brew pour installer et gérer des logiciels (PHP, MySQL, Nginx, etc.). Lorsque la version Brew est mise à niveau, des problèmes imprévisibles peuvent survenir et affecter les logiciels installés. Comme suit :
1. Les dépendances sous-jacentes sont mises à niveau de manière synchrone et les versions inférieures de PHP ne sont plus prises en charge (par exemple, PHP5.6 et versions antérieures ne peuvent pas être exécutées).
2. Le chemin d'installation par défaut du logiciel a été modifié et les logiciels qui s'appuient sur le chemin d'origine ne peuvent pas s'exécuter.
Chemin d'installation par défaut du logiciel brew 3.x /opt/homebrew/bin/
Chemin d'installation par défaut du logiciel brew 4.x /usr/local/bin/
3 PHP, MySQL, Nginx et d'autres versions ne sont pas suffisamment flexibles pour changer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer