우선, 저자는 이 커뮤니티에서 많은 기술적인 영양을 배웠습니다. 이제 PHP 개발 환경 구축에 대한 아이디어에 대한 참고 자료가 되기를 바라면서, 저자의 docker 기반 PHP 개발 환경 구성 계획을 공유하고자 합니다.
프로젝트 배경
라라벨 버전마다 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의 도커 이미지 얻기:
저자는 공식 이미지를 기반으로 개발에 필요한 일부 확장을 추가했으며, 빌드된 이미지에는
PHP7.4, PHP8.0, PHP8.1, PHP8.2
가 포함됩니다. MacBook Intel 칩 도커 PHP 이미지 :
hub.docker.com/r/bai615/amd64-php/...
MacBook M1 칩 도커 PHP 이미지 :
hub.docker.com/r/bai615/arm64- php /...
PHP5.3, PHP5.4, PHP5.5, PHP5.6, PHP7.0, PHP7.1, PHP7.2, PHP7.3
을 포함하여 사용 가능한 타사 이전 버전의 PHP
hub.docker.com/r/leleos/php-fpm/ta...
저자의 개발 경험:
docker 개발 환경:
소프트웨어 버전을 마음대로 전환할 수 있습니다(PHP, MySQL). , Nginx 등), 테스트 환경이나 프로덕션 환경과 일치합니다.
홈스테드 개발 환경:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!