리눅스에 APM(Apache + PHP + MySQL) 설치 및 연동

Last Updated on 5월 10, 2021 by 태랑(정현호)


* 2021년 4월 3일 업데이트 – 변경사항은 계속 업데이트 되어 최신화 되고 있습니다


[들어가기전에] 해당포스팅은 오라클 클라우드 프리티어, APM 스택구성, 도메인 설정, 워드프레스 구축 까지 이어지는 연재글의 중간글 입니다


하단의 링크를 통해 다음 단계의 포스팅을 보실 수 있습니다.



이전글


오라클 클라우드 프리티어 1 [Link]
오라클 클라우드 프리티어 2 [Link]
오라클 클라우드 프리티어 3 [Link]
오라클 클라우드 프리티어 4 [Link]




APM은 Apache + PHP + MySQL 의 약자



APM 은 웹 서버를 구축하고 PHP 로 작성된 웹 어플리케이션을 구동하기 위해 이전부터 많이 사용해온 스택 입니다.


PHP 를 구동 하기 위한 서버 스택의 구성은 여러가지 방식으로 할 수 있습니다.

Apache + PHP(mod_php) + Mysql 나 MariaDB
Apache + PHP-FPM + Mysql 나 MariaDB
Nginx + PHP-FPM + Mysql 나 MariaDB


이번 글에서는 yum(rpm)으로 Apache + PHP + Mysql 와 PHP-FPM 방식 2가지를 기술 하도록 하겠습니다.


*  APM/LEMP ,도메인 설정 등을 완료 후 워드프레스 이외 제로보드XE 나 라이믹스(Rhymix),그누보드 등 사용하여도 됩니다




설치 환경

OS: CentOS 7.8 
APACHE2.4.46 (codeit) + PHP 7.4 + Mysql5.7

설치순서는 apache mysql php 순으로 설치 하겠습니다 작업은 root 로 진행하겠습니다


* 업데이트 : 초기 포스팅 내역에서 업데이트 된 내역이 있습니다.
– CentOS7.8 에서 기본 repository 에서 받을 수 있는 Apache의 최신버전은 2.4.6 버전 입니다.
뒤에 HTTP/2 적용을 위해 mod_httpd2 모듈을 사용 하기 위해서는 apache 2.4.17이상 버전 부터 지원됨으로 Repository 를 추가하여 최신버전으로 변경 하였습니다.
– PHP도 7.2 에서 7.4 로 내용을 변경 하였습니다



[참고1] 오라클 클라우드 프리티어 구성 후 Ubuntu 환경에 Nginx PHP MariaDB 환경 구성을 원하시면 아래 포스팅을 참조하세요



[참고2] CentOS 8 버전에서 APM(Apache PHP MariaDB) 설치는 아래 포스팅을 참조하세요





 

Apache 설치



먼저 Repository 등록를 진행합니다.



EPEL 활성화

[root]# yum -y install epel-release yum-utils
   * Oracle Linux7 에서 EPEL설치는 아래 참조



CodeIT 저장소를 추가

[root]$ cd /etc/yum.repos.d
[root]$ wget https://repo.codeit.guru/codeit.el`rpm -q –qf "%{VERSION}" $(rpm -q –whatprovides redhat-release)`.repo

[root]# yum clean all




가능 버전 확인

[root]# yum info httpd

Available Packages

Name : httpd
Arch : x86_64
Version : 2.4.46




설치 진행

[root]# yum -y install httpd httpd-devel apr apr-util apr-devel \
apr-util-devel gcc gcc-c++ pcre-devel apr-util-openssl mod_http2 \
apr-util libnghttp2 libnghttp2-devel expat-devel libxml2-devel \
mod_proxy_html



[참고] Source Compile 설치는 아래 글을 참조하시면 됩니다.



