Pertama sekali, terima kasih kepada masyarakat Penulis telah mempelajari banyak ilmu pemakanan teknikal daripada komuniti ini. Sekarang saya ingin berkongsi pelan konfigurasi persekitaran pembangunan PHP pengarang berdasarkan docker, dengan harapan dapat memberikan beberapa rujukan untuk idea dalam membina persekitaran pembangunan PHP.
Latar belakang projek
Versi laravel yang berbeza mempunyai keperluan versi PHP yang berbeza.
Jika anda menghadapi penyahpepijatan berbilang versi projek pada masa yang sama, dan gunakan persekitaran docker untuk pembangunan. Senario khusus adalah seperti berikut (contoh):
Sistem pengesahan adalah berdasarkan laravel6 dan PHP menjalankan versi 7.2.
Sistem aplikasi adalah berdasarkan laravel9 dan PHP menjalankan versi 8.1.
Aplikasi perlu melompat ke sistem pengesahan untuk log masuk bersatu. Selepas pengesahan diluluskan, kod parameter tiket sementara dibawa untuk melompat kembali ke aplikasi. Selepas aplikasi memperoleh parameter kod, ia meminta perkhidmatan RPC sistem pengesahan untuk mendapatkan butiran pengguna.
Rujukan struktur direktori:
./ ├── 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
rujukan kandungan 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"
rujukan konfigurasi mesin maya 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; } }
Rujukan konfigurasi hos hos:
127.0.0.1 sso.example.com 127.0.0.1 app.example.com
Imej Docker php-fpm untuk rujukan:
Pengarang menambah beberapa sambungan yang diperlukan untuk pembangunan berdasarkan imej rasmi, dan kemudian imej terbina
mengandungi PHP7.4, PHP8.0, PHP8.1, PHP8.2
Imej PHP docker cip Intel MacBook:
hub.docker.com/r/bai615/amd64-php/...
Imej PHP docker cip M1 MacBook:
hub.docker.com/r/bai615/arm64-php/...
Versi lama PHP pihak ketiga yang boleh digunakan
Mengandungi PHP5.3, PHP5.4, PHP5.5, PHP5.6, PHP7.0, PHP7.1, PHP7.2, PHP7.3
hub.docker.com/r/leleos/ php-fpm/ta...
Pengalaman pembangunan pengarang:
persekitaran pembangunan docker:
Anda boleh menukar versi perisian (PHP, MySQL, Nginx, dll.) sesuka hati untuk memastikan ia konsisten dengan persekitaran ujian atau persekitaran pengeluaran.
persekitaran pembangunan homestead:
Perlu berdasarkan vgrant, bergantung pada vbox atau wmware, pada masa ini tidak cukup mesra untuk sokongan M1.
Persekitaran pembangunan berdasarkan pengurusan perisian brew:
Brew cara untuk memasang dan mengurus perisian (PHP, MySQL, Nginx, dll.). Apabila versi brew dinaik taraf, masalah yang tidak dapat diramalkan mungkin berlaku yang boleh menjejaskan perisian yang dipasang. Seperti berikut:
1. Kebergantungan asas dinaik taraf secara serentak dan versi PHP yang lebih rendah tidak lagi disokong (contohnya, PHP5.6 dan ke bawah tidak boleh dijalankan).
2. Laluan pemasangan lalai perisian telah ditukar dan perisian yang bergantung pada laluan asal tidak boleh dijalankan.
Laluan pemasangan lalai perisian brew 3.x ialah /opt/homebrew/bin/
Laluan pemasangan lalai perisian brew 4.x ialah /usr/local/bin/
3 , Nginx dan versi lain tidak ditukar dengan cukup fleksibel.
Atas ialah kandungan terperinci Pelan konfigurasi persekitaran pembangunan docker berbilang versi Laravel di bawah MacBook. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!