Oracle Linux 8 (arm64) 서버에 httpd, php 설치

오라클 클라우드의 무료 서버중 x86 서버인 VM.Standard.E2.1.Micro 의 경우 1/8 OCPU 및 1GB 메모리를 제공 한다.

2022-05-04_150958

1/8 OCPU 이는 cpu중 12% 점유율 사용량을 허용 한다는 말이다.

서버 내부에서는 2 논리 core 으로 확인 되기 때문에 각각의 cpu당 25% 의 점유율을 사용할 수 있다고 본다.

초과해서 사용할경우 과금 이 되거나 사용이 제한될 수 있는 요소이다.

 

메모리의 경우에는 dmesg 명령어로 아래와 같이 확인이 되었다.

즉 전체 용량 1018MB 에서 커널 보호를 위해 280MB 를 제외한 678MB를 쓸수 있다.

linux 커널에서 일반적으로 약 500MB정도를 사용한다고 보면 가용 메모리가 278MB 정도 밖에 되지 않는다.

쓰다보면 메모리가 swap 처리 되어서 WEB/WAS 사용가능한 메모리는 약 270~500MB 사이 정도가 될 것이다.

현재 블로그와 같이 구글 애드센스가 도입된 wordpress 사이트는 약 1.2초 대의 로딩 속도가 나오는 정도의 성능으로 확인되었다.

 

다만 방문객이 일정량 이상 늘어날 경우 급격히 느려지고, php-fpm이 메모리 과점으로 php-fpm 장애가 발생하는등의 문제가 발생 하였다.

그래서 ARM cpu 를 사용하는 VM.Standard.A1.Flex 를 이용해 was 서버를 운영하는 방법으로 구성을 해보았다.

아래는 OCI의 oracle linux 를 설치 했을때 기본적으로 진행해야 하는 명령어 모음 이다.

 

aarch64(ARM64) CPU를 사용 하는 경우 다음과 같은 문제가 있다.

  1. ARM64용 서드 파티 레포지토리는 거의 없는 편이다. (최신 php 버전을 제공 하는 remi 레포 또는 webtatic 등등)
  2. OS공식 레포지토리에서 제공 되는 httpd 버전은 2.4.37 버전 php 버전은 7.4.19 버전 이다.
  3. Let’s encrypt 에서 제공 되는 snapd(certbot) 이 동작을 하지 않는다. (x86_64 에서는 동작한다.)

 

위와 같은 사유로 3 티어 방식으로 운영이 되도록 구성 한다.

WAS 서버에 docker 에 amazon linux 2 (aarch64)를 이용 해서 apache + php-fpm 구성을 할 경우 최신 버전의 php 를 사용할 수 있고,

.htaccess 를 apache 문법으로 사용이 가능 하다는 장점이 있고, was 의 빠른 처리를 위한 갯수를 늘리거나 php 버전 교체도 쉬울 예정이기 때문에 채택 하였다.

 

3tier_20220511

tier 1 = x86_64 – oracle linux 8 – nginx (Let’s encrypt SSL 구성 및 리버스프록시 설정)

tier 2 = arm64 – oracle linux 8 – memcache (session 적재 용도), docker – amazon linux – httpd, phpfpm(amazon linux 가 arm64 에서 최신 php 버전을 지원한다.)

tier 3 = arm64 – oracle linux 8 – mariadb

 


 

티어2 의 구성을 위해 ARM 인스턴스에 docker 레포지토리를 추가 하고, docker 와 memcache 를 설치 하고 활성화 한다.

 

위에서 언급 했지만 ARM64 cpu는 지원 하는 서드 파티 레포지토리가 없다.

AWS 에서 사용하는 Amazon Linux 2 의경우 내장된 명령어(repo) amazon-linux-extras 를 이용하여 최신 버전의 php 7.4 및 8.0 을 사용할 수 있다.

Amazon Linux 2 는 RHEL 또는 Fedora 와 같은 계열 이라고 볼 수 있다.

 

ARM64 서버에서 http 및 php를 구동하는 도커 이미지는 기존과 같은 방법으로 생성해 두었으니

아래와 같이 pull 을 한다. ‘ㅅ’a (https://hub.docker.com/r/san0123/amzn2-arm64-http-php)

 

docker 내부에서 apache 및 php-fpm 은 apache:apache 권한으로 작동을 하게 되어 있다.

아래와 같이 docker 호스트 서버에 apache 그룹 및 apache 유져를 생성 해두면 권한 문제가 맞추어 지기 때문에 퍼미션 지정이 필요 없어 진다.

 

도커 프록시로 처리되어 http 포트를 firewall-cmd 명령어로 방화벽에 열 필요는 없지만 컨테이너 안에서 ARM 호스트 서버쪽으로 session 적재를 위해 접근 하기 때문에 방화벽을 허용 처리 한다.

 

도커 명령어를 이용해 컨테이너를 생성 한다.

 

포트 매칭(:80) 및 볼륨 매칭(/var/www/html)을 해서 컨테이너는 생성 했기 때문에

docker 내부가 아닌 Oracle Linux 상의 /var/www/html 폴더로 이동 하여 아래의 내용과 같이 index.php 를 만들고 http(:80) 포트로 접속하여 확인 한다.

2022-05-04_144251

 

다음은 x86_64 인스턴스에 nginx 으로 Lets’encrypt 으로 보안서버 SSL 을 구현 하고

reverse proxy 를 해서 현재 was 서버 쪽으로 접속 시키는 부분이 남았다. (Tier 1)

하지만 was 서버도 apache를 가지고 있기 때문에 사이트를 단순히 구동 시키는건 가능 하다 ‘ㅅ’a

 

docker 를 만들때 httpd 가 생성 하는 로그는 stdout/stderr 으로 연결 해두었다.

이는 json 형태로 저장 되며 /var/lib/docker/containers/컨테이너풀아이디/컨테이너풀아이디-json.log 경로에 json 형태로 존재 한다.

명령어로 확인 하는 방법은 아래 방법으로 확인할 수 있다. [apache(httpd), php-fpm]


아래는 위에서 pull 받은 도커이미지를 구축할때 사용된 Dockerfile  이다.