[참고] RHEL/CentOS7 이 아닌 Oracle Linux7에서 EPEL Repository 설치는 아래의 방법을 이용합니다
(RHEL7/CentOS7 환경은 바로 MySQL 설치 내용을 보시면 됩니다)


[root]# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root]# rpm -ivh epel-release-latest-7.noarch.rpm
[root]# yum clean all



추가적으로 repository를 활성화 할 내역이 있습니다.


/etc/yum.repos.d 디렉토리 내에 oracle linux7 파일에서 ol7_optional_latest를 활성화 합니다
일은 public-yum-ol7.repo 나 oracle-linux-ol7.repo 입니다.

[ol7_optional_latest]
name=Oracle Linux $releasever Optional Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/optional/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

# enabled=0 ==> 1 로 변경





MySQL 설치



* 설치후 mysql 계정과 mysql 그룹은 자동 추가가 됩니다


MySQL Repository 설치


[root]# rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

[root]# yum clean all



필요 패키지 설치

[root]# yum -y install libaio libaio-devel \
numactl-devel numactl \
ncurses ncurses-devel ncurses-libs ncurses-static \
openssl openssl-devel bison readline \
gcc gcc-c++ cmake glibc



MySQL community 버전 설치

[root]# yum -y install mysql-community-server mysql-community-devel



root 패스워드 변경

[root]# systemctl start mysqld



* mysql 를 처음 시작 하고 로그에서 임시 비밀번호를 확인 할 수 있습니다.

[root]# cat /var/log/mysqld.log | grep "temporary password"
[Note] A temporary password is generated for root@localhost: RTZwovJ#r8*:


[root]# mysql -uroot -p

Enter password: <==위에서의 비밀번호 입력, RTZwovJ#r8*:



mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '변경할 패스워드';

                        <– 패스워드는 복잡도를 고려 해야 합니다.
mysql> commit;
mysql> flush privileges;
mysql> exit;




기본적인 mysql 파라미터 추가


[root]# vi /etc/my.cnf
[mysqld] 항목 아래에 내용을 추가 하면 되며 [mysqld_safe] 내용도 같이 추가 합니다.

user=mysql
innodb_buffer_pool_size = 384M
innodb_file_per_table=ON
bind-address=0.0.0.0
character-set-client-handshake=OFF
skip-character-set-client-handshake
init-connect=SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
secure-file-priv=""
show_compatibility_56 = On
log_timestamps=SYSTEM
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_dump_at_shutdown = ON
max_connections = 1000


[mysqld_safe]
open-files-limit = 16384





ulimit 설정 추가

[root]# vi /etc/security/limits.conf
apache 와 mysql 유저에 대한 ulimit 값을 추가로 설정을 합니다.

apache hard nofile 65536
apache soft nofile 65536
apache soft nproc 16384
apache hard nproc 16384

mysql hard nofile 65536
mysql soft nofile 65536
mysql soft nproc 16384
mysql hard nproc 16384





MySQL 를 재시작 합니다.

[root]# systemctl restart mysqld


MySQL 파라미터 관련해서는 아래글에서 더 참조하시면 됩니다.








Remi PHP 7.4 설치




PHP 설치를 위한 Repository 설치

CentOS 7.8 기준으로 yum repository에 등록된 php 최신 버전은 5.4.16 입니다
그 이상 버전을 사용하려면 먼저 REMI repository 설치를 해야 합니다.

[root]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm




repository 설치 후 repo 파일을 수정


[root]# vi /etc/yum.repos.d/remi.repo

[remi]
name=Remi's RPM repository for Enterprise Linux 7 – $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


enable=0 -> enable=1 로 수정






PHP 7.4 설치

[root]# yum -y install php74 php74-php-common \
php74-php-fpm php74-php-gd \
php74-build php74-php php74-php-devel \
php74-php-mysqlnd php74-php-opcache \
php74-php-mbstring php74-php-pdo \
php74-php-pecl-crypto php74-php-pecl-imagick \
php74-php-pecl-imagick-devel php74-php-pecl-mcrypt \
php74-php-pecl-zip php74-php-bcmath \
php74-php-pecl-mysql curl curl-devel \
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



