워드프레스 마이그레이션
지인 부탁으로 관리해주고있는 cafe24에서 호스팅 중인 저가 워드프레스 사이트 용량이 이제 100mb가 다차서…
고민하다 home-k8s로 이관 하기 전 테스트 작업 중 발생한 이슈.관리형보다 구축형이 좋은점은 일단 업그레이드나 plugin등 연동시 장애가 발생해도 되돌리기 좋음…그리고 쿠버네티스로 하는건 모니터링하고 백업등 편하게 하려고 쿠버네티스로 이관.

OverView
카페24에서 호스팅 중인 사이트를 홈 쿠버네티스로 이관하는 작업.
진행 절차
데이터 이관 작업
- 카페 24에서 mysqldump로 데이터베이스를 백업 및 저장
- 워드프레스 데이터 백업 및 저장
- 카페 24 도메인서버 → NHN Cloud DNS서버로 이관.
- SSL 인증서 → Oracle Cloud VM(HAProxy)로 이관.
인프라 구성
NHN Cloud DNS
- HAProxy 쪽으로 가도록 A record 설정.
- cname record 설정.
OracleCloud VM(HAProxy)
- Home HAProxy VM으로 가도록 backend 설정.
- wp-admin deny 정책 설정(추후 경로 변경도 가능.).
- url 라우팅 설정.
- SSL Offloading 설정.
Home VM(HAProxy)
- Kubernetes Ingress로 가도록 backend 설정.
- url 라우팅 설정.
Home NAS(MariaDB)
시놀로지 nas에서 동작중인 MariaDB에 Database Restore 진행.
데이터베이스 생성
mysql접속 후 ${db_name} 이름의 데이터 베이스 생성.
데이터베이스 복원
mysql -u ${account} -p -h ${ip_address} --database=${db_name} < demo.dump
복원이 되었으면 복원여부 확인 테이블 생성 등…
쿠버네티스 환경 구성
Ingress 설정
- 도메인 라우팅설정 80 오프로딩 설정.
PVC 생성
스토리지클래스 지정해서 동적 PV로 할당
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
icurfer: demo
name: wp-demo
namespace: demo
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
storageClassName: hm-nas
resources:
requests:
storage: 10Gi
Deployment 및 Service 생성
참고용으로 작성함…실적용 다름.
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: demo
- name: WORDPRESS_DB_PASSWORD
value: "demo"
- name: WORDPRESS_DB_USER
value: "demo"
- name: WORDPRESS_DB_NAME
value: "demo"
ports:
- containerPort: 80
name: wordpress
resources:
limits:
cpu: 1000m
memory: 1024Mi
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-demo
배포
kubectl apply -f wp.yaml
접속 확인
데이터베이스는 연동되었으나 워드프레스 데이터가 없으므로,
최초 접속시 아무것도 안나올 수 있음…
kubectl delete -f wp.yaml
데이터 이관 적용
bastion 서버에서 pv가 설정된 nas마운트를하고 cafe24에서 백업받은 워드프레스 데이터를 이관함.
pv가 생성된 권한을 참고한여 맞춰주면된다. 나같은 경우는 www-data로 해결됨.
적용되었으면 재배포
kubectl apply -f wp.yaml
확인
접속하면 예전과 같은 화면을 볼수가 있을수도 있고 없을수도있다…
본인의 경우 css가 다 제거되서 나왔음…
실작업 및 트러블 슈팅
구성 환경
revers-proxy로되어있는구조이므로 wp-config.php에서 설정이좀 필요하다.
wp-admin도 접속이 안될 것이며 아래와 같은 설정이 필요. 상세한 정보는 구글 검색을 추천한다.
(nginx 사용할때 x-forward-xxx로도 해결되는경우도있어서 ingress로 처리 가능 할수도 있음.)
define('FORCE_SSL_ADMIN', true);
define('RELOCATE', TRUE);
$_SERVER['HTTPS'] = 'on';
define('WP_HOME','https://demo.com');
define('WP_SITEURL','https://demo.com');
기존 사이트와 url이 변경되었으면 Database에서도 설정이 필요할수도 있음.
wp_options 테이블의 option_name 필드 값 중 siteurl과 home을 위의 ‘WP_HOME’, ‘WP_SITEURL’과 맞춤.
css 안되는 경우
url 주소가 안맞아서 발생하는 문제. 위에 작성된
구성환경
설정을 적용하면 웬만하면 해결될 것으로 예상됨.
플러그인
Kborad 플러그인
기존 킹콩보드가 더이상 서비스 되지 않아 변경…
Ultimate Form Builder Lite(메일)
검색하는데 안나와서 wp form lite로 대체…
참고자료
plugin ownership
플러그인 설치 중 발생한 오류. 이미 위에 작업중 권한 설정이 되어서 문제없을 것이다. 테스트할때 순서없이 하고 정리하는 중이라 작성함.
cd /data/wp-demo/wp-content
chown -R www-data:www-data uploads
Ingress 413 에러
Ingress 업로드 용량제한 해제 필요. HAProxy도 설정해야되나 고민했는데 다행히 Ingress에서 해결됨 워낙에 여러 테스트하면서 HAProxy설정상태가 난잡하다…
# annotations 참고.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
name: docker-registry
namespace: docker-registry
spec:
pod 배포중 권한 이슈
nas를 이용한 pvc연결시 nas 진입해서 권한확인.
smtp 연동
구글 연동 중 권한문제 발생시…OAuth 동의화면에서 설정필요.

db 백업 crontab
비밀번호 등록
vi /etc/mysql/conf.d/mysqldump.cnf
[client]
user=${계정}
password="${비밀번호}"
# 따옴표 중요.
crontab 등록
crontab -e
51 23 * * * mysqldump -u ${account} -h ${ip_address} ${db_name} > ${directory}/$(date +\%Y\%m\%d)_${db_name}.sql
후기
처음에 금방 끝날 거라 생각하고 했는데 예상외로 좀 걸렸습니다…특히 플러그인에서 서비스 종료된 것들도있고 카페24같은 managed서비스가 아니라 smtp설정도좀 필요하고 해야 될것들이 좀 많았네요…백업 정책도 걸어야되고ㅎㅎ
어떻게 구성하는지는 부분부분 빠진 내용이 있을수 있으나, 전체적인 흐름을 이해하는데 도움이 되었으면 좋을 듯 합니다. 중간중간 이해가 안되는 단어는 검색도좀 해보면서 학습하면 좋을 듯 합니다.