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.
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!