まず初めに、コミュニティに感謝したいと思います。著者はこのコミュニティから多くの技術的な栄養を学びました。今回は、PHP 開発環境を構築する際のアイデアの参考になればと思い、docker をベースにした筆者の PHP 開発環境構築計画を共有したいと思います。
プロジェクトの背景
Laravelのバージョンが異なれば、PHPのバージョン要件も異なります。
複数のバージョンのプロジェクトを同時にデバッグする必要があり、開発に Docker 環境を使用する場合。具体的なシナリオは次のとおりです (例):
認証システムは laravel6 に基づいており、PHP はバージョン 7.2 を実行します。
アプリケーション システムは laravel9 に基づいており、PHP はバージョン 8.1 を実行します。
アプリケーションは、統合ログインのために認証システムにジャンプする必要があります。認証に合格した後、一時チケット パラメータ コードが渡されてアプリケーションに戻ります。アプリケーションはコード パラメーターを取得した後、認証システム 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
docker-compose.json コンテンツ参照:
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 仮想マシン構成リファレンス:
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.com 127.0.0.1 app.example.com
php-fpm の docker イメージ リファレンスの取得:
作者は公式イメージをベースに開発に必要な拡張機能を追加し、ビルドされたイメージ
には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。 ..
作者の開発経験:
docker 開発環境:
ソフトウェアのバージョンを切り替えることができます自由に (PHP、MySQL、Nginx など)、テスト環境または運用環境と一致します。homestead 開発環境:
vgrant に基づいている必要があり、vbox または wmware に依存しています。現時点では、M1 サポートには十分フレンドリーではありません。brew ソフトウェア管理に基づく開発環境:
ソフトウェア (PHP、MySQL、Nginx など) をインストールおよび管理するための brew メソッド。 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 中国語 Web サイトの他の関連記事を参照してください。