in 소프트웨어 개발

워드프레스 사이트 다른 클라우드로 옮기기

기존 호스팅 서버에서 다른 클라우드 컴퓨팅 엔진(Vultr)으로 옮겨달라는 요청을 받았다.

보통 워드프레스는 migration 플러그인들이 많기 때문에 (대표적으로 duplicator) 쉽고 빠르게 할수 있지만, 원본과 이전 대상 호스팅의 개발환경 때문에 충돌나는 경우가 많다.
이 경우엔 Duplicator 플러그인을 통해 생성한 페이지가 데이터베이스와 접근할수 없어 직접 서버 수준에서 옮기기로 했다.
(지금 생각해보니 미처 Duplicator 플러그인이 생성한 페이지와 압축파일을 Nginx에 소유권을 등록하지 않아 해당 페이지에서 php 작성이 불가능 했던것 같은데.. 뭐 이미 지금은 다른 방법으로 모두 옮긴 뒤다)

미리 웹호스팅용으로 세팅되는 국내 호스팅을 사용할거라면 그냥 duplicator를 사용하거나, 한국어가 통하는 서비스 담당자에게 옮겨달라 하면 옮겨주니 그쪽이 빠르다.

이 글은 https://www.vultr.com/docs/migrate-your-wordpress-site-from-a-shared-host-to-vultr 를 조금 풀어 옮긴 것이다.

준비

  • 옮기려는 서버에 미리 워드프레스를 위한 솔루션 준비
    1. 대부분의 클라우딩 컴퓨트 서비스들이 워드프레스 프리빌트 배포를 지원하니 미리 워드프레스를 위한 설정을 다 해놓는 솔루션을 사용해서 Deploy후 워드프레스 기본 셋업만 해놓는다.
    2. 데비안이나 센트OS를 Deploy하고 LEMP나 LAMP를 설치하여 직접 서버 세팅을 해도 된다. 다만 귀찮고 이 페이지에선 프리빌트 솔루션을 사용하는 것을 기본 전제로 한다.
  • 원본 서버의 워드프레스 데이터 베이스 백업:
    원본 사이트가 phpmyadmin 을 사용한다면, 해당 페이지에서 쉽게 export 메뉴를 통해 워드프레스 정보를 담은 (보통 wp로 이름이 시작되는 테이블들을 가지고 있다) 데이터베이스를 익스포트 하면 된다.
    혹은 해당 호스팅 서비스에서 제공하는 ssh 콘솔로 mysql 명령어를 통해 sql 파일을 내부에 익스포트한다.
    익스포트된 sql 파일을 웹통신으로 접근 가능하도록 html 하위 경로 어디 한구석에 외부에서 접근가능한 권한(644 등)으로 짱박아둔다.
  • 원본 서버의 워드프레스 파일 백업
    wp-content 폴더만 백업해도 충분하다.
    해당 폴더를 files.tar.gz 형태로 압축후 마찬가지로 html 하위 경로 구석에다 짱박아 둔다.
  • 백업한 데이버베이스와 해당 폴더를 타겟 서버에서 콘솔을 통해 해당 서버로 다운로드 받는다.
    cd ~
    wget http://www.yourdomain.com/wpdatabase.sql
    wget http://www.yourdomain.com/files.tar.gz

    보안을 위해 파일 전송이 끝난후 원본 서버에서 꼭 해당 파일들을 지워준다.

대상 서버 업데이트

대상 서버에서 아래 명령어로 시스템을 업데이트한다.

sudo yum update -y

이후 해당 서버의 워드프레스의 관리자 패널에서 워드프레스를 최신버전으로 업데이트 한다.

대상 서버의 데이터 베이스 교체

대상 서버의 데이터 베이스를 수정 할수 있는 유저로 로그인해야 한다.

 

Vultr에서는 root 계정을 제공했기에 (리눅스의)root 계정으로 로그인한 콘솔에서 아래의 명령어로 기본 mysql  관리자 인증서를 열어 mysql 의 root 계정의 패스워드를 얻을수 있었다.

