Ghost에 한글 URL 적용
Ghost는 기본 영문 URL을 지원한다. 요것이 Ghost 글을 쓰며, 영문으로 URL을 계속 만들어주는 것도 귀찮다. 그래서 그냥 한글 제목을 바로 URL로 적용할 수 있도록 수정했다. 귀차니즘 또 1승
두 개의 글을 통해 현재 사용 중인 고스트 설치 및 설정을 완료하였다. 그럭저럭 쓰는데 별다른 문제는 없었다. 하지만, 아직 귀찮은 요소가 남았다.
고스트가 한글 URL을 지원하지 않아 그럴듯한 영문 URL을 생성해 주는 작업. 고스트가 기본으로 한글 제목을 발음 나는 대로 영어로 옮겨서 작성은 해준다. 하지만 그렇게 만들어진 URL은 정말 쓰레기 같은 정보만 담고 있다. 그 어떤 사람에게도 도움이 되지 않는다.
그래서, 결국 한글 URL 지원하도록 고스트를 수정하기로 했다.
사전 준비
locale 변경
AWS는 기본 locale이 영어로 되어있다. 그렇기에 한글 입력이 안될 수 있다. 그렇기에 대충 한글을 쓸 수 있게 locale 변경 법을 먼저 정리한다.
# 한글 언어팩 다운
sudo apt install language-pack-ko
재부팅시에도 한국/한글 locale 적용을 위해 sudo vi /etc/default/locale를 이용해 설정을 아래와 같이 변경한다.
LANG="ko_KR.UTF-8"
LANGUAGE="ko_KR:ko:en_US:en"
locale 설정 끝~
Ghost의 새로운 docker volume 생성
수정 대상 소스는 ghost의 versions 디렉티리에 존재한다. 현재 해당 디테토리는 docker 이미지로 관리가 되어, 수정한다면 docker 이미지 변경 저장 과정이 필요하다. 흠. 수정 대상 디렉터리를 docker volume으로 관리한다면 소스 변경 및 유지 보수가 편리할 것 같다.
기존 docker-compose.yaml에 "ghost-ver:/var/lib/ghost/versions" 항목을 추가하여 볼륨 설정을 추가한다.
version: '3.9'
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: unless-stopped
volumes:
- conf:/etc/nginx/conf.d
- certs:/etc/nginx/certs:ro
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
nginx-proxy-acme:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
depends_on:
- nginx-proxy
restart: unless-stopped
environment:
NGINX_PROXY_CONTAINER: ${NGINX_PROXY_CONTAINER}
volumes:
- certs:/etc/nginx/certs:rw
- acme:/etc/acme.sh
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
ghost:
image: ghost:5
container_name: ghost
depends_on:
- nginx-proxy
- nginx-proxy-acme
- db
restart: unless-stopped
ports:
- 8080:2368
environment:
VIRTUAL_HOST: ${GHOST_VIRTUAL_HOST}
VIRTUAL_PORT: ${GHOST_VIRTUAL_PORT}
LETSENCRYPT_HOST: ${GHOST_LETSENCRYPT_HOST}
LETSENCRYPT_EMAIL: ${GHOST_LETSENCRYPT_EMAIL}
database__client: ${GHOST_DB_CLIENT}
database__connection__host: ${GHOST_DB_HOST}
database__connection__port: ${GHOST_DB_PORT}
database__connection__user: ${MYSQL_USER}
database__connection__password: ${MYSQL_PASSWORD}
database__connection__database: ${MYSQL_DATABASE}
url: ${GHOST_URL}
volumes:
- ghost-data:/var/lib/ghost/content
- ghost-ver:/var/lib/ghost/versions
db:
image: mysql:8
container_name: db
depends_on:
- nginx-proxy
- nginx-proxy-acme
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
volumes:
- db-data:/var/lib/mysql
- ghost-ver:/var/lib/ghost/versions
volumes:
conf:
certs:
vhost:
html:
acme:
ghost-data:
ghost-ver:
db-data:
수정 후 sudo docker compose up -d 명령으로 docker 재기동~! 그럼 준비 끝~~!
한글 URL 지원하도록 소스 수정
ghost의 소스를 docker 볼륨을 생성하여 처리하였다. 그렇기에 이제는 /var/lib/docker/volumes/ 디렉터리 내에 ghost의 versions의 파일이 위치한다. 예) /var/lib/docker/volumes/myghost_ghost-ver/_data/
5.14.1/node_modules/@tryghost/validator/lib/validator.js 파일의 아래 사항을 수정한다.
validator.extend('isSlug', function isSlug(str) {
return validator.matches(str, /^[a-z0-9\-_ㄱ-ㅎㅏ-ㅣ가-힣]+$/);
});
5.14.1/node_modules/@tryghost/string/lib/slugify.js 내의 코드 주석으로 만들기.
// Remove non ascii characters
//string = unidecode(string);
sudo docker compose up -d 명령을 이용해 docker 재기동하면 ghost가 한글 URL을 지원합니다.
참고 자료
- http://egloos.zum.com/killins/v/3014274
- https://tmigod.com/%EA%B3%A0%EC%8A%A4%ED%8A%B8-%EB%B8%94%EB%A1%9C%EA%B7%B8-%ED%95%9C%EA%B8%80-url-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95/