Jak zainstalować php 7, aby działał obok php 5 na Ubuntu z Nginx

9

Chcę wypróbować php 7 i sprawić, by moja strona działała na php 7 w tym samym czasie, utrzymując inne witryny na php 5 na wszelki wypadek. tak że z konfiguracji wirtualnego hosta domeny mogę zdecydować, który php ma zostać uruchomiony.

Spojrzałem na zarządzanie wersjami php i zobaczyłem, że można uruchomić dwie wersje, chociaż te, które znalazłem, wydają się być apache. Szukam bardziej przejrzystych instrukcji, jak to zrobić w Nginx. Mam również hhvm działający w razie potrzeby.

Przerażony średnik
źródło

Odpowiedzi:

11

Po pierwsze, trzeba zainstalować php5-fpmi php7.0-fpmod Ondřej Sury za PPA dla współ-instalowanego PHP5 i php7.0. :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Następnie nginxsugerujemy użycie pakietów FPM. Więc zainstaluj odpowiednio pakiety:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Źródło: Odpowiedź na temat „Jak zainstalować php 7?” pytanie oraz niestandardowe komentarze i modyfikacje ode mnie.


Drugie nginx. nginxmoże być tak dobry, jak twoje konfiguracje. Prawdopodobnie masz blok obsługi PHP na swoich blokach serwerów nginx podobny do tego (z domyślnej konfiguracji przykładowej):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Ta konfiguracja zostanie przekazana tylko do php5-fpm. W efekcie dotyczy to całego bloku serwera. Najłatwiejszym sposobem na załatwienie tego jest posiadanie drugiego bloku serwera (na przykład test.domain.tld) i podanie zamiast tego fastcgi_passmiejsca docelowego PHP 7.0 . W php7.0 na Xenial skończy się coś takiego (wyodrębnione z poprawki ostatnio przesłanej do pakietu Xenial nginx), jednak nie znam układu pakietu Ondreja, więc nie mogę podać tam dokładnych szczegółów (sprawdź /etc/php7.0/fpm/pool.d/www.conflub podobny do określenia, gdzie nasłuchuje):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Będziesz musiał zrobić coś podobnego dla swojego php5bloku, aby sprawdzić, php5.6czy używane są gniazda zamiast wbudowanego php5gniazda (które właśnie usunęliśmy).

Następnie użyj drugiej domeny testowej, aby uruchomić php7.0testowanie. Jeśli jednak chcesz to zrobić, pamiętaj o utworzeniu kopii witryny - prawdopodobnie konieczne będzie posiadanie osobnej kopii testowej, aby po zakończeniu pracy php7.0można było ją „przełączyć” bez kwestia.

Niestety, nie ma łatwego sposobu na stworzenie php5i php7.0pracę w obrębie tego samego bloku serwera, nie bez zmiany ścieżek dla witryny, aplikacji itp., Aby mieć jeden dla php5i jeden dla php7.0; taka przeróbka witryn może być nieprzyjemna, stąd propozycja uruchomienia dwóch osobnych kopii kodu witryny, jednej do php7.0migracji, a drugiej do php5produkcji.

Thomas Ward
źródło
Jeśli wybierzesz ten sposób, powinieneś trzymać się *php5.6*pakietów, które zapewnia Ondřej, i usunąć zwykłe php5pakiety.
muru
@muru prawdopodobnie rację, napiszę to w
Thomas Ward
Dzięki! To działało lepiej niż się spodziewałem. na początku były problemy z gruszką i cli, ale okazało się, że był to błąd w repozytorium, który potrzebowałem zaktualizować i zadziałał. Moja strona działa bardzo szybko na php7. to niesamowite.
Przerażony średnikiem
Skarpeta fpm miała również 5.6 w nazwie.
toster-cx
Od prawie 2018 r. Konfiguracja php5.6 dla NGINX tofastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters,