wordpress cloudflare oci integration

[Oracle Cloud 2025] ARM 서버로 고성능의 워드프레스 호스팅 (WordPress Hosting) 환경 구축하기

Oracle Cloud 무료 티어에서 ARM 서버를 활용해 안정적이고 고성능의 워드프레스(WordPress) 블로그를 호스팅 하는 방법을 실제 경험을 바탕으로 상세히 알아봅니다.

Oracle Cloud WordPress Architecture on ARM
Oracle Cloud WordPress Architecture on ARM

1. Oracle Cloud ARM 서버로 워드프레스 구축하기

오라클 클라우드 무료 티어는 타 클라우드 서비스와 차별화된 ‘Always Free’ 정책을 제공합니다. 특히 ARM 서버의 구성이 매우 강력합니다.

무료 티어 리소스 구성

클라우드 컴퓨팅 시장에서 Oracle은 매우 파격적인 접근 방식을 보여주고 있습니다. 다른 주요 클라우드 서비스 제공업체들이 1년 한정 무료 서비스를 제공하는 것과 달리, Oracle Cloud는 ‘Always Free’ 정책을 통해 평생 무료로 사용할 수 있는 강력한 클라우드 리소스를 제공합니다. 이는 개발자, 스타트업, 그리고 개인 블로거들에게 획기적인 기회가 됩니다.

Oracle Cloud Free Tier가 제공하는 컴퓨팅 리소스는 다음과 같은 특별한 구성을 자랑합니다:

  • 컴퓨팅 자원:
    • ARM 기반 VM 2대 (총 24GB 메모리, 월 3,000 OCPU 시간)
    • x86 기반 VM 2대 (각 1GB 메모리, 0.125 OCPU)
  • 스토리지 및 네트워크:
    • 200GB 블록 스토리지 (고성능 SSD)
    • 10GB 객체 스토리지
    • 10GB 아카이브 스토리지
    • 월 10TB 무료 아웃바운드 트래픽
Oracle Cloud 무료 ARM 서버 구성
Oracle Cloud Free Tier ARM 서버 리소스 구성

이 정도의 구성은 실제 프로덕션 환경에서도 충분히 활용 가능한 수준의 컴퓨팅 파워를 제공합니다. 특히 ARM 기반 인스턴스는 놀라운 성능과 효율성을 자랑합니다.

컴퓨팅 자원 못지않게 중요한 것이 스토리지와 네트워크입니다. Oracle Cloud는 이 부분에서도 관대한 정책을 보여줍니다. 200GB의 블록 스토리지는 마치 여러분의 컴퓨터에 장착된 SSD와 같은 역할을 합니다. 이를 두 개의 볼륨으로 나누어 사용할 수 있어, 시스템 볼륨과 데이터 볼륨을 별도로 관리할 수 있습니다.

여기에 더해 10GB의 객체 스토리지와 10GB의 아카이브 스토리지도 제공됩니다. 객체 스토리지는 마치 클라우드 버전의 외장하드처럼 생각하면 됩니다. 웹 사이트의 이미지나 문서 파일을 저장하기에 적합하죠. 특히 워드프레스와 같은 CMS를 운영할 때 미디어 파일을 저장하는 용도로 매우 유용합니다.

가장 인상적인 부분은 매월 10TB의 무료 아웃바운드 트래픽을 제공한다는 점입니다. 이는 다른 클라우드 서비스들과 비교했을 때 매우 관대한 정책입니다. 예를 들어, 블로그에 고화질 이미지가 많이 포함되어 있더라도 트래픽 걱정 없이 운영할 수 있다는 의미입니다.

기본 시스템 구성

제가 현재 운영 중인 워드프레스 블로그 시스템은 다음과 같이 구성되어 있습니다:

프론트엔드:

  • ARM 기반 컴퓨트 인스턴스
  • Oracle Linux OS에 워드프레스 설치
  • Apache 웹 서버 활용

백엔드:

  • MySQL HeatWave 데이터베이스
  • Redis 캐시 서버
  • 객체 스토리지 연동

시스템 초기 설정 및 웹 서버 구성 스크립트

