GNU/Linux >> Linux の 問題 >  >> Linux

同じサーバーで異なるPHPバージョンを実行する方法

SysAdminが奇妙なリクエストを受け取ることがあります。例:数日前、クライアントが新しいサイトをアップロードする必要があります。サーバーがPHP7.2で実行されている間、この新しいサイトにはPHP7.4が必要です。 7.4をインストールしましたが、他のすべてのVirtualHost(少なくとも重要なもの)はphp7.4で壊れました。最初はある種のコンテナについて考えていましたが、もっと簡単なものを見つけました。これは、同じサーバーで異なるPHPバージョンを実行する方法です。

私の設定

私は常に、ここにあるすべての記事に対して仮想マシンを作成または再利用しています。重要なことを壊す前に常にテストする必要があるからです。
このチュートリアルでは、古いものの新規インストールを作成しましたか? Ubuntuサーバー18.04。 sitio1というサイトを作成します (sitioはスペイン語のサイトです)PHP7.2が必要です。 PHP 7.4を必要とする別のサイト、 sitio2

1。 Ondrejphpリポジトリを追加する

私の時代には、設定ファイルを手動で編集する必要がありました。しかし今では、ディストリビューションと独立系ソフトウェアベンダーのソフトウェアソースを簡単に管理するためのこのパッケージsoftware-properties-commonがあります。

したがって、最初のステップはそのパッケージをインストールすることです:

sudo apt-get install software-properties-common

2番目のステップは、次のコマンドを実行して実際にリポジトリを追加することです。

sudo add-apt-repository ppa:ondrej / php

画面上のメッセージに注意を払い、指示に従ってください。次に実行します

sudo apt-get update

2。 2つの異なるPHPバージョンをインストールする

2.1。 PHP 7.2

このチュートリアルの目的は、同じサーバーでさまざまなバージョンのphpを実行する方法を示すことです。私は(ほとんど)phpモジュールをインストールしていませんが、これを読んでいる場合は、確かにそれらのいくつか、たとえばmysqlサポートが必要です。それらをインストールすることを忘れないでください。

sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid

2.2 PHP 7.4

ここで、php7.4でこのプロセスを繰り返します。必要なphpモジュールをインストールすることを忘れないでください。

sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4

3。 fpmサービスを開始する

次に、両方のバージョンのfpmサービスを開始する必要があります

sudo systemctl start php7.2-fpm
sudo systemctl start php7.4-fpm

次に、実行中のサービスのステータスを確認できます。

sudo systemctl status php7.x-fpm

4。 VirtualHostsの作成

4.1VirtualHostデータ

すべての仮想ホストの/var/wwwの下に最初のディレクトリを作成します。

mkdir /var/www/sitio1
mkdir /var/www/sitio2
chown  -R www-data:www-data /var/www

次に、php情報のみを表示するために、次のコンテンツのみを含むphpファイルをすべてのディレクトリに作成します。

<?php 
phpinfo(); 
?>

4.2VirtualHostの構成

次の内容で、すべてのサイトの.confファイルを作成する必要があります。

nano /etc/apache2/sites-available/sitio1.conf
<VirtualHost *:80>
     ServerAdmin admin@sitio1
     ServerName sitio1
     DocumentRoot /var/www/sitio1
     DirectoryIndex info.php
     <Directory /var/www/sitio1>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     </Directory>

    <FilesMatch \.php$>
      # this part do the trick
      SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/sitio1_error.log
     CustomLog ${APACHE_LOG_DIR}/sitio1_access.log combined
</VirtualHost>

別のファイル/etc/apache2/sites-available/sitio2.confを作成して、適切な情報を変更します(sitio1はsitio2になり、php7.2はphp7.4になります)

5。 DNS情報を追加する

か否か。つまり、実際には、両方のサイトに適切なDNSレコードを作成する必要があります。これはテストと学習のみを目的としているため、/etc/hostsにのみレコードを作成しています。 ファイル。この仮想マシンのIPアドレスは192.168.122.14

です。

私がsitio1とsitio2を解決できることを知ってください。

6。すべてを有効にする

この構成を処理するために必要ないくつかのapacheモジュールを有効にする必要があります。次に、これらの仮想ホストを有効にし、最後にapacheを開始します。

sudo a2enmod actions fcgid alias proxy_fcgi
sudo a2ensite sitio1
sudo a2ensite sitio2
sudo systemctl start apache2

apachetcl configtestを使用して、スペルミス、モジュールの欠落、またはその他の問題について構成をテストすることもできます。 。

7。テスト時間

次に、ブラウザでhttp:// sitio1とhttp:// sitio2を指定し、それらが正しいPHPバージョンを実行しているかどうかを確認する必要があります。

わーい!。そして、これは同じサーバー上で異なるPHPバージョンを実行する方法です。今、私は他にどのような組み合わせを試すことができるのか興味があります。

ボーナス:古いubuntus

私のクライアントには、実際には2021年4月にサポートが終了したUbuntu16があります。追加する必要のあるリポジトリはppa:tomvlk/php-archiveでした。


Linux
  1. Golang Web サーバーをバックグラウンドで実行するにはどうすればよいですか?

  2. LinuxでTomcatサーバーを起動するには?

  3. 同じ引数で別のコマンドを実行するにはどうすればよいですか?

  1. NGNIXの異なるドメインに対して複数のバージョンのPHPを実行する

  2. 同じインストールで2つの異なるバージョンのWineを使用するにはどうすればよいですか?

  3. EPEL から同じマシンに 2 つの異なるバージョンの Java をインストールするにはどうすればよいですか?

  1. MySQL / Apache/PHPバージョンを取得する方法

  2. UbuntuでNginxを使用して複数のPHPバージョンを実行する方法は?

  3. OS に応じて同じマシンに異なる静的 IP アドレスを割り当てる方法は?