OS: Rocky Linux 9버전
Apache + PHP-FPM + MySQL
Rocky Linux에 설치했던 패키지에 대해 설명
제가 하면서 막혔던 부분은 글 밑에 적어뒀습니다.
https://hoing.io/archives/64408
리눅스 APM(Apache + PHP + MySQL) 설치 및 연동 - Rocky Linux 8
hoing.io
참고 글
Contents [숨기기]
APM
APM 은 Apache PHP MariaDB/MySQL 의 약자로웹 서버를 구축하고 PHP 로 작성된 웹 어플리케이션을 구동하기 위해 이전부터 많이 사용해온 스택 입니다.
PHP 를 구동 하기 위한 서버 스택의 구성은 여러가지 방식으로 할 수 있습니다.
Apache + PHP(mod_php) + MySQL 나 MariaDB
Apache + PHP-FPM + MySQL 나 MariaDB
Nginx + PHP-FPM + MySQL 나 MariaDB
이번 글에서는 dnf(rpm)으로 Apache + PHP-FPM + MySQL 기술 하도록 하겠습니다.
• 설치 환경
OS: Rocky Linux 8.6
Apache 2.4.37 + PHP-FPM 8.2.0 + MySQL 8.0.26
설치순서는 Apache MariaDB PHP-FPM 순으로 설치 진행 합니다.
• CentOS 7 에서 APM 구성은 아래 글을 참조 하시면 됩니다.

• 우분투 환경에서의 APM 은 아래 글을 참조 하시면 됩니다.

