OCI: wordpress와 mariaDB로 무료 웹 서비스 구축 설정하기
저는 cafe24에서 제공하는 매니지드 워드프레스(wordpress) 서비스를 이용해서 해당 사이트를 운영하고 있었습니다. 그런데 Oracle Cloud Infrastructure(OCI)에서 2개 인스턴스까지 평생 무료로 사용할 수 있다고 해서, 이 번에 큰맘 먹고 cafe24에서 운영하던 사이트를 OCI로 이전했습니다. 저만 따라하면 누구든지 OCI에 웹 서비스를 구축할 수 있습니다. public instance에는 wordpress를, private instance에는 mariadb를 설치했습니다. wordpress와 mariadb를 설치하는 절차는 제 브로그에서 맛보기로 확인할 수 있지만, OS별 최신 패키지 설치 절차는 인터넷을 참고하시는 게 좋습니다. 아래 이미지는 전체적인 Architecture입니다.

아래는 제가 사용한 Resource들과 생성한 이름들입니다. OCI에 웹 서비스를 구축하려면 Resource들에 대한 이해는 필요하다고 생각합니다. 잠깐 검색하는 시간을 가져보시면 어떨까요?
- Compartment : web-compartment
- Virtual Cloud Network : webvcn
- Subnets : public-subnet4wordpress, private-subnet4mariadb
- Internet Gateway : web-internet-gateway
- Route Tables : Default Route Table for webvcn, Default Route Table for private subnet
- Security Lists : Security List for Public subnet WordPress, Security List for Private subnet Mariadb
- Reserved Public IP : web-public-ip
- Instances : vm4wordpress(10.0.100.100, public subnet), vm4mariadb(10.0.200.200, private subnet)
Resource들에 대한 이해가 끝나셨다면 천천히 따라오세요.
1. Compartment 생성
- Resource 경로 : Navigation menu > Identity & Security > Compartments > Create Compartment
- Compartment Name : “web-compartment”

2. Virtual Cloud Network 생성
- Resource 경로 : Navigation menu > Networking > Virtual cloud networks > Create VCN
- VCN Name : “webvcn”
3. Subnet 생성
- Resource 경로 : webvcn 클릭 > Subnets > Create Subnet
- Subnet Name :
- Public subnet : “public-subnet4wordpress”(10.0.100.0/24)
- Private subnet : “private-subnet4mariadb”(10.0.200.0/24)

여기서 잠깐!
서브넷을 생성했으면 WordPress용 인스턴스(vm4wordpress)는 Public Subnet에, MariaDB용 인스턴스(vm4mariadb)는 Private Subnet에 생성합니다.

그리고, 인터넷을 통해 접근/접속할 수 있도록 vm4wordpress 인스턴스에 Reserved Public IP를 할당합니다.
4. Internet Gateway 생성
- Resource 경로 : Navigation menu > Networking > Virtual cloud networks > “webvcn” 클릭 > Gateways > Create Internet Gateway
- Internet Gateway Name : “web-internet-gateway”

5. Route Table 생성 및 할당
- Public subnet을 위한 Route Table 생성 및 할당
- 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”를 선택합니다.

- Route Table 할당
- Resource 경로 : “webvcn” 선택 > Subnets > “public-subnet4wordpress”의 Edit

- Route Table 항목에서 “Default Route Table for webvcn” 선택

- Resource 경로 : “webvcn” 선택 > Subnets > “public-subnet4wordpress”의 Edit
- Route Table 생성
- Private subnet을 위한 Route Table 생성 및 할당
- 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)를 입력합니다.

- Route Table 할당
- Resource 경로 : “webvcn” 선택 > Subnets > “private-subnet4mariadb”의 Edit
- Route Table 항목에서 “Default Route Table for private subnet” 선택합니다.
- Route Table 생성
6. Security List 생성 및 할당
- Public subnet을 위한 Security List 생성 및 할당
- 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번 룰은 삭제해도 됩니다

- Egress Security Rules 등록

- Security List 할당
- Resource 경로 : “webvcn” 선택 > Subnets > “public-subnet4wordpress” 선택 > Security > Add Security List
- “Security List for Public subnet WordPress” 선택합니다.
- Security List 생성
- Private subnet을 위한 Security List 생성 및 할당
- Security List 생성
- Resource 경로 : “webvcn” 선택 > Security > Create Security List
- Security List Name : Security List for Private subnet Mariadb
- Ingress Security Rules 등록 :
– 1번 룰: “vm4wordpress” 인스턴스를 경유해서 ssh 접속을 하기 위해 필요
– 2번 룰: mariadb의 디폴트 포트
– 3번 룰: “vm4wordpress” 인스턴스와 연결되었는지 확인, 정상적인 서비스 후 3번 룰은 삭제할 수 있습니다.
- Egress Security Rules 등록 :

- Security List 할당
- Resource 경로 : “webvcn” 선택 > Subnets > “priavate-subnet4mariadb” 선택 > Security > Add Security List
- “Security List for Private subnet Mariadb”를 선택합니다.

- Security List 생성
7. 패키지 설치/업데이트 및 인스턴스 간 통신을 위한 iptables 정책 설정하기
- vm4wordpress 인스턴스는 Public Subnet에 생성되어 있고, Public IP를 할당했기 때문에 외부 저장소를 통해 패키지를 설치/업데이트를 할 수 있습니다.
- vm4mariadb 인스턴스는 Private Subnet에 생성되기 있기 때문에 직접 인터넷에 연결할 수 없고, vm4wordpress 인스턴스를 통해서만 패키지를 설치/업데이트할 수 있습니다. 이를 위해서는 자체 방화벽 허용 정책을 별도로 등록해야 합니다.
8. 외부에서 ssh로 인스턴스에 접속하기
- vm4wordpress 인스턴스와 wm4mariadb 인스턴스에 각각 WordPress와 MariaDB를 설치하고 패키지를 업데이트하려면 ssh 접속을 해야 합니다.
- 인스턴스 생성할 때 다운로드한 “private key”를 사용해서 MobaXterm을 통해 인스턴스에 접속합니다.
9. HTTPS 접속을 위한 인증서 설치하기
- HTTP는 데이터를 ‘평문(Plain Text)’으로 전송하기 때문에 스니핑(Sniffing) 등 정보보호 측면에서 취약합니다. HTTPS는 데이터를 암호화하여 전송하므로, 해커의 패킷 가로채기나 위변조를 방지합니다.
- Let’s Encrypt를 사용하여 HTTPS 인증서를 발급받고 워드프레스 사이트에 적용합니다.
