OCI: wordpress와 mariadb를 사용해서 OCI에 웹 서비스 구축하기

저는 cafe24에서 제공하는 매니지드 워드프레스(wordpress) 서비스를 이용해서 해당 사이트를 운영하고 있었습니다. 그런데 Oracle Cloud Infrastructure(OCI)에서 2개 인스턴스까지 평생 무료로 사용할 수 있다고 해서, 이 번에 큰맘 먹고 cafe24에서 운영하던 사이트를 OCI로 이전했습니다. 저만 따라하면 누구든지 OCI에 웹 서비스를 구축할 수 있습니다. 아래 이미지는 전체적인 Architecture입니다.
웹 서비스 아키텍쳐
아래는 제가 사용한 Resource들과 생성한 이름들입니다. OCI에 웹 서비스를 구축하려면 Resource들에 대한 이해는 필요하다고 생각합니다. 잠깐 검색하는 시간을 가져보시면 어떨까요?

  1. Compartment : web-compartment
  2. Virtual Cloud Network : webvcn
  3. Subnets : public-subnet4wordpress, private-subnet4mariadb
  4. Internet Gateway : web-internet-gateway
  5. Route Tables : Default Route Table for webvcn, Default Route Table for private subnet
  6. Security Lists : Security List for Public subnet WordPress, Security List for Private subnet Mariadb
  7. Reserved Public IP : web-public-ip
  8. Instances : vm4wordpress(10.0.100.100), vm4mariadb(10.0.200.200)

Resource들에 대한 이해가 끝나셨다면 천천히 따라오세요.

1. Compartment 생성

  • Resource 경로 : Navigation menu > Identity & Security > Compartments > Create Compartment
  • Compartment Name : “web-compartment”
    Create Compartment

2. Virtual Cloud Network 생성

  • Resource 경로 : Navigation menu > Networking > Virtual cloud networks > Create VCN
  • VCN Name : “webvcn”
    Create Virtual Cloud Network

3. Subnet 생성

  • Resource 경로 : webvcn 클릭 > Subnets > Create Subnet
  • Subnet Name :
    1. Public subnet : “public-subnet4wordpress”(10.0.100.0/24)
    2. Private subnet : “private-subnet4mariadb”(10.0.200.0/24)

    Create Subnet

4. Internet Gateway 생성

  • Resource 경로 : Navigation menu > Networking > Virtual cloud networks > “webvcn” 클릭 > Internet Gateways > Create Internet Gateway
  • Internet Gateway Name : “web-internet-gateway”
    Create Internet Gateway

5. Route Table 생성 및 할당

  • Public subnet을 위한 Route Table 생성 및 할당
    1. Route Table 생성
      • Resource 경로 : “webvcn” 선택 > Route Tables > “Default Route Table for webvcn” 클릭 > Routing Rules > Add Route Rules
      • Target Type 항목은 “Internet Gateway”를 선택하고, Target Internet Gateway 항목은 앞 단계에서 생성한 “web-internet-gateway”를 선택합니다.
        Public subnet route table
    2. Route Table 할당
      • Resource 경로 : “webvcn” 선택 > Subnets > “public-subnet4wordpress”의 Edit
        Public subnet route table
      • Route Table 항목에서 “Default Route Table for webvcn” 선택
        Public subnet route table
  • Private subnet을 위한 Route Table 생성 및 할당
    1. Route Table 생성
      • Resource 경로 : “webvcn” 선택 > Route Tables > Create Route Table
      • Route Table Name : Default Route Table for private subnet
      • Target Type 항목은 “Private IP”를 선택하고, Target Selection 항목은 “vm4wordpress”의 Private IP(10.0.100.100)를 입력합니다.
        Private subnet route table
    2. Route Table 할당
      • Resource 경로 : “webvcn” 선택 > Subnets > “private-subnet4mariadb”의 Edit
      • Route Table 항목에서 “Default Route Table for private subnet” 선택합니다.

