본문 바로가기
Cloud

Oracle Cloud 무료로 웹서버&DB 배포하기

by 푸드듥 2024. 7. 31.
반응형

올해 초 사이드프로젝트로 간단한 웹사이트를 만들어서 AWS 서버로 운영하고 있는데

프리티어 기간이 끝나면 꽤 비용이 나갈 것 같아 비용 최적화를 고민하던 중,

2개의 인스턴스를 평생 무료로 제공한다는 Oracle Cloud를 알게 되었다.

 

이 글은 Oralce Cloud로 웹사이트를 배포한 과정을 공유하고자 작성했다.

 

무료 플랜 상세:

https://www.oracle.com/kr/cloud/free/?intcmp=ohp052322ocift

 

일단 내가 오라클 클라우드를 이용한 방식은 이렇다.

  • 오라클 무료 플랜에서는 AWS의 EC2에 해당하는 컴퓨팅 VM을 무려 2개나 무료로 쓸 수 있다! AWS 프리티어와 동일한 스펙(1CPU 1GB RAM)의 서버이다.
  • 나의 웹사이트는 nodejs 서버와 postgres DB로 구성되어 있어서, 각 VM에 하나씩 올렸다. 즉 하나에는 웹사이트 코드를 두고 nodejs 서버를 실행하고, 나머지 하나에는 postgres를 깔아서 DB로 썼다.
  • 무료 플랜에 Oracle DB도 포함되어 있긴 한데, 나는 Postgres를 쓸 생각인데다 무료 플랜 DB는 접속이 적으면 절전 된다고 해서 굳이 쓰고 싶지 않았다.

 

1. Oracle Cloud에 가입한다.

여기로 가입하면 된다.

https://www.oracle.com/kr/cloud/

 

참고로 주소, 카드정보 등을 입력하는 과정이 있다. 카드정보를 입력해도 유료 기능으로 업그레이드 하지 않는 한 비용이 청구되지 않는다고 한다. AWS처럼 한도 넘으면 가차없이 과금하는 건 아닌 모양이다.

 

가입하면 region을 선택하게 할 텐데 한국의 춘천을 누르면 된다.

원래 서울과 춘천이 있었는데 서울 사용량이 많아서 지금은 춘천만 선택 가능하다고 한다.

 

2. 인스턴스 만들기

인스턴스를 만들 것이다.

첫화면 대시보드의 시작하기 탭에 고정되어 있는 서비스링크 중  [인스턴스 컴퓨트]를 누른다.

[인스턴스 생성] 버튼을 눌러 인스턴스를 설정해준다.

  • 이름: 인스턴스의 이름. 원하는 걸로 적는다.
  • 이미지 및 구성: [편집]을 눌러 펼친 뒤 [이미지 변경] 버튼을 클릭해 원하는 OS를 선택한다. '항상 무료 적격' 이라고 적힌 것 중 선택하면 된다. 나는 Ubuntu 중 최신 버전으로 선택했다.
  • SSH 키 추가: 인스턴스에 SSH 접속을 할 거면 이 key가 필요하다. '자동으로 키 쌍 생성'을 선택하고 [전용 키 저장] 버튼을 눌러 파일을 받아준다. ~.key로 끝나는 파일이 다운로드될 텐데, 이를 컴퓨터의 안전한 위치에 잘 보관해두자.

[생성] 버튼을 누르면 잠시 뒤 인스턴스가 생성된다.

 

3. 고정 IP 사용하기

*고정 IP가 필요한 경우에만 해당

 

인스턴스가 종료되어도 IP가 재할당되지 않고 동일하게 유지되게 하려면 '예약된 공용 IP'를 사용해야 한다.

(AWS의 탄력적 IP랑 비슷하다)

 

생성된 인스턴스 화면에서 하단으로 스크롤하면 왼편 메뉴 중 [연결된 VNIC]가 있다.

여기서 목록의 VNIC를 선택하고 하단으로 스크롤하면 또 왼편에 메뉴가 있는데 그 중 [IPv4주소]를 클릭한다.

그럼 IP 주소 목록이 뜰 텐데, 행의 오른쪽 점 3개가 그려진 버튼을 눌러 편집을 할 수 있다.

 

처음에는 '임시 공용 IP'가 선택되어 있을 텐데, 우선 '공용 IP없음'으로 업데이트 해서 IP를 해제한 다음,

다시 편집해서 '예약된 공용 IP'를 선택해준다.

 

4. 보안 규칙 만들기

프로젝트에 따라 필요한 보안 규칙의 종류와 범위는 다르겠지만,

웹사이트라면 누구나 사이트에 접속 가능하게 HTTP, HTTPS 포트를 열어줘야 한다.

 

오라클 클라우드에서 보안 규칙은 ①보안 그룹과 ②네트워크 보안 그룹이 있는데

둘의 차이는 다음과 같다.

 

①보안 그룹

  • 서브넷 수준에서 트래픽을 제어한다. 설정하면 서브넷에 속한 모든 인스턴스에 규칙이 적용된다.
  • 단순한 규칙이나 서브넷 전체에 동일한 규칙을 적용할 때 쓰면 유용하다.

②네트워크 보안 그룹

  • 개별 인스턴스나 VNIC 수준에서 트래픽을 제어한다.
  • 특정 리소스에만 적용되는 세밀한 규칙을 적용할 때 적합하다.

이 글에서는 같은 서브넷 안에 웹서버, DB 인스턴스를 둘 것이기 때문에,

웹서버에 해당하는 인스턴스에만 보안 규칙을 적용하기 위해 ②네트워크 보안 그룹을 설정했다.

 

아래는 네트워크 보안 그룹을 설정하는 방법이다.

 

