Kemungkinan besar, beberapa bagian dari artikel ini sudah tidak asing lagi bagi banyak habrozhitel, tetapi sehubungan dengan pembelian laptop baru, saya memutuskan untuk mengumpulkan semua biji-bijian bersama-sama dan mengatur alat yang nyaman untuk pengembangan. Saya sering harus bekerja dengan banyak proyek kecil, dengan versi PHP yang berbeda, sering menerjemahkan proyek lama ke versi baru. Di masa lalu, ketika saya adalah pengguna Windows, saya menggunakan OpenServer. Tetapi dengan beralih ke Linux, saya tidak memiliki kesederhanaan untuk menciptakan host dan mengganti versi yang ada di dalamnya. Karena itu, saya harus membuat solusi yang lebih nyaman di Linux =)
Tujuan
- Gunakan perangkat lunak saat ini pada saat penulisan
- Untuk membedakan antara domain lokal, kami akan menggunakan domain .loc khusus
- Kami menerapkan perpindahan versi PHP melalui subdomain menggunakan fast-cgi
- Pembuatan host otomatis dengan vhost_alias dan dnsmasq
Apa yang kita miliki pada akhirnya. Saat beralih ke
56.test.loc
Apache akan diluncurkan dengan PHP versi 5.6.36
/ var / www / test.loc /public_html/index.php
Mengubah subdomain menjadi
72 .test.loc
file yang sama akan diluncurkan tetapi sudah dengan versi PHP 7.2.7
Versi lain dikirimkan dengan cara yang sama seperti yang dijelaskan di bawah ini.
Untuk membuat situs lain, cukup buat di folder
/ var / www / a dengan akhiran
.loc , di dalamnya harus folder
public_html yang merupakan akar dari situs
Itu saja. Karena tanpa siksaan tambahan, restart, dan mengedit konfigurasi, kami memiliki sistem otomatis untuk bekerja dengan situs.
Saya akan menguji semua ini di LinuxMint19, didasarkan pada Ubuntu18.04, jadi semuanya akan sama dengan itu.
Pertama, kami akan menyediakan paket yang diperlukan
sudo apt update sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix
Kami menetapkan
Postfix sebagai roti, sebagai solusi sederhana (dalam wizard instalasi, pilih semuanya secara default) untuk mengirim surat dari mesin lokal.
Karena ini adalah pengembangan lokal dan saya satu-satunya pengguna. Lebih nyaman bagi saya untuk mentransfer folder proyek ke direktori rumah saya. Mount dengan drive terpisah dan bermigrasi ketika saya menginstal ulang sistem. Cara termudah adalah dengan membuat tautan, maka Anda tidak perlu mengubah jalur di pengaturan dan jalur itu akrab bagi semua orang.
Kami menyalin folder yang dibuat oleh Apache ke direktori home, membuat tautan di tempatnya, tanpa lupa mengubah pengguna menjadi dirinya sendiri dan bertukar grup dengan Apache.
sudo mv /var/www/ ~/www sudo ln -s ~/www /var/www sudo chown $USER:$USER -R ~/www sudo usermod -a -G www-data $USER sudo usermod -a -G $USER www-data
Buat folder tempat kami akan mengumpulkan sumber PHP untuk versi yang berbeda
sudo mkdir /usr/local/src/php-build
Kami juga membutuhkan folder untuk skrip CGI
sudo mkdir /var/www/cgi-bin
Dan folder runtime untuk skrip yang sama, dengan hak
sudo mkdir /var/run/mod_fcgid sudo chmod 777 /var/run/mod_fcgid
Dan karena direktori yang kita miliki adalah dalam RAM, kami
akan menambahkan pembuatannya pada startup sistem, untuk ini kami
akan menambahkannya ke
/etc/tmpfiles.d/fcgid.conf #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - -
Dnsmasq-base saya berasal dari kotak, jika tidak maka selalu dapat dikirimkan.
sudo apt install dnsmasq
Tambahkan aturan ke konfigurasinya.
Anda dapat
menemukan file konfigurasi
dnsmasq.conf seperti ini
sudo updatedb locate dnsmasq.conf
Atau jika itu, seperti milik saya, adalah bagian dari NetworkManager, kemudian buat file konfigurasi baru di
/etc/NetworkManager/dnsmasq.d/local.confTambahkan baris ke sana untuk mengarahkan ulang domain lokal kami ke mesin lokal.
address=/loc/127.0.0.1
Anda juga perlu mengaktifkan modul Apache yang diperlukan
sudo a2enmod fcgid vhost_alias actions rewrite
Persiapan awal selesai, kami melanjutkan ke perakitan berbagai versi lokal PHP. Untuk
setiap versi PHP, lakukan 4 langkah berikut. Misalnya,
5.6.361. Unduh kode sumber dari versi yang diinginkan dan buka paketnya
cd /usr/local/src/php-build sudo wget http://pl1.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2 sudo tar jxf php-5.6.36.tar.bz2
2. Kami mengumpulkan versi PHP yang diperlukan dari sumber, dan menaruhnya di
/opt/php-5.6.36 sudo mkdir /opt/php-5.6.36 cd php-5.6.36 sudo ./configure --prefix=/opt/php-5.6.36 --with-config-file-path=/opt/php-5.6.36 --enable-cgi sudo make sudo make install sudo make clean
3. Buat CGI untuk menangani versi ini di
/var/www/cgi-bin/php-5.6.36.fcgi #!/bin/bash PHPRC=/opt/php-5.6.36/php.ini PHP_CGI=/opt/php-5.6.36/bin/php-cgi PHP_FCGI_CHILDREN=8 PHP_FCGI_MAX_REQUESTS=3000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /opt/php-5.6.36/bin/php-cgi
4. Membuat file dapat dieksekusi
sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi
5. Tambahkan tindakan untuk menangani setiap versi di
/etc/apache2/mods-available/fcgid.conf <IfModule mod_fcgid.c> AddHandler fcgid-script fcg fcgi fpl Action application/x-httpd-php-5.6.36 /cgi-bin/php-5.6.36.fcgi AddType application/x-httpd-php-5.6.36 .php
6. Tambahkan aturan untuk memproses setiap versi di
/etc/apache2/sites-available/000-default.conf <VirtualHost *:80> # ServerNam ServerAlias *.loc # CGI ScriptAlias /cgi-bin /var/www/cgi-bin # DocumentRoot VirtualDocumentRoot /var/www/%2+/public_html # <Directory /var/www/*.loc/> Options +ExecCGI -Indexes AllowOverride All Order allow,deny Allow from all <FilesMatch \.php$> # <If "%{SERVER_NAME} =~ /56\..*?\.loc/"> SetHandler application/x-httpd-php-5.6.36 </If> <Else> # , , SetHandler application/x-httpd-php-7.2.7 </Else> </FilesMatch> </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Yah, itu dia. Tetap hanya untuk me-restart apache dan dnsmasq dan gunakan
sudo service apache2 restart sudo service network-manager restart
Masukkan
index.php situs uji baru
phpinfo () dan verifikasi bahwa semuanya berfungsi.