CentOS 7에서 PHP 7로 업그레이드하는 방법
소개
2015년 12월 3일에 출시된 PHP 7은 스칼라 유형 힌트와 같은 새로운 기능과 함께 이전 버전의 언어보다 상당한 속도 향상을 약속합니다. 이 가이드는 커뮤니티에서 제공하는 패키지를 사용하여 PHP 5.x(모든 릴리스)를 실행하는 Apache 또는 Nginx 웹 서버를 PHP 7로 빠르게 업그레이드하는 방법을 설명합니다.
경고: 대부분의 주요 버전 언어 릴리스와 마찬가지로 생산 환경에서 PHP 7로 전환하기 전에 잠시 기다리는 것이 가장 좋습니다. 그동안 애플리케이션이 새 릴리스와의 호환성을 테스트하고, 벤치마크를 수행하고, 새로운 언어 기능에 익숙해지는 것이 좋습니다.
데이터베이스 관리를 위해 phpMyAdmin을 설치한 경우 phpMyAdmin 패키지가 아직 업그레이드를 지원하지 않으므로 업그레이드하기 전에 공식 CentOS PHP 7 패키지를 기다리는 것이 좋습니다. 활성 사용자가 있는 다른 서비스나 애플리케이션을 실행 중인 경우 스테이징 환경에서 이 프로세스를 먼저 테스트하는 것이 가장 안전합니다.
전제 조건
이 가이드는 Apache와 함께 mod_php
를 사용하거나 Nginx와 함께 PHP-FPM을 사용하여 CentOS 7에서 PHP 5.x를 실행한다고 가정합니다. 또한 관리 작업을 위한 sudo
권한으로 구성된 루트가 아닌 사용자가 있다고 가정합니다.
PHP 5 설치 프로세스는 다음 가이드에 설명되어 있습니다.
- Linux, Apache, MySQL, PHP(LAMP) 스택을 CentOS 7에 설치하는 방법
- Linux, Nginx, MySQL, PHP(LEMP) 스택을 CentOS 7에 설치하는 방법
IUS 커뮤니티 프로젝트 저장소 구독하기
PHP 7.x는 아직 주요 배포용 공식 리포지토리에 패키지되지 않았으므로 타사 소스에 의존해야 합니다. 여러 리포지토리에서 PHP 7 RPM 파일을 제공합니다. 우리는 IUS 저장소를 사용할 것입니다.
IUS는 리포지토리를 구독하고 관련 GPG 키를 가져오기 위한 설치 스크립트를 제공합니다. 홈 디렉터리에 있는지 확인하고 curl
을 사용하여 스크립트를 검색합니다.
- cd ~
- curl 'https://setup.ius.io/' -o setup-ius.sh
스크립트를 실행합니다.
- sudo bash setup-ius.sh
Apache로 mod_php 업그레이드
이 섹션에서는 Apache를 웹 서버로 사용하고 mod_php
를 사용하여 PHP 코드를 실행하는 시스템의 업그레이드 프로세스를 설명합니다. 대신 Nginx 및 PHP-FPM을 실행 중인 경우 다음 섹션으로 건너뜁니다.
기존 PHP 패키지를 제거하여 시작하십시오. 메시지가 표시되면 y를 누르고 Enter를 눌러 계속하십시오.
- sudo yum remove php-cli mod_php php-common
IUS에서 새 PHP 7 패키지를 설치합니다. 다시 y를 누르고 프롬프트가 표시되면 Enter를 누르십시오.
- sudo yum install mod_php70u php70u-cli php70u-mysqlnd
마지막으로 Apache를 다시 시작하여 mod_php
의 새 버전을 로드합니다.
- sudo apachectl restart
systemctl
을 사용하여 httpd
systemd
장치에서 관리하는 Apache의 상태를 확인할 수 있습니다.
- systemctl status httpd
Nginx로 PHP-FPM 업그레이드
이 섹션에서는 Nginx를 웹 서버로 사용하고 PHP-FPM을 사용하여 PHP 코드를 실행하는 시스템의 업그레이드 프로세스를 설명합니다. Apache 기반 시스템을 이미 업그레이드했다면 PHP 테스트 섹션으로 건너뛰십시오.
기존 PHP 패키지를 제거하여 시작하십시오. 메시지가 표시되면 y를 누르고 Enter를 눌러 계속하십시오.
- sudo yum remove php-fpm php-cli php-common
IUS에서 새 PHP 7 패키지를 설치합니다. 다시 y를 누르고 프롬프트가 표시되면 Enter를 누르십시오.
- sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd
설치가 완료되면 PHP-FPM과 Nginx 모두에 대해 몇 가지 구성을 변경해야 합니다. 구성된 대로 PHP-FPM은 로컬 TCP 소켓에서 연결을 수신하는 반면 Nginx는 파일 시스템의 경로에 매핑되는 Unix 도메인 소켓을 기대합니다.
PHP-FPM은 자식 프로세스의 여러 풀을 처리할 수 있습니다. 구성된 대로 www라는 단일 풀을 제공하며 이는 /etc/php-fpm.d/www.conf
에 정의되어 있습니다. nano
(또는 선호하는 텍스트 편집기)로 이 파일을 엽니다.
- sudo nano /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
이 포함된 블록을 찾으십시오. 이 블록은 PHP-FPM에게 포트 9000의 루프백 주소를 수신하도록 지시합니다. 세미콜론으로 이 행을 주석 처리하고 listen = /를 주석 해제합니다. run/php-fpm/www.sock
아래 몇 줄.
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
; access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock
다음으로 listen.acl_users
값이 포함된 블록을 찾고 listen.acl_users = nginx
의 주석 처리를 제거합니다.
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =
종료하고 파일을 저장합니다. nano
에서는 Ctrl-X를 눌러 종료하고, y를 눌러 확인하고, Enter를 눌러 덮어쓸 파일 이름을 확인하면 됩니다.
다음으로 Nginx가 올바른 소켓 경로를 사용하여 PHP 파일을 처리하는지 확인합니다. /etc/nginx/conf.d/default.conf
를 열어 시작합니다.
- sudo nano /etc/nginx/conf.d/php-fpm.conf
php-fpm.conf
는 다른 Nginx 구성 지시문에서 참조할 수 있는 업스트림을 정의합니다. 업스트림 블록 내에서 #
를 사용하여 server 127.0.0.1:9000;
을 주석 처리하고 server unix:/run/php-fpm/www를 주석 해제합니다. .삭;
:
# PHP-FPM FastCGI server
# network or unix domain socket configuration
upstream php-fpm {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
종료하고 파일을 저장한 다음 /etc/nginx/conf.d/default.conf
를 엽니다.
- sudo nano /etc/nginx/conf.d/default.conf
location ~ \\.php${
로 시작하는 블록을 찾습니다. 이 블록 내에서 fastcgi_pass
지시문을 찾습니다. 이 줄을 주석 처리하거나 삭제하고 php-fpm.conf
에 정의된 업스트림을 참조하는 fastcgi_pass php-fpm
으로 바꿉니다.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
파일을 종료하고 저장한 다음, 새 구성 지시문이 적용되도록 PHP-FPM 및 Nginx를 다시 시작합니다.
- sudo systemctl restart php-fpm
- sudo systemctl restart nginx
systemctl
을 사용하여 각 서비스의 상태를 확인할 수 있습니다.
- systemctl status php-fpm
- systemctl status nginx
PHP 테스트
웹 서버가 구성되고 새 패키지가 설치되면 PHP가 실행 중인지 확인할 수 있어야 합니다. 명령줄에서 설치된 PHP 버전을 확인하여 시작합니다.
- php -v
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
웹 서버의 문서 루트에 테스트 파일을 만들 수도 있습니다. 위치는 서버 구성에 따라 다르지만 일반적으로 문서 루트는 다음 디렉토리 중 하나로 설정됩니다.
- <코드>/var/www/html
- <코드>/var/www/
- <코드>/usr/share/nginx/html
nano
를 사용하여 문서 루트에서 info.php
라는 새 파일을 엽니다. 기본적으로 Apache에서는 다음과 같습니다.
- sudo nano /var/www/html/info.php
Nginx에서는 대신 다음을 사용할 수 있습니다.
- sudo nano /usr/share/nginx/html/info.php
다음 코드를 붙여넣습니다.
<?php
phpinfo();
편집기를 종료하고 info.php
를 저장합니다. 이제 브라우저에서 다음 주소를 로드합니다.
http://server_domain_name_or_IP/info.php
실행 중인 버전과 구성이 나열된 PHP 7 정보 페이지가 표시되어야 합니다. 이를 다시 확인했으면 info.php
를 삭제하는 것이 가장 안전합니다.
- sudo rm /var/www/html/info.php
이제 작동하는 PHP 7 설치가 있습니다. 여기에서 Erika Heidi의 공식 마이그레이션 가이드를 확인할 수 있습니다.