#!/bin/bash # RHEL/CentOS 웹 서버 설정 스크립트 # root 권한 확인 if [[ $EUID -ne 0 ]]; then echo “root 권한으로 실행하세요.” exit 1 fi # 시스템 업데이트 및 기본 패키지 설치 dnf update -y dnf install -y epel-release dnf install -y httpd php php-fpm php-mysqlnd php-json php-gd php-mbstring php-xml php-opcache mod_ssl # PHP 설정 sed -i ‘s/memory_limit = .*/memory_limit = 256M/’ /etc/php.ini sed -i ‘s/upload_max_filesize = .*/upload_max_filesize = 32M/’ /etc/php.ini sed -i ‘s/post_max_size = .*/post_max_size = 64M/’ /etc/php.ini # Apache 보안 설정 cat > /etc/httpd/conf.d/security.conf << ‘EOF’ ServerTokens Prod ServerSignature Off TraceEnable Off Header set X-Frame-Options “SAMEORIGIN” EOF # SELinux 설정 setsebool -P httpd_can_network_connect 1 # 방화벽 설정 systemctl start firewalld systemctl enable firewalld firewall-cmd –permanent –add-service=http firewall-cmd –permanent –add-service=https firewall-cmd –reload # 서비스 시작 systemctl enable httpd php-fpm systemctl start httpd php-fpm echo “웹 서버 설정이 완료되었습니다.”

2. 무료 MySQL HeatWave로 데이터베이스 구성

Oracle Cloud의 MySQL HeatWave는 워드프레스에 최적화된 고성능 데이터베이스 환경을 제공합니다.

데이터베이스 초기 설정

/**
 * WordPress 데이터베이스 초기 설정 스크립트
 * 
 * 이 스크립트는 다음 작업을 수행합니다:
 * 1. WordPress용 새 데이터베이스 생성
 * 2. 전용 데이터베이스 사용자 생성
 * 3. 사용자에게 필요한 권한 부여
 */

-- Step 1: WordPress 전용 데이터베이스 생성
CREATE DATABASE wordpress_db;

-- Step 2: WordPress 전용 사용자 생성 (모든 호스트에서 접속 가능)
CREATE USER 'wordpress_user'@'%' 
    IDENTIFIED BY 'your_password';

-- Step 3: 생성된 사용자에게 데이터베이스 접근 권한 부여
GRANT ALL PRIVILEGES 
    ON wordpress_db.* 
    TO 'wordpress_user'@'%';

-- Step 4: 권한 변경사항 즉시 적용
FLUSH PRIVILEGES;

워드프레스 데이터베이스 최적화

데이터베이스 성능은 전체 시스템 성능에 직접적인 영향을 미칩니다. 다음과 같은 최적화를 적용했습니다

워드프레스의 경우 특히 post 테이블과 postmeta 테이블의 조인이 빈번합니다. 이를 위해 다음과 같은 인덱스 전략을 사용하고 있습니다:

/**
 * WordPress 데이터베이스 성능 최적화를 위한 인덱스 생성 스크립트
 * 
 * 이 스크립트는 다음과 같은 성능 향상을 제공합니다:
 * - 게시물 조회 속도 개선
 * - 메타데이터 검색 최적화
 * - 카테고리/태그 관련 쿼리 성능 향상
 */

-- 게시물 조회 성능 최적화
-- 영향: 게시물 목록, 아카이브 페이지, 검색 결과 표시 속도 향상
CREATE INDEX idx_post_type_status_date 
    ON wp_posts (
        post_type,      -- 게시물 유형 (post, page, attachment 등)
        post_status,    -- 게시물 상태 (publish, draft, private 등)
        post_date       -- 게시 날짜
    );

-- 커스텀 필드 검색 최적화
-- 영향: 게시물 메타데이터 조회 및 필터링 성능 향상
CREATE INDEX idx_postmeta_key_value 
    ON wp_postmeta (
        meta_key,       -- 메타데이터 키
        meta_value      -- 메타데이터 값
    );