6. Security List 생성 및 할당

  • Public subnet을 위한 Security List 생성 및 할당
    1. Security List 생성
      • Resource 경로 : “webvcn” 선택 > Security > Create Security List
      • Security List Name : Security List for Public subnet WordPress
      • Ingress Security Rules 등록 :
        – 1번 룰: ssh 접속을 하기 위해 필요
        – 2번 룰: http 인터넷 서비스를 위해 필요
        – 3번 룰: https 인터넷 서비스를 위해 필요
        – 4번 룰: MTU 탐지 (Path MTU Discovery) 정상 동작 필요
        – 5번 룰: 경로 오류, 장애 확인 시 필요
        – 6번 룰: 네트워크 연결 확인 (ping), 정상적으로 서비스를 구축한 이후에는 6번 룰은 삭제해도 됩니다
        Public subnet security list
      • Egress Security Rules 등록
        Public subnet security list
    2. Security List 할당
      • Resource 경로 : “webvcn” 선택 > Subnets > “public-subnet4wordpress” 선택 > Security > Add Security List
      • “Security List for Public subnet WordPress” 선택합니다.
        Public subnet security list
  • Private subnet을 위한 Security List 생성 및 할당
    1. Security List 생성
      • Resource 경로 : “webvcn” 선택 > Security > Create Security List
      • Security List Name : Security List for Privae subnet Mariadb
      • Ingress Security Rules 등록 :
        – 1번 룰: “vm4wordpress” 인스턴스를 경유해서 ssh 접속을 하기 위해 필요
        – 2번 룰: mariadb의 디폴트 포트
        – 3번 룰: “vm4wordpress” 인스턴스와 연결되었는지 확인, 정상적인 서비스 후 3번 룰은 삭제할 수 있습니다.
        Private subnet security list
      • Egress Security Rules 등록 :
        Private subnet security list
    2. Security List 할당
      • Resource 경로 : “webvcn” 선택 > Subnets > “priavate-subnet4mariadb” 선택 > Security > Add Security List
      • “Security List for Privae subnet Mariadb”를 선택합니다.
        Private subnet security list

7. Reserved Public IP 생성

인스턴스에 Public IP가 등록되어 있어야 외부 인터넷에서 인스턴스에 접속(ssh/http/https)할 수 있습니다. Public subnet에 인스턴스 생성 시 자동으로 부여되는 Public IP는 reboot 시 변경되기 때문에 Reserved Public IP를 할당받아서 외부에서 접속할 수 있는 인스턴스(“vm4wordpress”)에 할당하면 reboot 시에도 변경되지 않는 고정 IP를 설정할 수 있습니다.

  • Resource 경로 : Navigation menu > Networking > Reserved public IPs > Reserve public IP address
  • Reserved public IP Name : web-public-ip
    Reserve public ip address

8. Intance 생성 및 Reserved Public IP 할당

  • Resource 경로 : Navigation menu > Compute > Instances > Create compute instance
  • Instance Name : 워드프레스(wordpress)와 마리아DB(mariadb)를 설치하기 위해 각각의 인스턴스(vm4wordpress, vm4maradb)를 생성합니다.
    Create instance
  • 인스턴스 생성 시 사용한 옵션:
    1. Image 영역 :
      Ubuntu 이미지(Canonical Ubuntu 24.04) 적용합니다. 제 실력이 부족한지 Oracle 이미지와 Rocky 이미지 적용 시 패키지 업데이트와 설치가 안되었습니다.
    2. Primary VNIC IP address 영역 :
      – IPv4 address는 자동으로 할당하거나 저처럼 수동으로 할당할 수도 있습니다.
      – Public subnet에 생성되는 vm4wordpress 인스턴스를 생성할 때는 Public IPv4 address를 설정하는 영역이 활성됩니다. 아래와 같이 선택하지 않습니다. 다음 단계에서 Reserved Public IP(“web-public-ip”)로 할당하겠습니다. 그래와 인스턴스를 reboot할 때 public ip가 변경되지 않습니다. 웹 서비스를 구축할 때 중요합니다.
      Create instance
    3. Add SSH keys 영역 :
      모든 인스턴스의 SSH key(private key, public key)를 로컬PC로 다운로드합니다.(외부에서 ssh로 인스턴스에 접속할 때 필요합니다.)
      Create instance
  • “vm4wordpress” 인스턴스에 Reserved Public IP 할당
    • Resource 경로 : Compute > Instances > “vm4wordpress” 선택 > Attached VNICs > “vm4wordpress” 선택 > IPv4 Addresses > Edit
      Reserved public ip 할당
    • Public IP Type 영역 : “Select Existing Reserved IP Address”를 선택한 후 Drop down list box에서 “web-public-ip”를 선택합니다.
      Reserved public ip 할당

You may also like...

답글 남기기

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