PHP OpCacheGUI 설치 - OpCache 관리 및 모니터링

Last Updated on 10월 26, 2020 by 태랑(정현호)


OpCache는 PHP 5.5 버전 부터 기본에 포함 된 PHP accelerators  입니다.

PHP 가속기는 PHP 성능에 관련되어 캐싱등의 방법을 통해 속도를 증가시켜주는 추가 모듈(혹은 플러그인) 입니다

그 중 OpCache 는 PHP 5.5부터 기본 포함 되어 있고 패키지로 설치시 활성화도 되어있습니다.
사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache를 이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능 입니다


PHP Accelerators 대해서는 Wiki에 종류 와 설명이 되어 있습니다.


저도 예전에는 eAccelerator 와 Zend Optimizer 를 기본처럼 사용 했었던 버전도 있었습니다
그 만큼 PHP 가속기 모듈(혹은 플러그인)의 여부가 차이가 있었습니다.



<2009년도에 5.2.12 버전 구성시>


이전에는 Zend Optimizer 를 주로 사용 하였고 PHP 5.5 버전 부터 자체에 통합되어 OpCache 이름으로 기능이 제공되고 있습니다.
(Starting with PHP 5.5 the Zend Opcache is integrated and shipped with PHP)


별도의 메모리 공간은 Cache 로 사용 하는 기능으로 php.ini 에 메모리 용량이나 추가적인 설정을 할 수 있습니다.
그리고 캐쉬이기 때문에 Cache 사용량이나 hit ratio 등의 정보도 있습니다

이런 설정 정보나 운영 상황을 그래픽(GUI) 으로 모니터링 할 수 있는 Web Tool 이 몇가지 있으며 그 중 이번 포스팅에서는 OpCacheGUI 를 설치 하려고 합니다.


# 사이트
https://github.com/PeeHaa/OpCacheGUI



참고) 해당 글은 AWS/EC2 + Ubuntu + Nginx + PHP +MariaDB 스택 - 웹 서비스 구성 연재글 과 Centos 에서 APM 구성 과 연관된 글입니다.

아마존 AWS 클라우드 프리티어 - 1 계정 생성 - MFA OTP 설정
아마존 AWS 클라우드 프리티어 - 2 EC2(VM/VPS) 생성
아마존 AWS 클라우드 프리티어 - 3 탄력적 IP(고정IP) 인 Elastic IP 생성 및 할당
우분투(Ubuntu) 18.04 서버 초기 설정
우분투(Ubuntu) 시간 동기화 설정- Chrony
우분투(Ubuntu) 18.04 - LEMP(Nginx+PHP+MariaDB) 1 - 설치 및 초기 설정
웹 기반 mysql 관리툴 - phpmyadmin 설치 및 설정
freenom 에서 최상위 국가 무료 도메인 발급 받기

  오라클 클라우드 프리티어 - 무료 VPS 사용(1)
  오라클 클라우드 프리티어 - 무료 VPS 사용(2)
  오라클 클라우드 프리티어 - 무료 VPS 사용(3)
  오라클 클라우드 프리티어 - 무료 VPS 사용(4)
  리눅스에 APM(Apache+PHP+Mysql) 통한 웹 서비스 시작
  웹 기반 mysql 관리 툴 - phpmyadmin 설치
  무료 SSL 인증서 발급 및 HTTP/2 적용
  최상위 국가 무료 도메인 발급 받기 및 서브 도메인 설정
  여러 도메인을 활용한 가상호스트 설정




OpCacheGUI 설치


OpCacheGUI 를 사용하기 위해서는 PHP 5.5 이상이 필요 합니다.
(OpCache가 PHP 5.5 부터 integrated and shipped 되었기 때문입니다)

웹 구성에 따라서 웹 페이지 root 로 사용할 디렉토리로 이동 합니다.

* root 로 작업 하는 경우 입니다.


YUM으로 APM(Apache+PHP+Mysql) 환경일 경우
[root]# cd /var/www/html

