본문 바로가기

취미, 관심/NAS, Server

오라클 프리티어 인스턴스 생성 자동화 스크립트(PHP)

매번 까먹어서 클리앙의 theb1ue 님께서 만들어두신 가이드를 옮겼습니다. ;;

A1인스턴스 생성을 하려고 보니 잘 안되어서, 이번에 세팅을 하면서 다시 정리해봅니다.

 

준비물

1. 상시 돌아가는 시스템(오라클 E1 프리티어 서버, 집에서 굴리는 나스나 홈서버 등)

2. 오라클 클라우드 계정

3. MobaXterm(추천), Putty 등 터미널 프로그램

4. ftp 접속 프로그램이 필요하지만 MobaXterm을 사용한다면 필요없음(포함)

5. 이왕이면 메모장(notepad)보다는 notepad++을 사용하는게 조금 더 편합니다.

 

시작

API 추가 및 Key 다운로드

우상단의 프로필 이미지 -> 내 프로파일 클릭

API 키 -> API 키 추가 -> API 키 쌍 생성 -> 전용키, 공용키 다운로드 후 추가 클릭

* 이 키는 잘 보관해 둡니다.

 

여기서 나오는 부분은 메모장 등에 일단 복사해 둡니다. 실수로 닫았다면, API 키 목록 우측의 점 세개를 클릭한 후 '구성 파일 보기'를 누르면 다시 볼 수 있습니다.

 

스크립트 다운로드 및 설정

이제 자동 생성 스크립트를 돌릴 시스템으로 접속합니다.(준비물 1)

저는 MobaXterm을 통해 원격 서버에 SSH접속 후 진행합니다.

 

GIT 저장소 복제

 

git clone https://github.com/hitrov/oci-arm-host-capacity.git

oci-arm-host-capacity 폴더로 이동 및 PHP 설치

cd oci-arm-host-capacity && sudo apt update && sudo apt install -y php-fpm

만약 vim, nano 등의 편집기가 없다면 `sudo apt install vim` 등으로 편집기를 설치하시거나 vi를 사용해도 됩니다.

설치중.....

설치 확인을 해줍니다.

php -v

설치확인

composer 설치

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php && \
php -r "unlink('composer-setup.php');" && \
sudo apt install -y php8.1-curl php8.1-dom php8.1-mbstring php8.1-zip unzip composer

*참고한 문서에서는 php 7.4 버전이지만, 이 글을 작성하는 현재 php 8.1.2가 설치됩니다. 필요 패키지 중 zlibc는 이미 포함되어있고, 나머지 모듈은 버전을 8.1로 수정했습니다.

 

아래 명령으로 composer 최종 설치를 진행합니다.

composer install

인스턴스 생성(생성 정보 추출)

저는 아래와 같이 생성합니다만, OS 버전은 실제 사용하시는 종류로 설정해주세요. 나중에 생성하려면 이 과정을 다시 해야 합니다..ㅠㅠ

좌상단 줄세개 눌러서 인스턴스 페이지로 이동하구요.

생성 들어가구요

이미지 및 구성 - 편집 눌러서

이미지와 shape를 선택합니다.

저는 우분투 22.04, A1.Flex 2core 선택했습니다. 이렇게 선택하면 무료로 생성 가능한 E1 서버 두개와 A1.Flex 2core 12GB 메모리 서버 2개를 사용할 수 있습니다. 

오라클 프리티어에서는 최대 200GB의 볼륨을 사용 가능하고, 인스턴스 당 최소 50GB의 볼륨을 사용하므로, 이렇게 총 4개의 인스턴스를 활용하는것이 프리티어에서는 최대 숫자라고 생각됩니다. 물론, A1.Flex 인스턴스는 CPU 4개를 하나로 뭉쳐서 쓰거나, 1개씩 4개로 쪼개서 쓰는 방법도 가능해요.

 

가이드에서는 새 가상 클라우드 네트워크를 생성하는데.. 저는 그냥 있는거 그대로 갑니다.

중요한 부분입니다. 생성된 인스턴스에 접속하기 위해 무조건 필요한 부분입니다. 사용하는 키가 있다면 그걸 사용하고, 없다면 새로 발급받아서 사용합니다. 

받은 키파일은 잘 보관해주세요.

 

F12키를 눌러 네트워크 페이지를 넘겨주고, 생성버튼을 누릅니다. > instance 우클릭 > curl 복사 > 메모장에 붙여넣어줍니다.

아래처럼 보일겁니다.

`Ctrl + F` 로 SubnetID, ImageID, SSH Key 를 복사합니다.

 