먼저 첫화면 대시보드에서 [가상 클라우드 네트워크(VCN) 네트워킹]을 누른다.

화면의 목록에 뜬 VCN 항목을 누르면 하단에 [네트워크 보안 그룹]을 메뉴가 있는데

여기서 [네트워크 보안 그룹 생성] 버튼을 누른다.

 

보안 그룹 이름을 적당히 적어주고 [Next] 버튼을 누르면 규칙을 정의할 수 있다.

아래는 http(80), https(443)을 허용하는 규칙이다.

  • 소스 유형: CIDR
  • 소스 CIDR: 0.0.0.0/0 (어디서든 접속할 수 있다는 뜻이다)
  • IP 프로토콜: TCP
  • 대상 포트 범위:80,443

이 외에도 SSH 접속을 하려면 22번 포트 규칙도 만들고 (이때 소스 CIDR은 본인 PC의 IP주소로 제한하면 더 안전하겠다),

다음에 DB용 인스턴스를 만들 때는 소스 CIDR은 웹서버 인스턴스의 Public IP주소를, 포트는 본인이 사용하는 DB 포트에 맞게 적어주면 된다. (ex. postgres는 주로 5432를 쓴다)

 

이렇게 만든 보안그룹을 인스턴스에 적용해줘야 한다.

다시 대시보드의 [인스턴스]로 가서 아까 만든 인스턴스를 누른다.

상세정보를 보면 기본 VNIC의 '네트워크 보안 그룹'이 '없음'으로 표시되어 있을 텐데,

옆의 [편집]을 눌러서, 방금 만든 보안그룹 선택하고 저장한다.

 

5. 인스턴스 접속해서 코드 올리기

프로젝트 코드를 인스턴스에 올려볼 것이다.

FileZilla 같은걸로 해도 되겠지만 여기서는 코드가 깃허브에 있다고 가정하고 SSH와 git을 이용해보겠다.

 

먼저 터미널을 켜고 인스턴스에 접속한다. 아래는 우분투 기준 명령어로, 본인 상황에 맞게 명령하면 된다.

참고로 key는 아까 인스턴스 생성하면서 받은 .key 파일인데, 터미널이 보고 있는 위치를 기준으로 경로를 적어줘야 하는 점 유의하자.

ssh -i "key파일경로" ubuntu@인스턴스공개IP주소

 

다음으로 인스턴스에 git을 설치한다.

1. 패키지 툴 최신화
sudo apt update

2. 깃 설치
sudo apt install git

 

깃허브에서 코드를 끌어오기 전에 우선 ssh 키를 생성해줘야 한다.

우리가 방금 인스턴스에 접속할 때 key를 사용한 것처럼 깃허브도 인스턴스에 접속하려면 키를 필요로 한다. 키를 만들어서 깃허브에 등록해줄 것이다.

 

아래 명령어로 ssh 키를 생성한다. 

ssh-keygen

 

파일명 등을 입력하라고 뜨는데 다 enter 눌러도 된다.

 

끝나면 /home/ubuntu/.ssh/ 안에 key가 생성될 것이다.

아래 명령어로 공개 키의 내용을 확인해보자.

cat /home/ubuntu/.ssh/id_ed25519.pub 

 

몇 줄자리 알파벳 문자열같은게 나온다. 출력된 전체 내용을 드래그해서 복사한다.

 

이제 깃허브에 이걸 등록해줘야 한다.

깃허브 > 프로필의 Settings > SSH and GPG keys 메뉴 > New SSH key 버튼을 누른다.

키 이름을 원하는대로 정해주고, 복사했던 키 내용을 입력란에 붙여넣는다. 이때 엔터나 공백이 들어가지 않게 조심한다. 저장하면 키 등록이 완료된다.

 

다시 터미널로 와서 인스턴스의 원하는 위치에 코드를 불러오자.

1. 저장소 만들기
git init

2. 원격 저장소와 연결
git remote add origin

3. 코드 가져오기
git pull origin main

 

그 외에 프로젝트에 필요한 게 있으면 설치한다.

아래는 노드 기준이니 참고.

// Node.js 설치
sudo apt-get install -y nodejs

// npm 설치
sudo apt install npm

// 내 프로젝트에 사용된 모듈 설치
npm i

 

앱을 실행한다. 본인 프로젝트에 맞는 명령어를 치면 된다.

80포트는 root만 쓸 수 있어서 sudo를 붙여서 명령했다.

sudo node app.js

 

브라우저에서 인스턴스 Public IP를 입력하면 접속이 될 것이다.

 

6. DB 올리기

상술한 과정에 따라 VM 인스턴스를 하나 더 만든 뒤에, 이번에는 안에 DBMS를 깔고 실행해준다.

아래는 Postgres 기준 명령어이다.

1. Postgres 설치
sudo apt install postgresql

2. 설치 확인 (버전 확인)
psql --version

3. 실행
sudo service postgresql start

 

DBMS에 접속해서 유저 암호를 설정한다.

1. postgres 라는 유저로 접속하기
sudo -u postgres psql

2. postgres 유저의 암호 설정
ALTER USER postgres PASSWORD '암호';

 

이제 필요한 테이블을 만들면 된다. (pgadmin 같은 GUI 툴로 해도 됨)

1. DB 만들기
create database DB이름;

2. 만든 DB에 들어가기
\c DB이름;

3. DDL로 테이블 생성

 

마지막으로 웹서버 인스턴스의 코드에 DB 접속정보를 잘 적어주자.

아래는 예시.

  • host: DB를 올린 VM 인스턴스의 퍼블릭 IP주소
  • database: DB이름
  • port: 5432
  • user: postgres
  • password: 암호

끝!

 

반응형

댓글