Ubuntu 에서 apt 로 Nginx + PHP-FPM + MariaDB 설치 환경일 경우
[root]# cd /usr/share/nginx/html


Nginx나 Apache 등을 소스컴파일 했을 경우는 사용하시는 위치에 파일을 다운 받으시면 됩니다.

[root]# cd 디렉토리이동
[root]# git clone https://github.com/PeeHaa/OpCacheGUI

# Ownership 변경, 사용하는 웹서버에 맞게 사용하면 됩니다.
[root]# chown -R nginx:nginx OpCacheGUI
or
[root]# chown -R apache:apache OpCacheGUI


# 설정 파일 생성 및 설정
[root]# cd OpCacheGUI
[root]# cp -rp config.sample.php config.php

[root]# vi config.php


# 초기 id 는 peehaa 이며 암호는 password 입니다.
## whitelist 에는 로그인을 허용할 ip 나 대역을 입력 하면 됩니다. 
## 아래의 설정은 localhost 와 192.168.0. 대역에서만 연결이 가능합니다.

return [
'username' => 'peehaa',
'password' =>
'$2y$14$kHoRlbxPF7Bf1903cDMT
geYBsFgF8aJA46LIH9Nsg4/ocDa9HTTbe',
'whitelist' => [
'localhost',
],
'language' => 'en',
'timezone' => 'Europe/Amsterdam',
'error_reporting' => E_ALL,
'display_errors' => 'Off',
'log_errors' => 'On',
'uri_scheme' => Router::URL_REWRITE
];

수정1) whitelist 에서 특정 아이피 대역이나 아이피를 지정 할 수 있거나 내부 아이피로만 접속 하게 
하려면 'localhost','192.168.0.*',  이와 같이 지정 하면 됩니다.
대역대나 아이피가 특정지어 지지 않는다면 '*' 를 설정하면 됩니다.
저는 여기서 '*' 로 설정 하였습니다.


수정2) timezone , 아래와 같이 Aisa/Seoul 로 변경 합니다.
// 'timezone' => 'Europe/Amsterdam',
'timezone' => 'Asia/Seoul',


수정3) 패스워드 
패스워드는 기본 password 입니다.
변경하기 위해서는 php 의 hash 함수를 통한 hash값을 생성해야 합니다.

아래의 코드로 패스워드 해시키를 생성 할 수 있습니다
아래 코드를 genkey.php (파일명은 예시) 에 넣고 브라우저에서 호출하게 되면 패스워드가 생성 됩니다.

<?php
echo password_hash ('패스워드입력', PASSWORD_DEFAULT)."\n";
?>


ubuntu$ cd /usr/share/nginx/html
ubuntu$ sudo vi genkey.php
ubuntu$ sudo cat genkey.php
<?php
echo password_hash ('AAAAA123', PASSWORD_DEFAULT)."\n";
?>


= 브라우저에서 접속시 결과


패스워드 생성 후 생성한 genkey.php 는 삭제를 합니다.

uriScheme 는 아래서 다시 설명 하겠습니다.



웹 서버에서 설정


웹 서버에서는 Apache 2.2 / 2.4 , Nginx 로 구분이 되고
접속 하는 방식에 따라  설정 방법이 나뉘게 됩니다
  -  도메인 혹은 서브 도메인으로 접속 하여 사용
  - 서브 디렉토리 형태로 사용 할 경우

= 웹 서버별 virtualhost 사용시(서브 도메인 등으로 사용시)


Example configuration for Apache 2.2 버전

<VirtualHost *:80>
ServerName opcache.yourdomain.com
DocumentRoot "/path/to/OpcacheGUI/public"

<Directory "/path/to/OpcacheGUI/public">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>

# This is only needed when using URL paths
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L,QSA]

</VirtualHost>




Example configuration for Apache 2.4+ 버전 사용시

