Ghost 블로그 도메인 변경

Ghost 블로그 운영중 도메인을 변경하게 되었다. AWS 환경에서 새로운 도메인을 적용하기 위해 어떤 과정으로 완전히 도메인 마이그레이션 했는지 소개한다.

Ghost 블로그 도메인 변경
Photo by Markus Spiske / Unsplash

블로그 도메인 변경을 했다. 기존에는 blog.sungkwang.dev 였는데, 블로그가 너무 기술적인 내용만 가지고 있는 느낌을 줘서 좀 더 개인 사이트적인 느낌이 나도록 blog.sungkwang.me 도메인으로 변경했다. .com 이나 .net 으로 만들고 싶기도 했지만 회사규모도 아니고 개이적인 온라인 공간으로 .me 가 적당하다고 생각했다.

도메인을 변경하면 해야할 일들이 많다. 인터넷에서 도메인 기반으로 사이트를 찾을 수 있기 때문에 관련된 부분을 모두 변경해야한다. 우선 검색엔진에 등록된 부분들은 향후 검색엔진에서 제거될 것으로 위임했다. 명시적으로 삭제 요구를 해도 되지만... 개인 블로그가 뭐 그렇게 영향력 있는것도 아니고 시간이 지나면 자연적으로 인덱스에서 제외될 것이다. 몇 달 후에도 여전히 검색이 된다면 삭제 요청을 할 예정이다.

문제는 서버에 설정된 도메인 정보를 모두 수정해야한다. 수정해야할 부분은 크게 다음과 같다.

  • 변경할 도메인 구입
  • 네임서버 지정
  • Domain Name Server 에 도메인 등록
  • SSL 인증서 생성
  • Ghost 설정에서 도메인 변경

도메인 구입

도메인 구임은 간단하다. 국내에서 구매할 경우 가장 인지도 있는 후이즈나 가비아에서 구입하면 된다. 최근에는 AWS Route53에서도 바로 구입할 수 있다. 나는 기존에 가비아를 사용하고 있어서 가비아를 통해 sungkwang.me 도메인을 구매했다.

네임버서 지정

가비아를 통해 도메인을 구매했지만 운영은 AWS에서 운영하기 위해서 AWS Name Server를 가비아 NS에 등록했다. 가비아와 AWS Route53 과 연동하는 블로그 글이 많기 때문에 내용은 생략한다.

Domain Name Server 에 도메인 등록

가비아와 AWS Route53 연동을 했다면 앞으로 Route53을 통해서 도메인을 관리하면 된다. Ghost를 운영하는 서버는 AWS Lightsail 인데 Route53에 Lightsail의 static IP를 바로 등록해도 된다. 기존에 블로그는 이렇게 사용했는데, 이번 아키텍처는 AWS WAF를 이용한 보안과 캐싱에 대해서 추가적인 구성을 만들었다. 그래서 AWS Cloudfront를 사용하기로 했다.

AWS Cloudfront 에 Distribution 등록

예전에는 AWS WAF는 유료로 사용만 되었는데 지금은 무료로 사용하는 플랜이 생겼다. 포함된 항목을 보면 안할 이유가 전혀없다. 실제 사이트를 운영할 때 필요한 보안 항목이 모두 포함되어 있는데 무료로 시작할 수 있다.

AWS Lightsail에서 AWS WAF를 바로 사용할 수 없다. 그래서 반드시 Cloudfront의 Origin으로 등록해서 사용해야한다. 이번에 설정에서 Free Plan을 사용해보기 위해서 Free Plan을 설정했다.

이렇게 설정하면 무료이지만 아래와 같이 무료로 웹 공격을 확인할 수 있다.

SSL 인증서

AWS Lightsail에 운영할 때는 https 서비스를 위해서 Let's encrypt의 무료 인증서를 사용했었는데 매년 갱신해야하는 번거러움이 있고 AWS 서비스에 인증서 관리 기능이 있어서 AWS Certificate Manager를 이용하여 인증서를 만들어서 AWS Cloudfront 에 연결했다. AWS 인증서는 자동으로 갱신되기 때문에 한번 인증서를 만들어서 연결하면 계속 사용할 수 있다.

Ghost 설정 파일 수정

새로운 도메인을 적용하기 위해서 Ghost의 설정파일에 도메인 주소를 수정한다. Ghost 디렉토리에 있는 config.production.json 파일의 url 속성을 수정한다.

{
  "url": "https://blog.sungkwang.me",
  ...,
}

만약에 데이터베이스 이름이 도메인으로 되어 있을 경우는 데이터베이스 명을 변경하고 데이터베이스 명도 수정한다. 아마 최초 Ghost를 설치할 경우 도메인 기반으로 데이터베이스가 만들어지기 때문에 blog_sungkwang_dev_prod 라는 데이터베이스가 만들어진 것을 확인할 수 있다. 데이터베이스명을 변경하기 위해서 blog_sungkwnag_dev_prod를 덤프로 백업 받고 새로운 blog_sungkwang_me 데이터베이스를 만들어서 임포트 했다.

sudo mysqldump -u root -p blog_sungkwang_dev_prod > /tmp/ghost_backup.sql
sudo mysql -u root -p blog_sungkwang_me < /tmp/ghost_backup.sql

다음은 데이터베이스에 저장된 데이터에 안에서 blog.sungkwang.dev의 도메인을 blog.sungkwang.me 로 업데이트를 한다.

UPDATE posts SET html = REPLACE(html, 'blog.sungkwang.dev', 'blog.sungkwang.me') WHERE html LIKE '%blog.sungkwang.dev%';
UPDATE posts SET feature_image = REPLACE(feature_image, 'blog.sungkwang.dev', 'blog.sungkwang.me') WHERE feature_image LIKE '%blog.sungkwang.dev%';
UPDATE posts SET canonical_url = REPLACE(canonical_url, 'blog.sungkwang.dev', 'blog.sungkwang.me') WHERE canonical_url LIKE '%blog.sungkwang.dev%';

이제 모든 설정이 끝났다. 마지막으로 Ghost 를 재시작한다.

ghost restart

이렇게 블로그 도메인을 변경한 이후, 네이버 서치 콘솔과 구글 서치 콘솔에 검색엔진에서 내 블로그를 수집할 수 있게 설정한다. 이 내용은 다음 포스팅에서 작성할 예정이다.

질문 및 의견을 남겨주세요 >