목차
Amazon Linux 2023 과 PHP
Amazon Linux 2023
아마존 웹 서비스(AWS)에서 직접 관리 및 배포하는 리눅스 배포판을 아마존 리눅스(Amazon Linux)라고 칭한다. 아마존 리눅스는 아마존 리눅스1(AL1, Amazon Linux 1), 아마존 리눅스2(AL2)를 거쳐 가장 최신의 배포판은 아마존 리눅스 2023(Amazon Linux 2023)1라는 이름으로 배포된다.

PHP in AL2023
아마존 리눅스 20232에서 공식적으로 지원하는 PHP 버젼 정보는 AWS 사용자 가이드3에서 확인할 수 있는데, 포스트 작성일인 2024년 07월 05일을 기준으로 PHP8.1
과 8.2
이다. 이 문서에서 다루는 PHP8.3
버전은 아직 AWS 사용자 가이드에는 언급되어 있지 않지만, EC2 인스턴스 콘솔에 접속해 패키지 관리자 명령dnf를 실행해 보면 PHP8.3
4버전을 확인할 수 있다.
[ec2-user@ip-10-0-0-17 ~]$ sudo dnf search php8.?
마지막 메타자료 만료확인 6:50:32 이전인: 2024년 07월 05일 (금) 오전 09시 09분 32초.
=============================== 이름과 일치하는 항목: php8.? ===============================
php8.1.aarch64 : PHP scripting language for creating dynamic web sites
php8.2.aarch64 : PHP scripting language for creating dynamic web sites
php8.3.aarch64 : PHP scripting language for creating dynamic web sites
업그레이드 전 준비
현재 PHP 버전 확인
SSH 등으로 AL2023 인스턴스의 시스템 콘솔에 접속해 현재 설치된 PHP 바이너리의 파일 경로 및 버전 정보를 확인한다.
[ec2-user@ip-10-0-0-17 ~]$ which php
/usr/bin/php
[ec2-user@ip-10-0-0-17 ~]$ php --version
PHP 8.2.18 (cli) (built: Apr 9 2024 18:46:23) (NTS gcc aarch64)
Copyright (c) The PHP Group
Zend Engine v4.2.18, Copyright (c) Zend Technologies
with Zend OPcache v8.2.18, Copyright (c), by Zend Technologies
which 명령 실행 결과에서 PHP 파일이 위치한 경로는 /usr/bin/php
이며, php --version 실행 결과에서 현재 시스템에 설치된 PHP 버전이 8.2.18
임을 확인할 수 있다.
함께 설치된 PHP 패키지 확인
계속해서 다음 명령으로 현재 호스트에 설치된 PHP 패키지들의 목록을 확인한다.
[ec2-user@ip-10-0-0-17 ~]$ sudo dnf list installed | grep php8 | tee php-installed-packages.txt
php8.2-bcmath.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-cli.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-common.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-dba.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-devel.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-ffi.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-fpm.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-gd.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-gmp.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-intl.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-mbstring.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-mysqlnd.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-opcache.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-pdo.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-pgsql.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-process.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-pspell.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-soap.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-sodium.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-tidy.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-xml.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
php8.2-zip.aarch64 8.2.18-1.amzn2023.0.1 @amazonlinux
시스템 패키지 목록 조회를 위해서는 관리자 권한이 필요하므로, sudo를 통해 명령을 실행한다. dnf list installed 명령으로 시스템에 설치된 패키지 목록을 출력하고, grep php8 을 통해 패키지 목록 문자열 중 php가 존재하는 행만 선택한다.
최종적으로, tee php-installed-packages.txt 명령으로 콘솔에 출력된 내용을 텍스트 파일에도 저장한다. 텍스트 파일에 저장하는 이유는, 이어지는 업그레이드 버전 설치 과정에서 필요한 PHP 패키지를 쉽게 찾아보기 위함이다.
시스템에 설치된 패키지 정보를 확인하는 방법 및 결과 문자열을 가공하는 방법은 본 블로그의 AL2023 리눅스 시스템에 설치된 패키지 확인하기를 참고한다.
설치된 PHP-FPM 버전 확인(선택)
웹서비스에 PHP를 사용하는 구조가 nginx 등의 웹 서버를 앞에 두고 php-fpm을 통해 사용하고 있다면, 다음 명령으로 php-fpm 파일 경로와 버전 정보도 함께 확인한다. php-fpm을 사용하지 않는다면 이 단계는 무시하고 진행한다. 앞서 PHP 패키지를 확인하는 과정에서 php8.2-fpm
패키지도 설치되어 있음을 확인했으므로, 해당 정보를 확인한다.
[ec2-user@ip-10-0-0-17 ~]$ which php-fpm
/usr/sbin/php-fpm
[ec2-user@ip-10-0-0-17 ~]$ php-fpm --version
PHP 8.2.18 (fpm-fcgi) (built: Apr 9 2024 18:46:23)
Copyright (c) The PHP Group
Zend Engine v4.2.18, Copyright (c) Zend Technologies
with Zend OPcache v8.2.18, Copyright (c), by Zend Technologies
which php-fpm 명령으로 php-fpm 바이너리 파일 경로가 /usr/sbin/php-fpm
이고, php-fpm --version 명령 실행 결과에서 앞서 php 버전과 같은 8.2.18
이 설치되어 있음을 확인할 수 있다.
PHP 업그레이드
PHP 8.3 설치
다음 명령으로 PHP8.3
버전 및 필요한 패키지를 설치한다.
sudo dnf install php8.3 php8.3-bcmath php8.3-cli php8.3-common php8.3-dba php8.3-devel php8.3-ffi php8.3-fpm php8.3-gd php8.3-gmp php8.3-intl php8.3-mbstring php8.3-mysqlnd php8.3-opcache php8.3-pdo php8.3-pgsql php8.3-process php8.3-pspell php8.3-soap php8.3-sodium php8.3-tidy php8.3-xml php8.3-zip
버전 확인 및 테스트
다음 명령으로 PHP8.3
버전의 정상 설치를 확인하고, 해당 버전이 실행되는지 확인한다.
[ec2-user@ip-10-0-0-17 ~]$ which php
/usr/bin/php
[ec2-user@ip-10-0-0-17 ~]$ php --version
PHP 8.3.7 (cli) (built: May 7 2024 16:35:26) (NTS gcc aarch64)
Copyright (c) The PHP Group
Zend Engine v4.3.7, Copyright (c) Zend Technologies
with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies
PHP버전이 8.3.7
로 바뀐 것을 확인할 수 있다.
PHP-FPM 업그레이드(선택)
PHP-FPM 버전 확인
앞에서 php-fpm을 확인했다면, 동일하게 바이너리 위치와 버전을 확인한다.
[ec2-user@ip-10-0-0-17 ~]$ which php-fpm
/usr/sbin/php-fpm
[ec2-user@ip-10-0-0-17 ~]$ php-fpm --version
PHP 8.3.7 (fpm-fcgi) (built: May 7 2024 16:35:26)
Copyright (c) The PHP Group
Zend Engine v4.3.7, Copyright (c) Zend Technologies
with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies
PHP-FPM의 버전도 8.3.7
로 업그레이드 된 것을 확인할 수 있다.
PHP-FPM 환경설정 테스트 및 서비스 재시작
php-fpm의 새로운 버전이 설치되면서, 시스템 서비스로서의 설정도 변경되었을 것이므로 테스트를 진행하고 이상이 없다면 systemctl 명령을 통해 php-fpm 서비스를 다시 활성화 하고, 서비스를 시작한다.
# php-fpm.conf 설정 오류 확인
[ec2-user@ip-10-0-0-17 ~]$ sudo php-fpm -t
[06-Jul-2024 09:48:24] NOTICE: configuration file /etc/php-fpm.conf test is successful
# php-fpm 서비스 활성화
[ec2-user@ip-10-0-0-17 ~]$ sudo systemctl enable php-fpm
# php-fpm 서비스 실행
[ec2-user@ip-10-0-0-17 ~]$ sudo systemctl start php-fpm
# php-fpm 서비스 상태 확인
[ec2-user@ip-10-0-0-17 ~]$ sudo systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
Active: active (running) since Fri 2024-07-05 20:39:54 KST; 13h ago
Main PID: 4033785 (php-fpm)
Status: "Processes active: 0, idle: 41, Requests: 5043, slow: 0, Traffic: 0.4req/sec"
Tasks: 42 (limit: 18830)
Memory: 3.0G
CPU: 1h 22min 16.308s
CGroup: /system.slice/php-fpm.service
├─4033785 "php-fpm: master process (/etc/php-fpm.conf)"
설정에 이상이 없고 정상 실행 되었다면, 최종적으로 브라우저를 통해 웹 서비스가 정상 동작하는지 확인하면 된다.
참고자료
- 클라우드의 Linux – Amazon Linux 2023
https://aws.amazon.com/ko/linux/amazon-linux-2023/ ↩︎ - What is Amazon Linux 2023
https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html ↩︎ - PHP in AL2023
https://docs.aws.amazon.com/linux/al2023/ug/php.html ↩︎ - Migrating from PHP 8.2.x to PHP 8.3.x
https://www.php.net/migration83 ↩︎