* 터미널에 붙여 넣었을때 문제가 발생시 노트패드(메모장) 에 먼저 붙여넣은 뒤 다시 복사하여 터미널에 붙여 넣기를 해보시기 바랍니다.

* 버전은 8.0까지 설치 할 수 있으며 작성된 어플리케이션에 따라서 호환되는 버전을 사용하시면 됩니다.




설치 완료 후 확인

[root]# php74 -v
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies




[root]# ls -al /etc/httpd/conf.modules.d/ | grep php74-php

-rw-r–r–. 1 root root 300 Sep 30 14:55 15-php74-php.conf



[root]# ls -al /etc/httpd/modules/ | grep php74

lrwxrwxrwx. 1 root root 55 Oct 5 12:09 libphp74.so -> /opt/remi/php74/root/usr/lib64/httpd/modules/libphp7.s



php 설정 변경 ( mod_php 와 php-fpm 공통)

[root]# vi /etc/opt/remi/php74/php.ini

아래 5개는 주석 제거 및 내용 수정


date.timezone = Asia/Seoul
expose_php = Off

post_max_size = 500M
upload_max_filesize = 200M
memory_limit = 512M





mod_php 로 연동



먼저 apache와 연동을 mod_php 로 하는 방법에 대해서 기술 하겠습니다.

PHP-FPM은 아래에 내용이 있습니다.



Apache 설정 변경

/etc/httpd/conf/httpd.conf  파일을 수정 

[root]# vi /etc/httpd/conf/httpd.conf


ServerName www.example.com:80

-> 주석 해제



아래 Directory 사이의 내용을 변경 합니다.
<Directory "/var/www/html">
        …. 사이의 내용…
</Directory>



#Options Indexes FollowSymLinks
-> 주석 처리 후 아래 내용으로 입력

Options MultiViews FollowSymLinks
-> 내용 추가 


#AllowOverride None
-> 주석 처리 후 아래 내용으로 입력

AllowOverride All
-> 내용 추가

=> 저장 후 편집 완료 합니다  :wq


[참고] yum으로 PHP가 설치하면 /etc/httpd/conf.d/php74-php.conf 파일이 생성 되게 됩니다.

파일내 주요 설정 내용들이 추가되어 있는 상태 입니다.



PHP 확인을 위한 phpinfo.php 생성

/var/www/html 에 아래 내용으로 아래의 phpinfo.php 파일을 만듭니다.

[root]# vi /var/www/html/phpinfo.php

<?php

phpinfo();
?>




OS 방화벽 오픈 합니다.


# 80 포트 추가

firewall-cmd –permanent –add-port=80/tcp

# 80 포트 삭제(참고)
firewall-cmd –permanent –remove-port=80/tcp


# 정책 재반영 및 방화벽 정책 확인

firewall-cmd –reload;firewall-cmd –list-all




Apache 재시작 및 PHP 로드 확인

[root]# systemctl restart httpd




apache를 재시작 후 웹브라우저에서 phpinfo.php 파일이 정상적으로 로드 되는지 확인 합니다.
http://ip주소/phpinfo.php




위에서 "Server API" 를 보게 되면 지금은 Apache 2.0 Handler 로 표기되는 것을 확인 할 수 있습니다.




PHP-FPM 으로 Apache 연동



Apache 와 PHP 연동을 PHP-FPM 으로 하도록 하겠습니다.

향후 Nginx 로의 변경시 변경이 자유롭고 Apache MPM방식을 event(thread) 방식을 사용할 수 있는 장점이 있습니다.

성능 또한 Apache + mod_php 방식에 비해 PHP-FPM을 사용하여 별도로 php 로직을 처리해주는것이 성능적으로도 더좋다고 확인 되고 있습니다.