-- 카테고리/태그 관계 조회 최적화
-- 영향: 카테고리/태그별 게시물 목록 표시 속도 향상
CREATE INDEX idx_term_relationships 
    ON wp_term_relationships (
        term_taxonomy_id    -- 분류 체계 ID
    );

성능 모니터링 구성

/**
 * WordPress 데이터베이스 성능 모니터링 설정 스크립트
 *
 * 이 스크립트는 두 가지 주요 모니터링 메커니즘을 설정합니다:
 * 1. Slow Query Log: 느린 쿼리를 감지하고 기록
 * 2. Performance Schema: 상세한 성능 메트릭스 수집
 * 
 * 주의: 이러한 모니터링 설정은 서버 성능에 약간의 영향을 줄 수 있습니다.
 */

-- Section 1: Slow Query Log 설정
-- 목적: 성능이 좋지 않은 쿼리를 식별하고 최적화하기 위한 로깅 활성화

-- 느린 쿼리 로깅 활성화
SET GLOBAL slow_query_log = 1;

-- 느린 쿼리로 간주할 실행 시간 임계값 설정 (초 단위)
-- 2초 이상 걸리는 모든 쿼리가 로그에 기록됨
SET GLOBAL long_query_time = 2;

-- 로그 파일 경로 설정
-- 주의: 해당 경로에 MySQL이 쓰기 권한을 가지고 있어야 함
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';

-- Section 2: Performance Schema 설정
-- 목적: SQL 문장 수준의 상세한 성능 메트릭스 수집

-- SQL 문장 모니터링 도구 활성화
-- NAME LIKE 'statement/%': 모든 종류의 SQL 문장을 모니터링
UPDATE performance_schema.setup_instruments 
SET 
    ENABLED = 'YES',  -- 모니터링 활성화
    TIMED = 'YES'     -- 시간 측정 활성화
WHERE 
    NAME LIKE 'statement/%';

Slow Query Log 설정값 2초라는 시간은 일반적인 기준값이지만, 여러분의 서비스 요구사항에 따라 조정할 수 있습니다. 예를 들어, 매우 빠른 응답시간이 필요한 서비스라면 이 값을 0.5초나 1초로 낮출 수 있습니다.

Performance Schema는 Slow Query Log보다 더 상세한 정보를 제공합니다. SQL 문장의 실행 시간뿐만 아니라, 리소스 사용량, 대기 시간, 락 경합 등 다양한 성능 지표를 수집합니다. 다음과 같은 상황에서 특히 유용합니다:

  • 특정 쿼리가 왜 느린지 파악할 때
  • 데이터베이스 서버의 전반적인 성능 상태를 모니터링할 때
  • 성능 병목 현상의 원인을 찾을 때

ARM 환경에서 워드프레스 성능 최적화

워드프레스를 ARM 아키텍처에서 최적의 성능으로 운영하기 위해 다음과 같은 최적화를 적용했습니다:

  • ARM 아키텍처에 맞춘 프로세스 관리
  • 메모리 제한 및 프로세스 수 최적화
  • OPcache 설정 튜닝

PHP-FPM 성능 최적화

PHP-FPM은 동적 프로세스 관리 방식을 사용하여 서버 부하에 따라 자동으로 프로세스 수를 조절합니다. 

PHP의 메모리 설정은 워드프레스 사이트의 안정성과 성능에 직접적인 영향을 미칩니다.

파일 업로드 관련 설정(post_max_size와 upload_max_filesize)은 사용자가 업로드할 수 있는 파일의 크기를 제한합니다. post_max_size를 upload_max_filesize보다 크게 설정하는 이유는 파일 업로드 시 발생하는 추가 POST 데이터(예: 파일 메타데이터)를 고려하기 위함입니다.

max_execution_time과 max_input_time은 PHP 스크립트가 실행될 수 있는 최대 시간을 제한합니다. 300초(5분)라는 값은 다음과 같은 작업을 안전하게 처리할 수 있게 해줍니다:

  • 대량의 데이터 가져오기/내보내기
  • 복잡한 데이터베이스 쿼리 실행
  • 대용량 미디어 파일 처리