사전 환경 구성
외부 Repository 구성
• dnf 구성
• remi repo 활성화
사전 필요 패키지 설치
• 패키지 설치
Apache
• 패키지 설치
버전 확인
MySQL
• 패키지 설치
기본 파라미터 추가
• 설정 파일 수정
• MySQL 시작
• 버전 확인
PHP
• REMI PHP 8.2 설치
• 버전 확인
포스팅에서는 8.2 버전으로 설치를 하였지만, 다른 버전을 설치 해도 경로만 다르고 설정은 동일 합니다.
8.1 또는 7.4 버전으로 설치를 원하시는 분은 위의 명령에서 버전만 변경 하시면 됩니다.
php.ini 파일 수정
• php.ini 파일 수정
파일을 수정 하였다면 저장 후 종료 합니다.
PHP-FPM 설정
포스팅에서는 Apache 와 PHP 의 연동을 PHP-FPM 으로 사용 하였습니다. 그렇기 때문에 PHP-FPM 에 대한 설정이 필요 합니다.
Apache 는 mod_php 를 통해서 Apache 와 PHP 와의 연동 설정이 기존 부터 사용하던 보통의 방식이지만 최근에는 PHP-FPM 이 성능상 더 좋기 이점이 있어서 PHP-FPM 을 많이 사용하는 추세 입니다.
php-fpm.conf
• php-fpm.conf 파일 수정
여기 까지 확인 및 수정 한 다음에 파일을 저장 후 종료 합니다.
www.conf
pool 에 해당 하는 설정으로 파일 별로 pool 을 생성 할 수 있으며 pool 별로 포트와 이름 등을 달리하여 시작 할 수 있습니다.
포스팅에서는 기본 생성되어 있는 www pool 을 수정하여 사용 하였습니다.
• www.conf 파일 수정
www.conf 파일을 아래와 같이 내용을 수정 합니다.
• 설정1
• 설정2 - PHP-FPM 프로세스 관련
* 위의 설정값은 예시입니다.
- pm.max_children 는 설정된 PHP Pool(여기서는 www) 내에서 가동할 수 있는 최대 자식 프로세스 수를 의미 합니다.
- pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수입니다.
- pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수가 이 개수보다 작으면 자식 프로세스를 생성합니다.
- pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수를 의미 합니다.
- pm.max_requests 는 각 프로세스가 최대 request를 처리하면 수 입니다.
- 500 으로 설정되어 있다면 500번 request 후 프로세스를 다시 생성 합니다.
- 프로세스가 점진적인 메모리 증가에 대한부분을 방지 할 수 있습니다.
- apache 에서 유사한 설정으로는 MaxRequestsPerChild 있습니다.
[참고] 메모리 사용현황 및 세션 계산
아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인 할 수 있습니다.
시스템에 가용한 메모리나 사용 할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정 합니다.
ex) PHP에 6GB 를 사용 하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임
6000MB / 60MB = 자식 프로세스 개수 100개 로 설정
이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정 합니다.
• 설정3 - 로그 설정
로그 관련된 내용의 주석 해제와 변경을 합니다
여기 까지 파일 수정이 완료 되었다면 저장 후 종료 합니다.
PHP Opcache 파라미터
PHP 5.5 버전 부터 기본에 포함 되었으며 이전에는 zend optimizer 를 별도로 설치 및 plugin 하여 사용 하였습니다.
사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache(예전의 Zend Optimizer)를
이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능 입니다.
php7.x 버전부터 Opcache 의 기본 메모리가 128M 입니다.
메모리를 변경하거나 다른 파라미터를 조정 하고자 한다면 10-opcache.ini 에서 설정할 수 있습니다.
• 파일 수정
10-opcache.ini 파일에는 opcache 의 활성화 내용부터 해서 기본적으로 사용 될수 있는 파라미터는 주석이 해제되어 활성화가 되어 있는 상태 입니다.
opcache의 파라미터의 간략한 설명은 아래와 같습니다.
PHP-FPM 재시작
설정이 완료 되었다면 PHP-FPM 을 재시작 합니다.
* PHP-FPM 설치 후 자동으로 기동되어 있을수 있음
프로세스 및 포트 오픈 확인
• 프로세스
- listen 을 Unix Socket 으로 사용 할 경우
- listen 을 IP 으로 사용 할 경우
Apache 설정
• httpd.conf 파일 수정
여기까지 파일을 수정 후에 저장 후 종료 합니다.
• 00-proxy.conf 파일 수정
[참고] PHP-FPM 과 연결되는 Proxy_Pass 설정은 아래 파일내에 대부분이 설정되어 있습니다.
/etc/httpd/conf.d/php82-php.conf
방화벽 설정 및 Apache 재시작
• OS 방화벽 오픈
[참고] 클라우드 사용시 클라우드 네트워크의 보안 정책이나 클라우드의 방화벽도 오픈을 해줘야 합니다.
• phpinfo.php 파일 생성
PHP 정상 작동 여부 확인을 위해 phpinfo.php 파일을 생성 합니다.
• Apache 재시작
• 접속 테스트
http://ip주소/phpinfo.php
내.하.막.글
dnf 구성
- EPEL(Extra Packages for Enterprise Linux)은 Fedora Project에서 제공되는 저장소로 각종 패키지의 최신 버전을 제공하는 community 기반의 저장소입니다.
remi repo 활성화
- RedHat계열의 패키지 저장소를 뜻한다. Remi 저장소에는 기본 저장소에는 추가되어 있지 않은 최신버전의 패키지들이 저장되어 있다.
사전 필요 패키지 설치
패키지 설치
gcc gcc-c++, vim, python, openssl 등을 설치하는 과정
APACHE
아파치 패키지 설치
- : Apache HTTP Server를 설치합니다.
- httpd
-
httpd-devel: Apache HTTP Server 개발 라이브러리를 설치합니다.
-
apr: Apache Portable Runtime(APR)을 설치합니다.
-
apr-util: Apache Portable Runtime Utility(APR-Util)을 설치합니다.
-
apr-devel: APR 개발 라이브러리를 설치합니다.
-
apr-util-devel: APR-Util 개발 라이브러리를 설치합니다.
-
apr-util-openssl: APR-Util에서 OpenSSL을 사용할 수 있도록 설정합니다.
-
mod_proxy_html: Apache HTTP Server에서 HTML을 처리할 수 있도록 설정합니다.
-
libnghttp2: HTTP/2 프로토콜을 지원하는 라이브러리를 설치합니다.
-
mod_http2: Apache HTTP Server에서 HTTP/2 프로토콜을 지원하도록 설정합니다.
-
mod_ssl: Apache HTTP Server에서 SSL/TLS를 지원하도록 설정합니다.
-
httpd-tools: Apache HTTP Server와 관련된 도구를 설치합니다.
MySQL
MySQL 패키지 설치
-
mysql: MySQL 서버와 클라이언트를 설치합니다.
-
mysql-common: MySQL 공통 라이브러리를 설치합니다.
-
mysql-devel: MySQL 개발 라이브러리를 설치합니다.
-
mysql-libs: MySQL 공통 라이브러리를 설치합니다.
-
mysql-selinux: MySQL SELinux 모듈을 설치합니다.
-
mysql-server: MySQL 서버를 설치합니다.
MySQL 설정 파일 수정
이 명령어는 MySQL 서버의 설정 파일인
섹션은 MySQL 서버의 설정을 지정하는 섹션입니다.
은 MySQL 서버가 실행될 사용자 계정을 지정합니다.
은 MySQL 서버의 고유 식별자를 지정합니다.
은 MySQL 서버의 binary log를 사용하도록 설정합니다.
은 binary log가 만료되는 시간을 지정합니다. 이 경우, 432000초(12시간)가 됩니다.
은 InnoDB 버퍼 풀의 크기를 지정합니다. 이 경우, 384MB가 됩니다.
은 InnoDB 테이블당 파일을 사용하도록 설정합니다.
은 MySQL 클라이언트와 서버 간의 문자 집합 설정을 지정합니다. 이 경우,
로 설정하여 클라이언트에서 문자 집합을 설정하지 않도록 합니다.
은 MySQL 서버에서 허용하는 최대 패킷 크기를 지정합니다. 이 경우, 500MB가 됩니다.
는 MySQL 서버가 시작될 때 설정할 초기화 쿼리를 지정합니다. 이 경우,
로 설정하고,
로 설정합니다.
와
는 MySQL 서버의 문자 집합과 정렬 순서를 지정합니다. 이 경우,
문자 집합을 사용하고,
정렬 순서를 사용합니다.
PHP
REMI PHP 8.2 설치
-
php82: PHP 8.2를 설치합니다.
-
php82-php-common: PHP 8.2의 공통 모듈을 설치합니다.
-
php82-php-fpm: PHP 8.2의 FastCGI Process Manager를 설치합니다.
-
php82-php-gd: PHP 8.2의 GD 모듈을 설치합니다.
-
php82-php-xml: PHP 8.2의 XML 모듈을 설치합니다.
-
php82-php-devel: PHP 8.2의 개발 도구를 설치합니다.
-
php82-libzip: PHP 8.2와 함께 사용할 libzip 라이브러리를 설치합니다.
-
php82-php-mysqlnd: PHP 8.2의 MySQL Native Driver를 설치합니다.
-
php82-php-opcache: PHP 8.2의 OPcache를 설치합니다.
-
php82-php-mbstring: PHP 8.2의 MBString 모듈을 설치합니다.
-
php82-php-pdo: PHP 8.2의 PDO 모듈을 설치합니다.
-
php82-php-pecl-imagick-devel: PHP 8.2와 함께 사용할 Imagick 모듈을 설치합니다.
-
php82-php-pecl-selinux: PHP 8.2와 함께 사용할 SELinux 모듈을 설치합니다.
-
php82-php-pecl-zip: PHP 8.2와 함께 사용할 Zip 모듈을 설치합니다.
-
php82-php-bcmath: PHP 8.2의 BCMath 모듈을 설치합니다.
-
curl: cURL 라이브러리를 설치합니다.
-
curl-devel: cURL 라이브러리의 개발 도구를 설치합니다.
-
php82-php-pecl-imagick: PHP 8.2와 함께 사용할 Imagick 모듈을 설치합니다.
-
libpng: libpng 라이브러리를 설치합니다.
-
libpng-devel: libpng 라이브러리의 개발 도구를 설치합니다.
-
libwebp: libwebp 라이브러리를 설치합니다.
-
libwebp-devel: libwebp 라이브러리의 개발 도구를 설치합니다.
-
libXpm: libXpm 라이브러리를 설치합니다.
-
libXpm-devel: libXpm 라이브러리의 개발 도구를 설치합니다.
-
openssl: OpenSSL 라이브러리를 설치합니다.
-
openssl-devel: OpenSSL 라이브러리의 개발 도구를 설치합니다.
-
autoconf: Autoconf를 설치합니다.
-
zlib: Zlib 라이브러리를 설치합니다.
-
zlib-devel: Zlib 라이브러리의 개발 도구를 설치합니다.
-
freetype: FreeType 라이브러리를 설치합니다.
-
freetype-devel: FreeType 라이브러리의 개발 도구를 설치합니다.
-
gd: GD 라이브러리를 설치합니다.
-
gd-devel: GD 라이브러리의 개발 도구를 설치합니다.
-
libmcrypt: libmcrypt 라이브러리를 설치합니다.
-
libmcrypt-devel: libmcrypt 라이브러리의 개발 도구를 설치합니다.
-
libtool-ltdl-devel: libtool-ltdl 라이브러리의 개발 도구를 설치합니다.
-
libxml2-devel: libxml2 라이브러리의 개발 도구를 설치합니다.
-
libxml2: libxml2 라이브러리를 설치
** 따라하면서 막힌 부분 **
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
rocky linux가 9버전이여서 그런지 remi-release-8에서 충돌 오류발생
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
로 수정해서 다운받음
MySQL 설치
sudo dnf -y install mysql mysql-common \
mysql-devel mysql-libs mysql-selinux mysql-server
여기서 2번째 줄
mysql-devel과 mysql-libs가 설치되지 않음
해결법 https://almalinux.pkgs.org/9/almalinux-crb-x86_64/mysql-devel-8.0.30-3.el9_0.x86_64.rpm.html
mysql-devel과 mysql-libs는
dnf --enablerepo=crb install mysql-devel 명령어를 입력했을 때 설치가 되었음. libs는 종속되어서 설치가 되었음.
PHP설치
sudo dnf -y install php82 php82-php-common \
php82-php-fpm php82-php-gd php82-php-xml \
php82 php82-php-devel php82-libzip \
php82-php-mysqlnd php82-php-opcache \
php82-php-mbstring php82-php-pdo \
php82-php-pecl-imagick-devel php82-php-pecl-selinux \
php82-php-pecl-zip php82-php-bcmath \
curl curl-devel php82-php-pecl-imagick \
libpng libpng-devel libwebp libwebp-devel \
libXpm libXpm-devel openssl openssl-devel \
autoconf zlib zlib-devel freetype freetype-devel \
gd gd-devel libmcrypt libmcrypt-devel \
libtool-ltdl-devel libxml2-devel \
libxml2 libcurl libcurl-devel php82-php-soap \
php82-php-pecl-xattr php82-php-pecl-imagick-im7
php82-libzip과 libtool-ltdl-devel이 오류가 났음
php82-libzip은 밑에 두개로 대체
# dnf install php-zip
# dnf --enablerepo=crb install libzip-devel
php82-libzip만 없는 상태
libtool-ltdl-devel
# dnf install libtool
# dnf --enablerepo=highavailability install libtool-ltdl-devel
--> 밑에가 맞는듯 합니다.
php82-libzip만 없는 상태
이거때문인지 php82 -v에서 오류뜨고 cli깔으라고 함
yes 누르고 다운받으면 php8.2.7 버전 나옴
php-fpm.conf 파일이 없어서
추가적인 다운로드 # dnf install php82
설정1번에서 listen = listen = 으로 변경하라는데
이부분은 그냥 listen = 하나만 냅둬야지 나중에 restart시 실행이 됨
'Linux > Rocky Linux' 카테고리의 다른 글
Rocky Linux : 포트포워딩과 도커를 이용해서 외부에서 내부 사이트 들어오기 (0) | 2023.06.14 |
---|---|
Rocky Linux, Laravel : The stream or file "/var/www/html/storage/logs/laravel.log" 오류 (0) | 2023.06.14 |
Rocky Linux : Docker 설치, Docker-Compose 설치 (라라벨 설치하기 위한 단계) (0) | 2023.06.13 |
Rocky Linux : Composer 설치 (0) | 2023.06.13 |
Rocky Linux : 방화벽 (Firewall) (0) | 2023.06.12 |