그래서 이미 이전 부터 php-fpm 을 많이 사용하는 추세 입니다.




먼저 Apache 설정을 변경

/etc/httpd/conf/httpd.conf  파일 수정

[root]# vi /etc/httpd/conf/httpd.conf


ServerName www.example.com:80
-> 주석 해제


-> 아래 쪽에 2개 내용추가
ServerTokens Prod
ServerSignature Off



아래 Directory 사이의 내용을 변경 합니다.
<Directory "/var/www/html">
        …. 사이의 내용…
</Directory>


#Options Indexes FollowSymLinks
-> 주석 처리 후 아래 내용으로 입력

Options MultiViews FollowSymLinks
-> 내용 추가 


#AllowOverride None
-> 주석 처리 후 아래 내용으로 입력

AllowOverride All
-> 내용 추가 




15-php74-php.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/15-php74-php.conf

<IfModule !mod_php5.c>
    <IfModule prefork.c>
           # LoadModule php7_module modules/libphp74.so
   </IfModule>
</IfModule>

=> PHP-FPM 을 사용하기 위해서는 mod_php 모듈을 unload 해야 함으로
LoadModule php7_module 주석 처리 합니다



00-mpm.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

=> 주석 처리

LoadModule mpm_event_module modules/mod_mpm_event.so
=> 주석 해제
   * php-fpm 사용시 event-mpm방식을 사용할 수 있습니다.



00-proxy.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-proxy.conf
아래 4개 내용 추가 

ProxyRequests Off
ProxyErrorOverride on
ProxyTimeout 600
ProxyPreserveHost On




php-fpm.conf 파일 수정

[root]# cd /etc/opt/remi/php74
[root]# vi php-fpm.conf

daemonize = yes
-> 주석으로 되어 있다면 주석을 해제 합니다.


; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice
-> PHP-FPM 데몬의 Log level Default 는 notice 입니다.
-> 문제에 대한 분석이나 초기 설정 후 확인 등이 필요하다면 debug 레벨로 변경하여 사용해도 됩니다.


