블로그를 하나 제대로 만들어보고 싶어서 처음에는 WordPress.com 같은 서비스를 생각했다. 그런데 플러그인, 도메인, 광고, SEO까지 생각하면 결국 직접 설치형 워드프레스가 더 자유롭겠다는 결론이 났다.
그래서 선택한 조합은 이거였다.
Oracle Cloud 무료 서버 + Ubuntu + Docker Compose + WordPress + MySQL + Caddy
결론부터 말하면, 세팅은 생각보다 할 만했다. 다만 Oracle Cloud 쪽에서 헷갈리는 지점이 꽤 있었고, 서버 방화벽과 보안 규칙 때문에 한 번씩 막혔다.
왜 Oracle Cloud를 골랐나
가장 큰 이유는 무료 서버였다. Oracle Cloud에는 Always Free 리소스가 있고, 공식 문서 기준으로 Arm 기반 Ampere A1 Compute를 무료 범위 안에서 사용할 수 있다. 현재 기준 Always Free 테넌시에서는 A1.Flex를 2 OCPU, 12GB 메모리 수준으로 운영할 수 있다고 안내되어 있다.
참고한 공식 문서:
처음에는 “무료 서버면 성능이 너무 약하지 않을까?” 싶었는데, 워드프레스 블로그 하나 운영하기에는 2 OCPU / 12GB RAM이면 오히려 넉넉한 편이다.
실제로 만든 구성
내가 최종적으로 만든 구조는 이렇다.
도메인: jacob-world.com
서버: Oracle Cloud Ubuntu 24.04
웹 서버/HTTPS: Caddy
블로그: WordPress
DB: MySQL 8.0
관리: Docker Compose
처음에는 IP 주소로 워드프레스를 띄웠고, 나중에 도메인을 산 뒤 DNS를 서버 IP로 연결했다. 그 다음 Caddy를 붙여서 HTTPS를 자동으로 발급받았다.
지금은 아래 주소로 접속된다.
https://jacob-world.com
제일 헷갈렸던 부분
1. 리전 선택
처음에는 서울 리전이 안 보여서 당황했다. 결국 가까운 일본 도쿄 리전으로 진행했다. 한국 독자 대상 블로그라면 서울, 춘천, 도쿄, 오사카 정도가 무난해 보인다.
2. A1.Flex 재고 부족
Oracle에서 A1.Flex 인스턴스를 만들 때 “Out of capacity” 메시지가 뜰 수 있다. 이건 내가 설정을 잘못한 게 아니라, 해당 리전에 무료 ARM 서버 재고가 부족하다는 뜻이었다.
이럴 때는 아래 순서로 시도하면 된다.
1. Fault domain 지정하지 않기
2. Availability domain 바꿔보기
3. 2 OCPU / 12GB 대신 1 OCPU / 6GB로 낮춰보기
4. 나중에 다시 시도하기
3. Public IPv4
서버를 만들 때 Public IPv4가 없으면 외부에서 접속할 수 없다. 나도 이 부분에서 한 번 막혔다.
체크해야 할 것은 이것이다.
Public IPv4 address: Yes
Public subnet 사용
4. 80, 443 포트
워드프레스를 띄웠는데 브라우저에서 접속이 안 되면 대부분 포트 문제다.
Oracle 콘솔에서 인그레스 규칙을 열어야 한다.
TCP 22 SSH
TCP 80 HTTP
TCP 443 HTTPS
그리고 Ubuntu 서버 내부 iptables에서도 80, 443을 열어줘야 했다.
Docker Compose로 설치한 이유
직접 Apache, PHP, MySQL을 하나씩 설치할 수도 있지만, 블로그를 오래 운영하려면 Docker Compose가 더 편하다고 느꼈다.
좋았던 점은 세 가지다.
1. WordPress와 MySQL을 분리해서 관리할 수 있음
2. 나중에 서버 옮길 때 구조를 재현하기 쉬움
3. GitHub에 설정 파일을 정리해두기 좋음
실제 운영 비밀번호는 .env에 넣고, GitHub에는 .env.example만 올렸다. SSH 키나 DB 비밀번호는 절대 GitHub에 올리면 안 된다.
도메인과 HTTPS 연결
도메인은 jacob-world.com으로 샀다. DNS는 이렇게 설정했다.
A @ 서버 Public IP
CNAME www jacob-world.com
DNS가 반영된 뒤에는 Caddy를 붙였다. Caddy는 도메인만 제대로 연결되어 있으면 HTTPS 인증서를 자동으로 받아준다.
개인적으로 이 부분이 제일 만족스러웠다. 예전에는 SSL 인증서 설정이 귀찮았는데, Caddy를 쓰면 꽤 깔끔하게 끝난다.
비용 방지 설정
Oracle Cloud를 무료로 쓰려면 과금 방지도 꼭 해둬야 한다.
내가 확인한 체크리스트는 이렇다.
A1.Flex는 무료 범위 안에서만 사용
추가 인스턴스 만들지 않기
Load Balancer 만들지 않기
Autonomous DB 만들지 않기
Block Volume 추가하지 않기
Budget 알림 설정하기
Budget은 실제 과금을 막는 기능이라기보다는 알림 기능이다. 그래서 1 SGD 정도로 낮게 잡고, 사용량이 생기면 메일을 받도록 설정했다.
해보고 느낀 점
처음부터 완벽하게 이해하고 시작한 건 아니었다. 가입 주소 입력, 리전 선택, 인스턴스 스펙, Public IP, 포트 개방, Docker 설치, 도메인 연결까지 중간중간 막히는 지점이 많았다.
그래도 한 번 끝까지 해보니까 구조가 보였다.
도메인 → Oracle 서버 IP → Caddy → WordPress → MySQL
이 흐름만 이해하면 나중에 다른 사이트를 하나 더 만들거나, 서버를 옮기거나, 백업 구조를 잡는 것도 훨씬 쉬워질 것 같다.
다음에 할 일
이제 블로그 자체는 열렸으니 다음은 운영이다.
1. 테마 정리
2. 기본 플러그인 최소화
3. 백업 설정
4. 검색엔진 공개
5. 첫 글부터 꾸준히 쓰기
처음 글은 이렇게 서버를 만든 기록으로 남겨둔다. 나중에 비슷하게 워드프레스 블로그를 만들 사람에게도 도움이 될 것 같고, 무엇보다 내가 다시 세팅할 때 볼 수 있는 기록이 된다.
FAQ
Oracle Cloud 무료 서버로 워드프레스 운영이 가능한가?
가능하다. Oracle 공식 문서에서도 OCI Free Tier와 Docker를 이용한 WordPress 호스팅 구성을 안내하고 있다. 다만 무료 리소스 한도와 리전 재고 상황은 확인해야 한다.
Docker Compose를 꼭 써야 하나?
꼭 필요한 것은 아니지만 추천한다. WordPress와 MySQL을 분리해서 관리하기 좋고, 나중에 백업이나 이전이 편하다.
도메인 없이도 시작할 수 있나?
가능하다. 처음에는 Public IP로 접속해서 워드프레스를 설치할 수 있다. 다만 HTTPS와 검색 노출까지 생각하면 도메인을 연결하는 편이 좋다.
무료로 계속 운영하려면 뭘 조심해야 하나?
Always Free 범위를 넘는 리소스를 만들지 않는 것이 중요하다. 특히 추가 서버, 로드밸런서, 별도 유료 DB, 추가 볼륨은 조심해야 한다.