개요
워드프레스 사용 중 불편함을 느껴 블로그를 고스트로 이전했습니다. 마이그레이션 과정을 가이드 형식으로 작성해 보겠습니다.
고스트 공식 가이드에서는 뚝딱 하면 순식간에 이루어지는 것처럼 써져있는데, 실제론 트러블슈팅 그 자체 였습니다 =ㅅ=.
Docker로 고스트 설치하기
고스트는 docker compose로 간단하게 설치할 수 있습니다.
services:
ghost:
image: ghost
restart: always
ports:
- 8080:2368
environment:
# see https://ghost.org/docs/config/#configuration-options
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: "password"
database__connection__database: ghost
# this url value is just an example, and is likely wrong for your environment!
url: http://IP:8080
# contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
#NODE_ENV: development
volumes:
- /path/to/content:/var/lib/ghost/content
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- /path/to/db:/var/lib/mysql
설치 후엔 url에 입력한 IP:8080로 접속하면 됩니다.
최초 접속 시 초기설치로 인해 잠시 아래와 같은 이미지가 나타납니다.
관리자 계정 생성은 직관적으로 할 수 있으므로 생략하겠습니다.
데이터 마이그레이션하기
데이터 추출
워드프레스 플러그인에서 ghost로 검색해서 플러그인을 설치합니다.
플러그인 목록에서 Export를 클릭하면 Ghost플러그인에 진입할 수 있고
아래처럼 간단한 화면을 만날 수 있습니다.
Download Ghost File을 클릭합니다.
블로그 내에 있는 이미지를 포함해 데이터를 압축해서 내려주므로 시간이 조금 걸립니다. 인내심을 갖고 기다리면 아래와 같은 압축 파일을 다운받을 수 있습니다.
json폴더 내부에 wp_ghost_export.json파일이 있습니다. 해당 파일을 압축해제 합니다. 아래 단락에서 이 폴더의 URL구조를 수정해야 합니다.
데이터 수정
위에서 압축해제한 JSON파일을 열면 아래처럼 외계어가 한가득 나타납니다.
wp-content를 검색해 봅니다.
아래처럼 URL형식이 보입니다.
보이시나요..?
글자와 글자 사이에 \가 5개나 들어가 있는데, 이 부분을 제외하고 본다면, 아래처럼 워드프레스 포스트에 삽입된 특정 이미지 주소가 나타납니다.
- https://fenta.cc/wp-content/uploads/2024/08/image-15.png
이 주소를 아래와 같은 형식으로 바꿔야 합니다.
- https://fenta.cc/content/images/wordpress/2024/08/image-15.png
사용하려는 도메인까지 변경되었다면, 변경되는 도메인도 반영해야겠지만, 저는 도메인은 그대로, 서비스만 이전하기 때문에 도메인 하위 경로만 변경하면 됩니다.
즉, wp-content/uploads를 content/images/wordpress로 변경하면 됩니다. 근데 특수문자가 하나 들어갈때마다 역슬래쉬가 5개씩 있었으니
- wp-content\\\\\/uploads를 찾아서
- content\\\\\/images\\\\\/wordpress로 변경하면 됩니다.
VSCode에서는 Ctrl + H로 찾아 바꾸기를 사용하실 수 있습니다.
이렇게 저장한 파일을 다시 압축 파일에 넣어서 재압축해주시면 됩니다(기존 파일 덮어쓰기).
이렇게 함으로써, 다운받은 압축 파일 내 이미지 경로와 JSON파일 내 이미지 경로를 일치시켜 마이그레이션을 할 수 있습니다.
데이터 마이그레이션
고스트 블로그 Admin페이지로 이동합니다. 접속URL/ghost로 이동해서 톱니바퀴 모양의 아이콘을 클릭합니다.
Advanced - import/Export 클릭 후 Universal import를 클릭합니다.
아래와 같은 팝업이 나타나는데, 위에서 다운받은 wp_ghost_export.zip 파일을 끌어다 놓거나 팝업을 클릭해서 파일을 선택하는 방식으로 넣어 줍니다.
아래와 같은 창이 나타나고, 잠시 기다리고 나면 import 과정이 끝납니다.
이후 Posts등을 확인해보면 기존 글이 모두 마이그레이션 된 것을 확인할 수 있습니다.
포스트 작성을 위해 테스트용 로컬 홈서버에 한차례 더 마이그레이션을 한 결과 글이 2개씩 보이긴 하지만, 큰 이상 없이 마이그레이션을 마쳤습니다.
백업 스크립트 작성하기
이전 글에서 워드프레스 폴더를 통째로 백업하는 방법을 사용하고 있었습니다.
2025.01.22 - [Apps] - 오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
개요1년도 더 전에 오라클 프리티어 A1을 만들어두고 구글 드라이브 무제한과 연동한 노하드 Plex 라이브러리를 구축하려 했으나, 구글의 통수를 씨게 얻어맞은 후로, 오라클 프리티어를 마땅히
worklazy.net
압축한 파일은 rclone을 통해 구글 드라이브에 올리고, 로컬 홈서버에서 이를 다시 떠가는 방식으로 이중백업을 하고 있었죠.
구글 드라이브에 올리기 위한 스크립트를 일부 수정해서 그대로 사용하겠습니다.
이를 활용한 2차 백업 및 로컬 테스트 환경 생성은 이전 글을 참조해 주세요.
#!/bin/bash
# 백업 디렉토리 설정
backup_dir="/data/ghostbackup"
# 고스트 설치 디렉토리 설정
ghost_dir="/docker/ghost"
# 백업 파일 이름 생성
ghost_file="ghost_$(date +%Y%m%d_%H%M%S).tar.gz"
# 백업 파일을 저장할 서버 정보
backup_server_host="gd:"
# 백업함수
backup_ghost() {
echo "Job start!"
sudo tar -zcf "$backup_dir/$ghost_file" "$ghost_dir/" -P
}
# 30일 경과 파일삭제 함수
backup_del_30() {
echo "Removing backup files > 30 days"
sudo find "$backup_dir" -name "ghost_*" -mtime +30 -exec rm {} \;
}
# 구글 드라이브 동기화함수
backup_web_sync() {
echo "Syncing Google drive"
rclone sync "$backup_dir" "$backup_server_host" --metadata --verbose
}
# 함수 호출
run_backup() {
backup_ghost
backup_del_30
backup_web_sync
}
run_backup
문제 해결(Trouble-Shooting)
Unsupported file type
뭐든 한 방에 되는 법이 별로 없습니다 =ㅅ=;
좌측 하단에 스크린샷처럼 Request contains an unknown or unsupported file type.이라는 에러 문구가 나타나면서 파일을 뱉는 경우가 있습니다.
이 경우 압축 파일에서 JSON을 분리해서 두 번의 과정을 거쳐야 합니다.
JSON파일을 압축해제해서 JSON파일만 먼저 import해주면, 적은 용량의 파일이라 문제 없이 바로 import를 수행할 수 있습니다.
이후, 압축 파일에서 json폴더를 삭제해서 아래와 같이 만든 후,
해당 압축 파일을 업로드해주면 에러 없이 마이그레이션이 진행됩니다.
한 번에 이루어지던 과정을 1)이미지, 2)post로 나누어 마이그레이션 하는 겁니다.
403 Forbidden 에러 발생 시
클라우드플레어 터널을 이용한 환경에서 아무리 업로드를 기다려도 진행되지 않는 경우, 개발자 도구에서 에러메세지를 확인하면 Admin API에 접근하지 못해(403) 진행이 안되는 경우가 있습니다.
이 경우, docker compose에서 URL을 도메인 형식이 아니라 IP로 수정하고 IP:Port로 직접 접속하면 문제가 사라집니다. 마이그레이션이 완료되면 컨테이너를 종료 후 다시 environment의 url을 도메인으로 수정하고 실행해 줍니다.
관련 글
2025.01.22 - [Apps] - 오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
개요1년도 더 전에 오라클 프리티어 A1을 만들어두고 구글 드라이브 무제한과 연동한 노하드 Plex 라이브러리를 구축하려 했으나, 구글의 통수를 씨게 얻어맞은 후로, 오라클 프리티어를 마땅히
worklazy.net
2025.01.23 - [Apps] - 워드프레스 이미지 클릭 시 확대 기능 자동활성화하기
워드프레스 이미지 클릭 시 확대 기능 자동활성화하기
개요워드프레스로 글을 작성할 때, 이미지를 삽입하게 되는데, 해당 이미지의 속성에서 Expand on Click이 있습니다. 해당 속성을 활성화해주지 않으면, 글을 읽는 사람은 이미지가 작아 클릭해 확
worklazy.net
출처
1. https://ghost.org/docs/migration/wordpress/
Official guide: How to migrate from WordPress to Ghost
Everything you need to know about working with the Ghost professional publishing platform.
ghost.org