<VirtualHost *:80>
ServerName opcache.yourdomain.com
DocumentRoot "/path/to/OpcacheGUI/public"

<Directory "/path/to/OpcacheGUI/public">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>

# This is only needed when using URL paths
FallbackResource /index.php

</VirtualHost>




Example configuration for Nginx:

server {
listen 80;
server_name opcache.yourdomain.com;
root /path/to/OpcacheGUI/public;

# This is only needed when using URL paths
location / {
root /usr/share/nginx/html/OpCacheGUI;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$request_uri;
}

location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass /var/run/php-fpm.sock;

}
}


위에 기술된 3개의 설정 내역 중에 볼드(두껍게) 처리된 부분이 rewrite rule에 대한 내용으로 주요 내용 입니다.
이렇게 서브도메인 형식(opcache.domain.com) 으로 사용 할 경우
config.php 의 $uriScheme 는 아래 처럼 URL_REWRITE 를 사용 해야 합니다.
$uriScheme = Router::URL_REWRITE;



#하위 디렉토리로 사용 하려고 할 경우
/usr/share/nginx/html/OpCacheGUI
=>접속시  http:// mydomain.com/OpCacheGUI

이와 같이 디렉토리 형태로 사용 하려고 할 때는 QUERY_STRING 를 사용합니다.
'uri_scheme' => Router::QUERY_STRING;




[참고] AWS EC2에 LEMP 구성 연재 포스팅에서 설정한 Nginx의 설정을 바탕으로 실제 사용 가능한 설정은 아래와 같습니다 경로 : /usr/share/nginx/html/OpCacheGUI


server {
listen 80;
server_name opcache.h2code.cf;
root /usr/share/nginx/html/OpCacheGUI;
index index.php index.html index.htm;
access_log /var/log/nginx/opcache.h2code.cf.access.log main;
error_log /var/log/nginx/opcache.h2code.cf.error.log debug;
try_files $uri $uri/ /index.php;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}

location ~ /\.ht {
deny all;
}
}




[참고] Centos 에 YUM으로 APM 설정 연재 포스팅과 virtualhost 글을 참조 하신 환경인 경우 아래처럼 사용 하시면 됩니다. 경로 : /var/www/html/opcache

<VirtualHost *:80>
ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/opcache"
ServerName test.h2code.cf
ServerAlias test.h2code.cf
ErrorLog "logs/h2code.cf-error_log"
CustomLog "logs/h2code.cf-access_log" combined

RewriteEngine on
FallbackResource /index.php

<Directory "/var/www/html/opcache">
AllowOverride ALL
Options MultiViews FollowSymLinks
DirectoryIndex index.php index.html index.htm
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>


80 번 포트에 대해 클라우드 와 OS 방화벽을 Open 한 뒤 브라우저에서 접속을 하시면 됩니다.




Web Interface


Status 페이지에서 현황 및 Cache Reset 를 할 수 있는 기능을 제공 합니다.
Cache Reset 기능 때문에 패스워드 의 인증이 있는 것으로 예상됩니다.



CONFIGURATION 페이지에서는 php.ini 에서 설정한 내역을 확인 할 수 있습니다
예를 들어 opcache 메모리를 변경하고 반영이 잘되었는지 등을 확인 해볼수 있습니다.



Memory, Key, Hit 관련하여 그래픽 도표로 확인 할 수 있습니다.



opcache 메모리 default는 128MB 입니다
이런 GUI 툴을 통해 사용량과 Hit Ratio 등을 확인 하여 메모리의 조정하는데 자료로 활용 하시면 됩니다


다음에는 발급 받은 도메인을 통해 SSL 과 HTTP/2 적용을 확인해보겠습니다.


이어지는 글
- Ubuntu 에서 Nginx+PHP-FPM+MariaDB 연동 환경인 경우 아래 글을 참조하시면 됩니다.

- Centos 에서 YUM으로 APM 구성 환경은 아래 글을 참조하시면 됩니다

답글 남기기