;-----------------------------------------------------------------------------
; PHP-FPM 프로세스 관리자 설정
; 파일 위치: /etc/php-fpm.d/www.conf
;
; 이 설정은 서버 자원을 효율적으로 사용하면서 높은 동시성을 제공하도록 
; 설계되었습니다. 각 값은 4GB RAM, 4 코어 CPU 시스템을 기준으로 최적화되었습니다.
;-----------------------------------------------------------------------------

; 프로세스 관리 방식 설정
; dynamic: 서버 부하에 따라 프로세스 수를 자동으로 조절
pm = dynamic

; 최대 자식 프로세스 수
; 공식: (서버 총 RAM - 예약 RAM) / 평균 프로세스 RAM 사용량
; 예: (4GB - 1GB) / 60MB = ~50
pm.max_children = 50

; 서버 시작 시 생성할 프로세스 수
; 일반적으로 max_children의 10-20% 설정
pm.start_servers = 5

; 최소 유지 대기 프로세스 수
; start_servers와 동일한 값 권장
pm.min_spare_servers = 5

; 최대 유지 대기 프로세스 수
; max_children의 60-70% 설정
pm.max_spare_servers = 35

; 프로세스당 최대 요청 처리 수
; 메모리 누수 방지를 위해 주기적으로 프로세스 재시작
pm.max_requests = 500

;-----------------------------------------------------------------------------
; PHP 메모리 및 실행 시간 제한 설정
; 
; 워드프레스 플러그인과 대용량 미디어 파일 처리를 위한 최적화된 값들입니다.
;-----------------------------------------------------------------------------

; PHP 스크립트당 최대 메모리 할당량
; 워드프레스 권장: 최소 256MB
memory_limit = 256M

; PHP 스크립트 최대 실행 시간 (초)
; 대용량 파일 업로드, 백업 처리 등을 위한 설정
max_execution_time = 300

; POST 데이터 파싱 최대 허용 시간 (초)
; max_execution_time과 동일하게 설정
max_input_time = 300

; POST 요청 최대 크기
; 여러 파일 동시 업로드 고려
post_max_size = 64M

; 단일 파일 업로드 최대 크기
; post_max_size보다 작게 설정
upload_max_filesize = 32M

캐싱 시스템 구축:

각 캐시 레벨은 서로 다른 종류의 데이터를 다루며, 함께 작동하여 전체 시스템의 성능을 향상시킵니다. 컴퓨터의 메모리 계층구조(CPU 캐시 → RAM → SSD/HDD)와 비슷한 개념.

  1. WP Super Cache (페이지 레벨 캐시) 워드프레스가 동적으로 생성하는 HTML 페이지를 정적 파일로 저장합니다. 가장 높은 수준의 캐시로, 방문자가 페이지를 요청할 때 PHP 실행이나 데이터베이스 쿼리 없이 바로 저장된 HTML을 전달할 수 있습니다.
  2. Redis 객체 캐시 데이터베이스 쿼리 결과, PHP 세션, 임시 데이터 등을 메모리에 저장합니다. 이는 중간 레벨의 캐시로, 데이터베이스 부하를 줄이고 데이터 접근 속도를 높입니다.
  3. OPcache (코드 레벨 캐시) PHP 스크립트를 컴파일된 상태로 메모리에 저장합니다. 이는 가장 낮은 레벨의 캐시로, PHP 코드의 파싱과 컴파일 과정을 건너뛰어 실행 속도를 높입니다.
/**
 * WordPress 고성능 다층 캐시 시스템 설정
 * 
 * 이 설정은 세 가지 레벨의 캐시를 구성합니다:
 * 1. WP Super Cache: 페이지 레벨 캐시
 * 2. Redis: 객체 레벨 캐시
 * 3. OPcache: PHP 코드 레벨 캐시
 */

//-----------------------------------------------------------------------------
// 레벨 1: WP Super Cache 설정
// 목적: 전체 페이지 캐싱으로 데이터베이스 쿼리와 PHP 실행을 완전히 건너뛰기
//-----------------------------------------------------------------------------

