OCI arm 인스턴스에서 docker로 web, was 사용

OCI 에서 제공되는 무료 서버를 이용하여 nginx(x86) – was(arm64) – DB(arm64) 으로 잘 사용하고 있었다.

기존엔 snapd(certbot) 도 arm64에서 정상 동작지 않았고 http3를 구현한 nginx도 베타 였으나 현재는 mainline-quic 으로 되었기 때문에 native-arm64 환경으로 이행을 통해 메모리가 적어서 상대적으로 속도가 느렸던 x86서버를 버리기 위해서 아래와 같은 목표를 구현하는 것을 목표로 잡았다.

1. Docker – Was(http,php-fpm) 의 OS를 amazonlinux2 -> rockylinux9 으로 변경 하여 php-8.3 사용

2. Docker – rockylinux9 – nginx-quic(http3) 구축

 


 

베이스 OS는 rockylinux 8(arm64) 이며, 먼저 arm 서버에 docker, memcached 를 설치하고 활성화 한다.
php-fpm에서 세션 저장 위치로 호스트OS에 memcached(:11211)를 사용한다.

 

Was 컨테이너 안에서 웹서비스가 apache:apache 권한 으로 동작 되기 때문에 아래와 같이 베이스 os에 같은 권한을 생성하여 웹동작 과 웹서비스 폴더및 파일의 소유권을 일치화 한다.

 

파이어월 설정을 해서 memcache 와 was 포트를 허용한다.

 

https://hub.docker.com/r/san0123/rocky9-arm64-http-php

도커는 pull 을 별도로 하지 않더라도 정확한 주소를 사용할 경우 자동으로 pull 하는 기능이 있으므로 바로 run 을 실행 한다. nginx 가 80,443 을 사용할 예정이기 때문에 9000번 포트를 이용해 run 한다.

 

웹소스를 호스트os의 /var/www/html에 넣으면 호출을 할수 있다.
이때 소유권을 apache:apache 으로 맞추면 퍼미션 조정이 팔요 없이 작동이 된다.

 

ps. 실리콘 맥북의 경우 아래와 같은 명령어로 memcached를 설치 할 수 있다.

 


 

Nginx 용 도커를 띄우기 위해 아래와 같이 방화벽 설정을 한다.

 

웹용 도커는 베이스os에서 virtualhost 설정파일을 수정 하고 docker를 재실행 하기 위해 먼저 해당 파일을 생성해 둬야 한다.

 

https://hub.docker.com/r/san0123/rocky9-arm64-nginx

Nginx용 도커를 실행 한다.
컨테이너를 재 생성 할때마다 인증서나 가상호스트 파일을 수정하지 않도록 두개의 마운트 포인트를 추가해서 실행한다.

 

도메인을 서버에 연결 한 뒤에 Let‘s encrypt 를 생성하는 명령어는 다음과 같다. (email, webroot, domain 은 자신에 맞게 수정해서 사용한다.)

 

베이스OS 에서 /var/www/conf/virtual.conf 를 자신의 url에 맞게 수정하고 발급된 인증서가 동작할 수 있도록 수정을 한다.

 

nginx를 재시작 하기 위해 컨테이너를 재시작 한다.

 

http3가 잘 활성화 되어있는지 확인 한다. ( https://http3check.net/ )

2024-04-27 17 14 57

 

인증서가 약 2-3개월 마다 갱신해야 하기 때문에 cronatb에 아래와 같이 등록해서 주기적인 인증서 업데이트 및 적용을 위한 재시작을 한다. (매주 월요일 오전 8시)

 

현재 wordpress 로 구성된 enteroa.com 서버 구동시 사용 하는 메모리는 약 650MB 이다. 🙂

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다