include=/etc/opt/remi/php74/php-fpm.d/*.conf
-> include 로 하여 php74/php-fpm.d/ 아래 *.conf  절이 주석처리 되어 있는지 확인 합니다.
-> 버전 등에 따라 맨위나 맨아래, 혹은 맨 위나 맨 아래 둘 다 있을 수 있습니다.
-> 주석처리가 해제 되어 있는지만 체크 하면 됩니다.





Socket Directory 생성 및 tmpdir 관련 설정

[root]# mkdir -p /run/php/
 ==> socket 이 생성될 위치를 먼저 생성 해줍니다.




재부팅 후에 디렉토리가 생성될 수 있도록 설정

[root]# cd /usr/lib/tmpfiles.d
[root]# vi php.conf

d /run/php 0755 root root –
==> php.conf 파일에 내용 입력




php-fpm www.conf 파일 수정


# www.conf 수정
[root]# cd /etc/opt/remi/php74/php-fpm.d
[root]# vi www.conf


; pool name ('www' here)
[www]
-> PHP Pool 이름을 지정하는 항목 입니다.
-> 프로그램명이나 사이트 명이나, 업무가 있다면 업무명 등을 입력 하여도 됩니다.
-> Pool 혹은 Container 의 식별, 이름 입니다 기본으로 www 지정되어 있습니디.
-> Pool은 conf 파일 별로 여러개의 Pool을 만들 수 있습니다. 이때는 Pool 별로 이름을 지정하여 겹치지 않게 해야 합니다.




= 주석 해제 및 apache 로 내용을 변경 합니다 mode 는 0660 으로 합니다.
user = apache

group = apache
listen.owner = apache
listen.group = apache
listen.mode = 0660




listen = /run/php/php-fpm.sock
=> 이부분은 접속을 받는 방식을 설정하는 부분으로 Socket(UDS) 방식으로 사용 하거나 IP 방식으로 사용하거나 둘 중 하나를 선택하여 설정해야 합니다.


=> IP 방식으로는 아래와 같이 지정 할 수 있습니다.
listen = 123.123.123.123.123:9000

listen = 127.0.0.1:9000
listen = 9000 <== 이와 같이 IP 없이 포트만 기재하면 모든 주소에서 접속이 가능한 상태 입니다
(listen on a TCP socket to all addresses)


소켓 방식은 아래와 같이 파일명을 지정해주면 됩니다.

listen = /run/php/php-fpm.sock

같은 서버에서 apache 와 php-fpm 사용 하는 설정으로 할 것임으로 socket 을 지정하여 설정하도록 하겠습니다

같은 서버내 라도 IP를 사용 할 수 있고 사용하여도 됩니다.





FPM 프로세스

# 프로세스 수와 관련된 pm 으로 시작하는 파라미터 가 있습니다
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 40
pm.max_requests = 500

* 위의 설정값은 예시입니다.


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 있습니다.




[참고] PHP-FPM 메모리 사용현황 및 세션 계산

아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인 할 수 있습니다.
[root]# ps –no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'


시스템에 가용한 메모리나 사용 할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정 해도 되겠습니다


ex) PHP에 6GB 를 사용 하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임

6000MB / 60MB = 자식 프로세스 개수 100개 로 설정

이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정하면 되겠습니다.




로그 관련 파라미터 수정

로그 관련된 파라미터의 주석 해제와 변경을 합니다.

access.log = /var/opt/remi/php74/log/php-fpm/$pool.access.log
   -> 주석 해제 및 경로 지정



access.format = "%R – %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
–> 주석제거


slowlog = /var/opt/remi/php74/log/php-fpm/$pool.
slow.log

–> 주석제거, 파일명 변경


request_slowlog_timeout = 5
–> 주석제거, 내용변경

–> 단위는 초로 5는 예시 입니다. 해당 시간은 선택해서 변경 하시면 됩니다.


catch_workers_output = yes
-> 주석 제거 
-> main error log 파일에 worker 의 에러 로그가 같이 기록 되게 됩니다.


php_admin_value[error_log] = /var/opt/remi/php74/log/php-fpm/www-error.log
-> 주석 제거



php_admin_flag[log_errors] = on
-> 주석제거 




php74-php.conf 파일 수정

[root] vi /etc/httpd/conf.d/php74-php.conf


아래의 내용을 추가, <IfModule mod_php7.c> 아닌 곳에 설정을 하면 됩니다.

<IfModule mod_php7.c> 위쪽에 적절한 곳에 설정 하면 됩니다.

이부분은 2가지 방식으로 설정 할 수 있으며 위에서 PHP-FPM의 Listen 방식에 따라 Apache에서도 설정이 달라 집니다.


#### Unix Socket 방식으로 사용시 아래와 같이 사용 합니다.
# php-fpm options
  <FilesMatch \.(php|phar)$>   
     SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
 </FilesMatch>

-> SetHandler 절에 파일명은 위에서 설정한 PHP-FPM의 Socket의 경로와 파일명이 같아야 합니다
-> PHP-FPM : listen=/run/php/php-fpm.sock   사용시 



#### IP 방식으로 사용시 아래와 같이 아이피나 호스트명을 사용 합니다.
# php-fpm options
  <FilesMatch \.(php|phar)$>
    #  SetHandler "proxy:fcgi://127.0.0.1:9000"
    #  SetHandler "proxy:fcgi://localhost:9000"
    SetHandler "proxy:fcgi://node3:9000"

  </FilesMatch>

-> PHP-FPM :   listen = 127.0.0.1:9000 이나  listen = 9000 사용시





PHP Opcache 파라미터

[참고]PHP 5.5 버전 부터 기본에 포함되었으며 이전에는 zend optimizer 를 별도로 설치 및 plugin 하여 사용 하였습니다.

사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache(예전의 Zend Optimizer)를
이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능 입니다


php7.x 버전부터 Opcache 의 기본 메모리가 128M  입니다.

메모리를 변경하거나 다른 파라미터를 조정 하고자 한다면 10-opcache.ini 에서 설정할 수 있습니다.


[root]# cd /etc/opt/remi/php74/php.d
[root]# vi 10-opcache.ini


10-opcache.ini 파일에는 opcache 의 활성화 내용부터 해서 기본적으로 사용 될수 있는 파라미터는
주석이 해제되어 활성화가 되어 있는 상태 입니다.





opcache의 파라미터의 간략한 설명은 아래와 같습니다.


opcache.enable=1 – Zend Opacache 활성화 여부 결정 , 1일때 활성화 됨


opcache.enable_cli=1 – PHP CLI 버전에서(명령행 버전에서도) Zend Opcache 활성화 여부 결정


opcache.memory_consumption – 캐쉬에 사용할 메모리 크기. 7.0부터 기본 크기는 128M


opcache.interned_strings_buffer=8 – 메모리에서 interned 문자열을 위해 사용할 메모리량


opcache.fast_shutdown=1 – 활성화 시 accelerated code 에 대해서 사용되어짐


opcache.interned_strings_buffer – Opcache 가 사용하는 내부 스트링( class name 이나 file등)을 저장하기 위한 메모리의 크기.


opcache.max_accelerated_files – Opcache 가 캐쉬할 최대 파일 갯수.

opcache.validate_timestamps – Default 1 / 0(off)이 아닐 경우 opcache.revalidate_freq 에 설정된
시간마다 코드와 캐쉬의 변경 여부를 체크한다.



validate_timestamps 가 꺼져 있을 경우 코드의 변경 여부를 체크하지 않으므로 PHP 소스가 수정되어도 반영되지 않는다.

그러므로 변경 사항을 반영하려면 httpd 를 재기동하거나 httpd 에 SIGUSR2 시그널을 전송해야 한다.



opcache.file_cache_only=1 – makes sure that the in-memory opcache is disabled and only files are used, which is what you want for CLI.

1 로 설정할 경우 in-memory opcache 사용이 안됨 = php-fpm 에서 사용할수 없음



그래서 메모리 관련하여 수정이 필요 할 경우 아래와 같이 용량을 늘려서 사용 할 수 있습니다.

opcache.memory_consumption=256
    -> 입력의 예시 이며 단위는 MB 입니다
    -> 이부분(메모리 변경) 은 필수는 아닙니다.




php-fpm 서비스 활성화 및 시작

[root]]# systemctl enable php74-php-fpm

[root]]# systemctl start php74-php-fpm




프로세스 및 포트 오픈 확인

[root]]# ps -ef| grep php

root 6389 1 0 17:18 ? 00:00:00 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
apache 6390 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6391 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6392 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6393 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6394 6389 0 17:18 ? 00:00:00 php-fpm: pool www



listen을 IP 으로 사용 할 경우

[root]]# netstat -antp | grep 9000

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 6389/php-fpm: maste



listen을 Unix Socket 으로 사용 할 경우

[root]]# ls -al /run/php
srw-rw—-. 1 apache apache 0 Oct 24 16:25 php-fpm.sock



OS 방화벽 오픈 합니다.

# 80 포트 추가
firewall-cmd –permanent –add-port=80/tcp

# 80 포트 삭제(참고)
firewall-cmd –permanent –remove-port=80/tcp


# 정책 재반영 및 방화벽 정책 확인

firewall-cmd –reload;firewall-cmd –list-all



phpinfo.php 생성

/var/www/html 에 아래 내용으로 phpinfo.php 파일을 생성 합니다.

[root]]# cd /var/www/html
[root]]# vi phpinfo.php

<?php
phpinfo();
?>



Apache 재시작


[root]# systemctl restart httpd



브라우저에서 접속하여 PHP 정보 정상적으로 로드 되는지 확인 합니다.
http://ip주소/phpinfo.php




* mod_php 와 다르게 "Server API" 가 FPM/FastCGI 로 바뀐걸 확인 할 수 있습니다.



이제 phpmyadmin 을 이용하거나 DB 접속을 하는 PHP 를 통해 DB접속을 확인 하시면 됩니다.




이어지는 다음글 :  웹 기반 mysql 관리툴 – phpmyadmin

 

연관된 글
Apache 웹 방화벽 – Mod_Security

무료 도메인 발급 받기 – freenom.com

무료 SSL 인증서 발급 및 HTTP/2 적용

PHP8.0 발표 소식 및 Compile 설치

CentOS 8 지원 종료 및 정책 변경 안내 – 새로운 Rocky Linux 소개

“리눅스에 APM(Apache + PHP + MySQL) 설치 및 연동” 에 대한 8 댓글

  1. 핑백: Apache 2.4 설치 | | 작은 공간,하지만 꿈이있는

  2. 핑백: Apache 가상호스트 (VirtualHost)를 통한 여러개 사이트 운영 | | 작은 공간,하지만 꿈이있는

  3. 핑백: 워드프레스 - 설치형 블로그 및 개인 사이트 구축 | | 작은 공간,하지만 꿈이있는

  4. 핑백: PHP OpCacheGUI 설치 - OpCache 관리 및 모니터링 | | 작은 공간,하지만 꿈이있는

  5. 핑백: certbot을 통한 SSL 적용(apache) 및 HTTP/2 적용 | | Hoing

  6. Avatar

    mod_proxy_uwsgi가 설치가 안됩니다
    [root@webserver yum.repos.d]# yum -y install mod_proxy_uwsgi
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    * base: http://ftp.kaist.ac.kr
    * epel: d2lzkl7pfhq30w.cloudfront.net
    * extras: http://ftp.kaist.ac.kr
    * updates: http://ftp.kaist.ac.kr
    Resolving Dependencies
    –> Running transaction check
    —> Package mod_proxy_uwsgi.x86_64 0:2.0.18-8.el7 will be installed
    –> Processing Dependency: uwsgi = 2.0.18-8.el7 for package: mod_proxy_uwsgi-2.0.18-8.el7.x86_64
    –> Running transaction check
    —> Package uwsgi.x86_64 0:2.0.18-8.el7 will be installed
    –> Finished Dependency Resolution

    Dependencies Resolved

    =================================
    Package Arch Version Repository Size
    =================================
    Installing:
    mod_proxy_uwsgi x86_64 2.0.18-8.el7 epel 30 k
    Installing for dependencies:
    uwsgi x86_64 2.0.18-8.el7 epel 372 k

    Transaction Summary
    =================================
    Install 1 Package (+1 Dependent package)

    Total size: 401 k
    Installed size: 875 k
    Downloading packages:
    Running transaction check
    Running transaction test

    Transaction check error:
    file /usr/lib64/httpd/modules/
    mod_proxy_uwsgi.so
    from install of mod_proxy_uwsgi-2.0.18-8.el7.x86_64 conflicts with file from package httpd-2.4.46-1.codeit.el7.x86_64

    Error Summary
    ————-

    이럴땐 어떻게 해야 되나요?

    1. 태랑(정현호)

      안녕하세요

      먼저 코멘트 감사합니다

      블로그 내용이 몇번 갱신 과 수정과정에서 codeit 패키지로 apache 설치로 내용이 변경되었고
      그에 따라 mod_proxy_uwsgi 는 제외하시고 설치하시면 될것 같습니다.
      포스팅은 업데이트 하였습니다

      감사합니다 좋은 하루 되세요

답글 남기기