// 워드프레스 캐시 기능 활성화
define('WP_CACHE', true);

// WP Super Cache 플러그인 경로 설정
define('WPCACHEHOME', '/var/www/html/wp-content/plugins/wp-super-cache/');

//-----------------------------------------------------------------------------
// 레벨 2: Redis 객체 캐시 설정
// 목적: 데이터베이스 쿼리 결과와 객체를 메모리에 저장하여 빠른 접근 제공
//-----------------------------------------------------------------------------

// Redis 서버 호스트 설정 (도커 컨테이너 이름 또는 IP 주소)
define('WP_REDIS_HOST', 'redis');

// Redis 서버 포트 설정 (기본값: 6379)
define('WP_REDIS_PORT', 6379);

// Redis 연결 타임아웃 설정 (초 단위)
define('WP_REDIS_TIMEOUT', 1);

// Redis 읽기 작업 타임아웃 설정 (초 단위)
define('WP_REDIS_READ_TIMEOUT', 1);

// Redis 데이터베이스 번호 (0-15 사이의 값)
define('WP_REDIS_DATABASE', 0);

//-----------------------------------------------------------------------------
// 레벨 3: OPcache 설정
// 목적: PHP 코드를 컴파일된 상태로 메모리에 저장하여 실행 속도 향상
//-----------------------------------------------------------------------------

// OPcache가 사용할 메모리 크기 (MB)
opcache.memory_consumption=128

// 문자열을 위한 메모리 버퍼 크기 (MB)
opcache.interned_strings_buffer=8

// 캐시할 수 있는 최대 파일 수
opcache.max_accelerated_files=4000

// 캐시된 파일의 유효성을 검사하는 주기 (초)
opcache.revalidate_freq=60

// 빠른 종료 기능 활성화
opcache.fast_shutdown=1

// CLI 환경에서도 OPcache 사용
opcache.enable_cli=1

4. 보안 설정과 모니터링 시스템 구축

보안 기본 설정

무료 티어라고 해서 보안을 소홀히 할 수는 없습니다. 

Oracle Cloud의 Security List를 활용한 방화벽 설정:

#!/bin/bash

#-----------------------------------------------------------------------------
# 리눅스 서버 보안 강화 스크립트
# 
# 이 스크립트는 다음과 같은 보안 설정을 구성합니다:
# 1. 기본 웹 서비스 방화벽 규칙
# 2. SSH 접근 제한 및 보안 강화
# 3. iptables를 통한 포트별 접근 제어
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# 섹션 1: 방화벽 기본 설정 (firewalld)
#-----------------------------------------------------------------------------

# HTTP 서비스 허용 (포트 80)
sudo firewall-cmd --permanent --add-service=http

# HTTPS 서비스 허용 (포트 443)
sudo firewall-cmd --permanent --add-service=https

#-----------------------------------------------------------------------------
# 섹션 2: SSH 보안 강화
#-----------------------------------------------------------------------------

# root 계정으로의 직접 SSH 로그인 비활성화
# 무차별 대입 공격으로부터 보호하는 중요한 설정
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# 패스워드 인증 비활성화 (SSH 키 기반 인증만 허용)
# 키 페어 인증만을 강제하여 보안을 강화
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

#-----------------------------------------------------------------------------
# 섹션 3: iptables 방화벽 규칙
# 포트별 세부적인 접근 제어를 설정합니다.
#-----------------------------------------------------------------------------

# SSH 접근 제어 - 신뢰할 수 있는 IP 대역에서만 접근 허용
# trusted_ip_range를 실제 허용할 IP 대역으로 변경해야 합니다
iptables -A INPUT -p tcp --dport 22 -s trusted_ip_range -j ACCEPT

# 그 외 모든 SSH 접근 차단
# 위 규칙에 매치되지 않는 모든 SSH 접근 시도를 차단합니다
iptables -A INPUT -p tcp --dport 22 -j DROP

# HTTP 트래픽 허용 (포트 80)
# 웹 서버로의 일반 HTTP 접근을 허용합니다
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS 트래픽 허용 (포트 443)
# 웹 서버로의 보안 HTTPS 접근을 허용합니다
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

SSL/TLS 설정

Let’s Encrypt를 활용하여 무료로 SSL 인증서를 발급받고, 자동 갱신을 설정했습니다. 이는 다음과 같은 스크립트로 관리됩니다:

#!/bin/bash

#-----------------------------------------------------------------------------
# Let's Encrypt SSL 인증서 설정 및 자동 갱신 스크립트
# 
# 이 스크립트는 다음 작업을 수행합니다:
# 1. 메인 도메인과 www 서브도메인에 대한 SSL 인증서 발급
# 2. Apache 웹 서버 설정 자동 구성
# 3. 인증서 자동 갱신 작업 예약
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# 섹션 1: SSL 인증서 발급
# certbot은 Let's Encrypt의 공식 클라이언트입니다.
# --apache 옵션은 Apache 설정을 자동으로 업데이트합니다.
#-----------------------------------------------------------------------------

# 메인 도메인에 대한 인증서 발급
# 이 과정에서 다음 작업이 자동으로 수행됩니다:
# - 도메인 소유권 확인
# - 인증서 발급
# - Apache 가상 호스트 설정 업데이트
sudo certbot --apache -d yourdomain.com

# www 서브도메인에 대한 인증서 발급
# 대부분의 사이트는 www와 non-www 버전 모두 지원해야 합니다
sudo certbot --apache -d www.yourdomain.com

#-----------------------------------------------------------------------------
# 섹션 2: 인증서 자동 갱신 설정
# Let's Encrypt 인증서는 90일간 유효하므로 정기적인 갱신이 필요합니다.
#-----------------------------------------------------------------------------

# crontab에 매월 1일 자정에 인증서 갱신 작업 추가
# --quiet: 오류가 없는 경우 출력 최소화
# --post-hook: 갱신 성공 후 Apache 서버 재시작
echo "0 0 1 * * /usr/bin/certbot renew --quiet --post-hook 'systemctl restart httpd'" | sudo tee -a /etc/crontab

종합 모니터링 시스템

클라우드 환경에서 서비스를 운영하다 보면 다양한 도전 과제를 만나게 됩니다. 제가 경험한 주요 문제들과 그 해결 방법을 공유하고자 합니다. 아래 스크립트는 디스크 공간, 메모리 상태, 웹사이트 접근성만을 체크하며, 매일 한 번만 실행하도록 설정합니다. 대부분의 소규모 워드프레스 사이트에는 이 정도의 모니터링으로도 충분할 수 있습니다.

#!/bin/bash
# simple_monitor.sh

# 기본적인 시스템 상태만 체크
LOG_FILE="/var/log/wp_simple_monitor.log"

# 하루에 한 번만 실행
echo "=== Daily Check: $(date) ===" >> $LOG_FILE
df -h | grep '/var/www' >> $LOG_FILE
free -m | grep 'Mem:' >> $LOG_FILE
curl -sL http://yourdomain.com -o /dev/null -w "%{http_code}\n" >> $LOG_FILE

5. 워드프레스 백업 및 자동화 구현 방안

백업 스크립트 작성

#!/bin/bash
# WordPress 백업 및 유지보수 스크립트

# 기본 설정
BACKUP_DIR="/backup"
WP_DIR="/var/www/html"
DB_NAME="wordpress_db"
DB_USER="wordpress_user"
DB_PASS="your_password"
LOG_FILE="/var/log/wordpress_backup.log"

# 로그 기록
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# 데이터베이스 백업
backup_db() {
    local DATE=$(date +%Y%m%d_%H%M%S)
    local BACKUP_FILE="$BACKUP_DIR/db_backup_$DATE.sql.gz"
    
    mysqldump --single-transaction \
        --quick \
        "$DB_NAME" | gzip > "$BACKUP_FILE"
    
    if [ $? -eq 0 ]; then
        log "DB 백업 완료: $BACKUP_FILE"
    else
        log "DB 백업 실패"
    fi
}

# 파일 백업
backup_files() {
    local DATE=$(date +%Y%m%d_%H%M%S)
    local BACKUP_FILE="$BACKUP_DIR/files_$DATE.tar.gz"
    
    tar -czf "$BACKUP_FILE" \
        --exclude="*/cache/*" \
        --exclude="*/uploads/backups/*" \
        "$WP_DIR/wp-content"
    
    if [ $? -eq 0 ]; then
        log "파일 백업 완료: $BACKUP_FILE"
    else
        log "파일 백업 실패"
    fi
}

# 메인 실행
mkdir -p "$BACKUP_DIR"
backup_db
backup_files

백업 자동화

# 1. 백업 스크립트 설치 및 권한 설정
sudo mkdir -p /opt/wordpress/scripts
sudo cp backup_and_maintenance.sh /opt/wordpress/scripts/
sudo chmod +x /opt/wordpress/scripts/backup_and_maintenance.sh

# 2. 로그 디렉터리 설정
sudo mkdir -p /var/log/wordpress
sudo chown www-data:www-data /var/log/wordpress

# 3. 로그 순환 설정 (/etc/logrotate.d/wordpress-backup)
/var/log/wordpress/backup.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
}

# 4. Cron 작업 설정
# /etc/cron.d/wordpress-backup
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 데이터베이스 백업 - 매일 새벽 3시
0 3 * * * www-data /opt/wordpress/scripts/backup_and_maintenance.sh --type=database >> /var/log/wordpress/backup.log 2>&1

# 전체 파일 백업 - 매주 일요일 새벽 4시
0 4 * * 0 www-data /opt/wordpress/scripts/backup_and_maintenance.sh --type=files >> /var/log/wordpress/backup.log 2>&1

# 유지보수 작업 - 매주 월요일 새벽 2시
0 2 * * 1 www-data /opt/wordpress/scripts/backup_and_maintenance.sh --type=maintenance >> /var/log/wordpress/backup.log 2>&1

# 5. 백업 모니터링 알림 설정 (/opt/wordpress/scripts/check_backup.sh)
#!/bin/bash

BACKUP_DIR="/backup"
LOG_FILE="/var/log/wordpress/backup.log"
ADMIN_EMAIL="[email protected]"

# 최근 24시간 내의 백업 파일 확인
recent_backups=$(find $BACKUP_DIR -type f -name "*.sql.gz.enc" -mtime -1 | wc -l)

if [ $recent_backups -eq 0 ]; then
    echo "경고: 지난 24시간 동안 새로운 백업이 생성되지 않았습니다." | \
    mail -s "WordPress 백업 경고" $ADMIN_EMAIL
fi

# 백업 로그에서 오류 검사
if grep -i "error\|failed\|실패" $LOG_FILE | grep -v "grep" > /dev/null; then
    echo "경고: 백업 로그에서 오류가 발견되었습니다." | \
    mail -s "WordPress 백업 오류" $ADMIN_EMAIL
fi

🌟 결론

Oracle Cloud 무료 티어와 ARM 서버를 활용한 워드프레스 구축은 비용 효율적이면서도 강력한 성능을 제공합니다. 이 가이드에서 다룬 주요 포인트들:

  1. ARM 서버의 효율적인 활용
  2. MySQL HeatWave의 엔터프라이즈급 성능 확보
  3. 체계적인 성능 최적화 전략
  4. 견고한 보안 체계 구축
  5. 미래를 대비한 확장 가능한 아키텍처

모든 설정과 구성은 실제 프로덕션 환경에서 검증된 것들입니다. 각자의 환경에 맞게 적절히 수정하여 활용하시길 바랍니다.

📝 참고 자료

이 가이드는 2025년 1월 기준 Oracle Cloud Infrastructure의 최신 기능을 바탕으로 작성되었습니다. 서비스 정책은 변경될 수 있으니 최신 정보는 공식 문서를 참조해 주시기 바랍니다.

관련 글: 워드프레스 성능 최적화 가이드 | MySQL HeatWave Autopilot Indexing

#OracleCloud #FreeTier #클라우드컴퓨팅 #워드프레스 #ARM #MySQL #DevOps #테크블로그

Similar Posts

답글 남기기

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