Last Updated on 9월 16, 2021 by Jade(정현호)
안녕하세요
이번 포스팅에서는 PHP Opcache 의 GUI 모니터링 관리 툴에 대해서 확인 해보도록 하겠습니다.
OpCache
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 에서 최상위 국가 무료 도메인 발급 받기
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
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 구성 환경은 아래 글을 참조하시면 됩니다
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io