sudo cat /root/.my.cnf

이후 해당 계정으로 mysql에 로그인하여 셸을 띄운다.

mysql -u root -p

SHOW DATABASES; 를 입력하여 데이터베이스 리스트를 띄운후, 이름을 통해 타겟 사이트에서 워드프레스용으로 사용중인 데이터 베이스를 찾는다. 보통 wp나 wordpress 등으로 이름이 시작하거나, 혹은 사용자의 아이디로 지정되 있을수도 있다.

여기선 리스트중 wp9968857 라고 하자. 현재 사용중인 데이터베이스를 wp9968857로 지정한다.

USE wp9968857;

이후 기존 데이터베이스에 있는 아래 12개의 워드프레스용 테이블들을 지운다

USE wp9968857;
DROP TABLE wp_commentmeta; DROP TABLE wp_comments; DROP TABLE wp_links; DROP TABLE wp_options; DROP TABLE wp_postmeta; DROP TABLE wp_posts; DROP TABLE wp_term_relationships; DROP TABLE wp_term_taxonomy; DROP TABLE wp_termmeta; DROP TABLE wp_terms; DROP TABLE wp_usermeta; DROP TABLE wp_users;

이후 앞서 wget을 통해 로컬에 저장해둔 원본사이트 백업 sql 데이터로 채워준다.

SET NAMES 'UTF8';
SOURCE ~/wordpress.sql
EXIT;

백업 파일로 대상 서버에 복원

먼저 wget을 통해 앞서 홈폴더에 받았을 백업 파일 (여기선 files.tar.gz)를 압축 해제한다.

cd ~
tar -zxvf ~/files.tar.gz -C ~

이제 wp-content 폴더가 홈폴더에 압축 해제되어 존재한다. 먼저 보안을 위해 적절한 권한 설정을 해야 한다.

일단 권한 없음 에러를 방지하기 위해 wp-content 폴더와 그 하위 모든 파일과 폴더들을 nginx 소유로 지정해준다.

sudo chown -R nginx:nginx wp-content

그리고 wp-content 파일들의 접근권한을 알맞게(755) 지정해준다.

sudo chmod 755 wp-content
cd wp-content
find ./ -type d -print | sudo xargs chmod 755
find ./ -type f -print | sudo xargs chmod 644

그리고 대상 서버의 기존 워드프레스 파일들이 있던 html 폴더로 원본 사이트의 wp-content를 옮긴다. (기존것들은 이름을 바꾸어 백업을 해주었다)

sudo mv D:\home\site\wwwroot/wp-content /var/www/html/backup-wp-content
sudo mv ~/wp-content D:\home\site\wwwroot/wp-content

이후 서버를 재시작한다.

sudo shutdown -r now

DNS 세팅

만약 대상 서버의 도메인과, 원본 서버에서 워드프레스 설정에서 지정한 도메인이 다르다면 접속할수 없다.

특히 원본 서버에서는 도메인을 구매하지 않아, 도메인 설정에 직접 IP를 할당해두었던 경우가 그렇다. 이 경우 터미널이나 myphpadmin으로 mysql에 접속한다. 그리고 워드프레스의 데이터베이스에 접근하여 옵션 테이블(wp_options, prefix 설정에 따라 wp_는 다를수 있음)에서 siteurl과 home 에 지정된 값을 대상 서버의 도메인으로 바꿔주면된다.

%ec%8a%a4%ed%81%ac%eb%a6%b0%ec%83%b7-2016-09-10-00-19-13

그리고 마찬가지로 도메인 서비스 제공자에서도 옮겨간 서버에 맞게 알맞은 DNS A records 설정을 해주도록 하면 워드프레스 옮기기는 끝이다.

  • sdk

    서버이전 작업 예정 중인데 꼭 필요한글이네요.
    새로운 도메인에 새로이 워드프레스만 설치해 놓은 상태입니다.
    퇴근 이후에 이 글 보고 천천히 따라해 봐야겠습니다.
    감사합니다.