subnetid

imageid

ssh key

확보한 내용은 이렇게 될거에요.

API Key 파일 복사

처음에 생성한 API Key파일을 서버로 업로드합니다. mobaxterm을 사용하신다면 화면 좌측의 sftp 창에서 처리가 가능합니다.

만약 이 폴더가 보이지 않는다면 새로고침(F5)을 해 주면 됩니다.

복사해줍니다.

이제 스크립트 파일 작성을 합니다.

 

.env 파일 수정

아래 명령으로 example 파일을 복사하고

cp .env.example .env

사용하는 텍스트에디터로 파일을 열어줍니다. 저는 vim을 씁니다.

아래 표시한 부분이 수정할 부분입니다.

API Key 생성시 만든 정보

F12 눌러서 확인한 정보

 

`OCI_PRIVATE_KEY_FILENAME` 부분은 아까 옮겨둔 파일 중 public 이 안붙은 파일의 이름을 넣어주면 됩니다.

OCI_PRIVATE_KEY_FILENAME="/home/[계정명]/oci-arm-host-capacity/siane@siane.kr_2023-02-21T01_30_20.456Z.pem"

[계정명] 부분은 SSH로그인시 사용한 사용자명을 넣어줍니다. oci-arm-host-capacity 폴더가 위치한 경로입니다.

그 외 부분은 아래와 같이 설정합니다.

 

저랑 같은 설정이라면 이렇게 하시면 되고, 4코어 24GB, 200GB의 볼륨을 사용한다면(사용 가능한 최대 자원) 

아래처럼 넣어주면 됩니다.

# OCPU 숫자(코어수)
OCI_OCPUS=2

# 메모리(코어x6)
OCI_MEMORY_IN_GBS=12

# 생성할 인스턴스의 종류 및 숫자
OCI_SHAPE=VM.Standard.A1.Flex
OCI_MAX_INSTANCES=2

# 사용할 볼륨의 용량
OCI_BOOT_VOLUME_SIZE_IN_GBS=50

vim은 편집을 원하는 위치의 앞에서 a등의 키를 누르면 편집 모드가 됩니다.

작성이 완료되었다면 `esc`버튼을 누른 후 `:wq` 를 입력해 저장, 종료합니다.

모든 값이 입력되었다면 아래와 같은 형태가 될것입니다.

 

log 파일 생성

스크립트 실행 결과를 저장하기 위한 파일을 만들고, 파일을 쓸 수 있게 권한을 줍니다.

touch oci.log && chmod 777 oci.log

실행 확인

아래 명령을 넣어 실행해봅니다.

php ./index.php

정상 실행된 모습입니다. 생성 실패 로그가 남네요.

생성이 되면 `Already have an instance(s)` ~~ 로그가 남거나 아래와 같은 로그가 남을거에요.

{
    "code": "LimitExceeded",
    "message": "The following service limits were exceeded: standard-a1-memory-count, standard-a1-core-count. Request a service limit increase from the service limits page in the console. "
}

이제 확인했으니, 자동 실행을 시켜줍니다.

자동 실행 처리(크론탭)

`crontab -e` 명령으로 실행합니다.

오류가 난다.

crontab이 없으면 오류가 납니다. 설치해줍니다.

# cron 설치, 시작, systemctl 활성화
sudo apt install -y cron && sudo service cron start && sudo systemctl enable cron.service 
# systemctl 등록 확인
sudo systemctl list-unit-files | grep cron
sudo service cron status

다시 `crontab -e` 명령을 입력합니다.

저는 nano와 vim만 설치되어있어 이렇게 보이는데, 다른 에디터가 설치되어있다면 함께 보입니다.

1을 입력 후 엔터를 입력하면 nano 편집기로 들어갑니다.

* * * * * /usr/bin/php /home/[계정명]/oci-arm-host-capacity/index.php >> /home/[계정명]/oci-arm-host-capacity/oci.log 2>&1

아래와 같은 모양이 됩니다.

이제 매 분마다 해당 파일을 실행하고, 결과를 oci.log 파일에 남겨줍니다.

`tail oci.log` 를 입력하면 최근 로그를 볼 수 있고, `cat oci.log`를 입력하면 전체 로그를 볼 수 있습니다.

로그 일일히 확인하긴 귀찮으니까, 가끔씩 로그인해서 인스턴스 목록 보시면 생성됨을 확인할 수 있습니다.

 

생성한 후에는 위 인스턴스 생성 시 다운로드한 key를 사용해 로그인하시면 됩니다.