Seringkali, pengembang PHP dihadapkan dengan tugas untuk memeriksa operasi aplikasi web untuk beberapa versi penerjemah. Ini dapat diselesaikan dengan berbagai cara. Anda dapat menginstal versi PHP yang berbeda pada satu host, tetapi ini penuh dengan konflik perpustakaan dan kesulitan lainnya. Ekstrem kedua adalah membuat beberapa mesin virtual yang terisolasi dengan lingkungan yang berbeda, tetapi di sini Anda tidak dapat melakukannya tanpa menggunakan sumber daya perangkat keras yang berlebihan dan membuang waktu yang tidak perlu untuk menggunakan lingkungan kerja. Saat ini, cara termudah untuk menyelesaikan masalah ini adalah dengan Docker.

Di bawah ini saya akan menjelaskan solusi yang berfungsi untuk Ubuntu 18, di mana bundel Nginx + PHP-FPM digunakan sebagai tumpukan. Solusi ini berskala mudah: sebuah wadah dengan PHP-FPM hanya membutuhkan 300 MB dalam memori, dan Anda dapat menambahkan wadah dengan versi lain dari juru bahasa dengan tiga perintah (atau menjalankan, tergantung pada preferensi Anda). Kelebihan kedua dari solusi ini adalah bahwa pengembang tidak perlu mengganti server web antar penerjemah, karena mereka sudah ditempatkan di wadah yang berbeda (kode aplikasinya sama).
Tambahan: Dilihat dari komentar, beberapa pembaca tidak mengerti untuk kasus apa solusi yang dijelaskan cocok. Oleh karena itu, saya ingin menarik perhatian pada kenyataan bahwa semua yang berikut ini dimaksudkan untuk HANYA digunakan pada workstation pengembang, dan mungkin juga cocok untuk server panggung dengan beberapa pemesanan.Jadi mari kita mulai ...
1. Pasang Docker
sudo apt update sudo apt install ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install docker-ce
2. Instal wadah dengan versi PHP yang diperlukan
Sebagai contoh menciptakan lingkungan kerja, PHP versi 7.1 dan 7.2 dari
repositori PHP Docker resmi
digunakan . Dengan analogi, jika Anda memiliki gambar, Anda dapat menginstal versi PHP apa pun yang Anda inginkan:
sudo docker pull php:7.1.25-fpm-stretch sudo docker create --name=fpm71 -p 127.0.0.1:9071:9000 -v /var/www:/var/www php:7.1.25-fpm-stretch sudo docker start fpm71 sudo docker pull php:7.2.13-fpm-stretch sudo docker create --name=fpm72 -p 127.0.0.1:9072:9000 -v /var/www:/var/www php:7.2.13-fpm-stretch sudo docker start fpm72
PHP-FPM berjalan pada port 9000 secara default. Saat membuat gambar, kami menerbitkan port wadah ke-9000 untuk port mesin host 9071 dan 9072 gratis (angka diambil secara sewenang-wenang dari kisaran yang tidak terjangkau). Selanjutnya, kami akan mem-proxy permintaan untuk memproses PHP ke port-port ini (parameter fastcgi_pass dalam konfigurasi virtual host Nginx).
Itu juga perlu untuk membuang direktori proyek di dalam wadah (/ var / www), kalau tidak PHP-FPM bersumpah bahwa itu tidak melihat file (jika Anda tahu bagaimana membuat momen ini lebih baik / lebih benar, tulis di komentar).
Periksa apakah kontainer beroperasi dan port diterbitkan dengan benar:
sudo docker ps -a sudo netstat -lpn
3. Atur lingkungan untuk host virtual
Tambahkan baris ke / etc / hosts:
127.0.0.1 project.local.php71
Buat direktori untuk proyek:
sudo mkdir -p /var/www/project.local echo '<?php phpinfo(); ?>' | sudo tee /var/www/project.local/index.php
Saya mengambil nama untuk proyek (project.local) dan host virtual (project.local.php71 / 72), tetapi Anda dapat menggunakan nama yang sesuai untuk Anda (ingat untuk mengubah pengaturan host virtual).
Awalnya, hanya satu perintah phpinfo yang dimasukkan ke dalam file indeks, setelah mengatur dan memeriksa kinerja sistem, index.php perlu diganti dengan yang digunakan dalam proyek.
4. Instal nginx dan konfigurasikan host virtual
sudo apt install nginx
Kami membuat file
/etc/nginx/sites-available/project.local.php71 dengan deskripsi virtual host pertama (ini akan digunakan untuk memverifikasi operasi proyek di bawah PHP v.7.1):
server { listen 80; server_name project.local.php71; index index.php; root /var/www/project.local; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9071; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Demikian pula, file
/etc/nginx/sites-available/project.local.php72 untuk host virtual kedua:
server { listen 80; server_name project.local.php72; index index.php; root /var/www/project.local; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9072; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Sekarang kita membuat symlink ke konfigurasi host virtual di atas dan kelebihan Nginx:
cd /etc/nginx/sites-enabled sudo ln -s ../sites-available/project.local.php71 sudo ln -s ../sites-available/project.local.php72 sudo systemctl reload nginx
5. Periksa
curl --silent http://project.local.php71/index.php | grep -o "PHP Version [0-9\.]\{1,\}" curl --silent http://project.local.php72/index.php | grep -o "PHP Version [0-9\.]\{1,\}"
Sebagai hasilnya, kita harus mendapatkan versi PHP (sebagai hasil dari pemrosesan perintah phpinfo oleh penerjemah dari berbagai versi).
Sekarang tinggal mengunggah proyek Anda ke folder /var/www/project.local dan Anda dapat memeriksa operasinya di penerjemah PHP 7.1 di
http: //project.local.php71 dan PHP 7.2 di
http: //project.local.php71 .
Bahan tambahan1.
Panduan Praktis Lengkap Docker