Heim  >  Artikel  >  PHP-Framework  >  Konfigurationsplan für die Laravel-Mehrversions-Docker-Entwicklungsumgebung unter MacBook

Konfigurationsplan für die Laravel-Mehrversions-Docker-Entwicklungsumgebung unter MacBook

藏色散人
藏色散人nach vorne
2023-04-06 14:52:171322Durchsuche

Zunächst möchte ich mich bei der Community bedanken. Der Autor hat von dieser Community viel über technische Ernährung gelernt. Jetzt möchte ich den auf Docker basierenden PHP-Entwicklungsumgebungskonfigurationsplan des Autors teilen, in der Hoffnung, einige Referenzen für Ideen beim Aufbau einer PHP-Entwicklungsumgebung bereitzustellen.

Projekthintergrund

Verschiedene Laravel-Versionen haben unterschiedliche PHP-Versionsanforderungen.
Wenn Sie auf das Debuggen mehrerer Projektversionen gleichzeitig stoßen und die Docker-Umgebung für die Entwicklung verwenden. Das konkrete Szenario sieht wie folgt aus (Beispiel):
Das Authentifizierungssystem basiert auf Laravel6 und PHP führt Version 7.2 aus.
Das Anwendungssystem basiert auf Laravel9 und PHP läuft in Version 8.1.
Die Anwendung muss für eine einheitliche Anmeldung zum Authentifizierungssystem springen. Nachdem die Authentifizierung bestanden wurde, wird der temporäre Ticketparametercode übertragen, um zur Anwendung zurückzukehren. Nachdem die Anwendung den Codeparameter erhalten hat, fordert sie den RPC-Dienst des Authentifizierungssystems an, Benutzerdetails abzurufen.

Konfigurationsplan für die Laravel-Mehrversions-Docker-Entwicklungsumgebung unter MacBook

Verzeichnisstrukturreferenz:

./
├── 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 Inhaltsreferenz:

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 Konfigurationsreferenz für virtuelle Maschinen:

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

Hostkonfigurationsreferenz:

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

Referenz für Erhalten des Docker-Images von php-fpm:

Der Autor hat einige für die Entwicklung erforderliche Erweiterungen basierend auf dem offiziellen Image hinzugefügt, und dann enthält das erstellte Image
PHP7.4, PHP8.0, PHP8.1, PHP8.2

MacBook Intel Chip Docker PHP-Bilder:
hub.docker.com/r/bai615/amd64-php/...

MacBook M1 Chip Docker PHP Bilder:
hub.docker.com/r/bai615/arm64- php /...

Verwendbare alte PHP-Version von Drittanbietern
einschließlich PHP5.3, PHP5.4, PHP5.5, PHP5.6, PHP7.0, PHP7.1, PHP7.2, PHP7.3
hub.docker.com/r/leleos/php-fpm/ta...

Die Entwicklungserfahrung des Autors:

Docker-Entwicklungsumgebung:

Sie können die Softwareversionen nach Belieben wechseln (PHP, MySQL). , Nginx usw. ), konsistent mit der Testumgebung oder Produktionsumgebung.

Homestead-Entwicklungsumgebung:

Muss auf vgrant basieren und ist auf vbox oder wmware angewiesen. Derzeit ist es nicht benutzerfreundlich genug für M1-Unterstützung.

Entwicklungsumgebung basierend auf der Brew-Softwareverwaltung:

Brew-Methode zur Installation und Verwaltung von Software (PHP, MySQL, Nginx usw.). Bei einem Upgrade der Brew-Version können unvorhersehbare Probleme auftreten, die sich auf die installierte Software auswirken können. Wie folgt:
1. Die zugrunde liegenden Abhängigkeiten werden synchron aktualisiert und niedrigere Versionen von PHP werden nicht mehr unterstützt (z. B. können PHP5.6 und niedriger nicht ausgeführt werden).
2. Der Standardinstallationspfad der Software wurde geändert und Software, die auf dem ursprünglichen Pfad basiert, kann nicht ausgeführt werden.
Der Standardinstallationspfad der Brew 3.x-Software ist /opt/homebrew/bin/
Der Standardinstallationspfad der Brew 4.x-Software ist /usr/local/bin/
3. PHP, MySQL, Nginx und andere Versionen sind nicht flexibel genug, um zu wechseln.

Das obige ist der detaillierte Inhalt vonKonfigurationsplan für die Laravel-Mehrversions-Docker-Entwicklungsumgebung unter MacBook. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen