티스토리 탈출해서 워드프레스 구축하기 2025년 10월 최신판 (3)

3편: 워드프레스 서버 우선 환경 세팅과 기본 운영 준비

이번 글에서는 도메인 연결, 시간 설정, 스왑 메모리 설정부터 Docker 기반의 워드프레스 컨테이너 구성까지, 꼭 필요한 초기 작업들을 순서대로 정리했습니다.

1. 도메인 주소와 고정 IP 연결

  • 오라클 클라우드에서 예약한 고정 퍼블릭 IP를 도메인에 연결해 트래픽이 서버로 정확히 흐르도록 설정합니다.
  • DNS A 레코드에 고정 IP 주소를 입력합니다.
  • 클라우드 플레어 대시보드에서는 DNS – 레코드에서 레코드 추가를 통해 진행이 가능합니다.

2. 서버 타임존(TimeZone) 설정

  • 서버 시간과 한국 시간(KST)을 맞춰 운영과 로그 분석에 혼동이 없도록 합니다.
sudo timedatectl set-timezone Asia/Seoul
timedatectl

3. 스왑 메모리 설정

  • 서버 메모리가 부족할 때를 대비해 스왑 메모리를 설정해 안정적 운영을 도모합니다.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'

4. 패키지 업그레이드

sudo apt update
sudo apt upgrade

5. Docker & Docker Compose 설치

  • 워드프레스와 데이터베이스를 컨테이너로 편리하게 관리하기 위해 Docker와 Docker Compose를 설치합니다.
curl -fsSL https://get.docker.com/ | sudo sh
sudo usermod -aG docker $USER
sudo apt install -y docker-compose

6. 작업 디렉터리 생성 및 구성 파일 준비

mkdir -p ~/wordpress-docker/nginx/conf.d
mkdir ~/wordpress-docker/certs
cd ~/wordpress-docker
vim docker-compose.yml

5. docker-compose.yml 작성

  • 워드프레스 및 MariaDB 컨테이너 구성 파일 작성
  • example_root_pw, example_wp_pw, DATABASE 이름과 USER 이름 변경하여 사용

예시:

services:
db:
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: example_root_pw
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: example_wp_pw

wordpress:
image: wordpress:latest
depends_on:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: example_wp_pw
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_files:/var/www/html
# - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certs:/etc/nginx/certs
depends_on:
- wordpress

volumes:
db_data:
wordpress_files: {}

6. default.conf HTTP용 간단 설정

  • Nginx 컨테이너 기본 구성으로 HTTP만 사용하는 동안 적용할 설정 파일 예시
  • nginx/conf.d/default.conf
  • server_name은 도메인 주소로 변경
vim default.conf

server {
listen 80;
server_name 도메인주소.com;

# HTTPS로 리다이렉트 중단 (임시)
# return 301 https://$host$request_uri;

location / {
proxy_pass http://wordpress:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

# SSL 설정 부분 주석 처리
# server {
# listen 443 ssl;
# server_name 도메인주소.com;

# ssl_certificate /etc/nginx/certs/fullchain.pem;
# ssl_certificate_key /etc/nginx/certs/privkey.pem;
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;

# client_max_body_size 100M;

# location / {
# proxy_pass http://wordpress:80;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
# }

7. 클라우드플레어 인증서 미사용 초기 설정

  • 초기 서비스 중 인증서 충돌 방지를 위해 클라우드플레어 SSL/TLS 개요에서 구성 버튼을 클릭하여 사용자 지정 SSL/TLS에서 끄기(안전하지 않음)으로 변경하여 저장합니다.

8. iptables 방화벽 설정

  • 80번과 443번 포트를 개방하여 줍니다.
# 80번 포트 개방 http
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
# 443번 포트 개방 https
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
# 재부팅시에도 적용 되도록 저장
sudo netfilter-persistent save
# 리로드
sudo netfilter-persistent reload
# 개방된 포트 확인
sudo iptables -L

9. 워드프레스 업로드 설정

  • upload.ini를 만들어, 아래 내용으로 저장합니다.
 vim uploads.ini
file_uploads = On
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 600
  • docker-compose.yml 에서 주석 처리를 제거합니다.
    volumes:
- wordpress_files:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
docker compose down
docker compose up -d

9. 도메인 주소로 워드프레스 기본 설정

  • 도메인 주소로 접속
  • 워드프레스 관리자 → 설정 → 일반에서
  • ‘워드프레스 주소(URL)’와 ‘사이트 주소(URL)’를 도메인 주소로 변경하여
  • IP가 아닌 도메인 주소로 접속이 되게 합니다.
  • 들어간 김에 시간대도 서울로 바꿔줍니다.

다음 편 예고

다음 시간에는 웹 보안 강화를 위한 HTTPS 적용 과정 및 인증서 자동 갱신 등을 다룹니다.

Similar Posts

답글 남기기

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