[AWS] Amazon Linux AMI에서 PHP 7.x 설치

아마존 리눅스에서 PHP 7.x 버전 설치하는 방법을 소개합니다. EC2 인스턴스 생성 직후 $ sudo yum info php* 로 패키지를 조회 해보면 php 5.4 버전 기준의 패키지만 검색됩니다. 아래 단계를 진행하시면 php7 버전 설치가 가능합니다.

진행 방법

// php 최신 버전 조회
$ sudo amazon-linux-extras | grep php
// php 7.4 레포지토리 설치 (작성일 기준에서 최신버전은 php7.4)
$ sudo amazon-linux-extras install php7.4
// php 7.4 패키지 활성 (기존 설치된 버전이 있다면 disable 명령 후 진행)
$ sudo amazon-linux-extras enable php7.4
// php 모듈 설치
$ sudo yum install  php-cli php-common php-gd php-mbstring  php-mysqlnd php-pdo php-fpm php-xml php-opcache php-zip php-bcmath
// php 버전 확인
$ php -v

* 이 내용은 https://www.lesstif.com/lpt/amazon-linux-ami-php-7-3-77955353.html 을 바탕으로 재작성하였습니다.

[PHP] PHP5.x -> 7.0 으로 빠르게 버전 올리기

이 포스트는 AWS EC2 환경에서 nginx + php-fpm 을 사용하는 환경을 기준으로 작성되었습니다.

서버에 laravel을 설치해볼겸 기존 PHP5.6을 PHP7로 버전을 올려보려한다.

(이 블로그와 각종 개발용 사이트들 그리고 크롤러가 돌고 있는 서버에서..)

먼저 PHP7로 올렸을때 기존에 도는 웹사이트들이 영향이 가는지를 확인. 문제 없는 것으로 보인다. 그렇다면 시작!

 

+ 현재 설치되어있는 php 관련 패키지를 확인하고 php-fpm 설정을 백업한다.

설치 된 패키지 확인

php-fpm 설정 파일은 /etc/php-fpm.d/www.conf 파일이다. 잘 백업해두자.

 

+ php5.x 관련 패키지와 httpd 패키지 삭제

여기서 nginx를 쓰는데 httpd 패키지는 왜 지워? 라고 생각할 것이다. 구버전 httpd 패키지가 남아있다면 php7 패키지 설치가 되지 않는다. 나도 있는줄 몰랐는데 발견해서 삭제.

 

+ php7과 관련 모듈 설치

그 외 기존 설치되어있던 패키지를 확인하여 추가 설치한다. 엔터 쳐가면서 타이핑하기 귀찮다면 && 으로 연결해서 한번에 설치하자.

설치 후 service php-fpm restart와 service nginx reload를 하면 이상하게 에러 없이 재시작이 된다.

하지만 돌아가던 사이트는 500 bed gateway 에러를 보여줄 것이다.

당황하지 말고 nginx 에러 로그를 확인하면 php-fpm.sock 파일을 찾을 수 없단다.
그렇다. php-fpm 이 설치된 후 설정이 초기화 된 것이다.

설정 파일은 /etc/php-fpm-7.0.d/www.conf 에 존재한다. 백업해둔 기존 설정 파일을 참조하여 수정한다.

백업을 하지 않은 경우 저 에러를 해결하기 위해서는 www.conf 파일 내용 중 listen = 127.0.0.1:9000 을 listen = ‘/var/run/php-fpm.sock’ (기존 sock 파일 경로) 으로 변경해준다.
그리고 추가로 몇가지 수정해줄 것이 있다.

user = apache -> user = nginx
group = apache -> group = nginx
listen.acl_users = apache,nginx -> listen_acl_users = nginx (이건 그냥 두어도 무관하다.)

 

변경된 설정을 저장하고 service php-fpm restart와 service nginx reload 명령을 실행한다.

이제 사이트가 잘 나온다. 기존 php5.x 버전보다 속도도 빠르다!

 

정리하자면 PHP버전을 올리는데에는 기존 nginx 설정은 손댈 것이 없다.

패키지 삭제와 설치 후에 php-fpm의 소켓파일 경로만 잡아주고 재시작하기만 하면 된다.

 

간단해서 다행이다.