Cinntiq's Studio

시놀로지에 Ghost 5 설치하기

시놀로지에 Ghost 5 설치하기

기존에는 시놀로지 도커에 Ghost 도커 컨테이너를 설치하고 SQLite로 DB를 설정하면 단일 컨테이너만으로도 간단하게 Ghost를 돌릴 수 있었다. DB를 백업하고 싶으면 그냥 파일 하나만 복사해놓으면 그만이었고. 그런데, 고스트 재단에서 DB를 MySQL 8 이상만 지원하기로 결정했단다. 덕분에 기존에 사용하던 SQLite는 버려야 하는 상황이 되어버렸다. 🙄

물론 성능 개선과 유지 보수의 문제를 생각하면 어쩔 수 없는 선택이기는 하다. 최근 몇 년간 비약적으로 발전한 디자인을 생각하면 관리의 편의성은 아주 사소한 문제라 결국 버전을 올리기로 결정했다.

Ghost는 이제 단독으로 돌아가지는 않고 Ghost 5를 위한 MySQL 8을 설치해야만 한다. 물론 여러 가지 방법들이 있겠지만 개인적으로 터미널 들어가서 무언가를 건드리는 것을 썩 좋아하지는 않아서 시놀로지에서 기본적으로 제공되는 기능으로만 설치하기로 했다.

우선 레지스트리에서 공식 이미지로 Adminer, Ghost, MySQL을 받자. 나는 Ghost만 alpine으로 받고 나머지는 latest로 받았는데 이거는 취향대로 받아주면 된다. 다 받았으면 아래에서 설명하는 대로 설치를 해보자.

💡
이 글에서 모든 컨테이너는 브릿지(Bridge) 네트워크로 설치를 했다.
💡
이 글에서는 도메인에 관련된 설정은 생략하고 기본으로 설정된 포트만 이용해서 진행한다. 도메인 설정 등은 리버스 프록시나 시놀로지의 웹 스테이션을 조금만 만져보면 금방 알 수 있는 부분이라 건너뛰기로 했다.

첫번째, MySQL 설치하기

다음의 사항을 주의하면서 MySQL을 설치하자.

  1. 로컬 포트는 취향대로 열고 컨테이너 포트는 3306(TCP), 33060(TCP)으로 설정하자. 로컬 포트는 외부에서 접속할 일이 없으면 필요 없는 포트라 자동으로 설정해도 무관하다. 포트를 변경하면 Adminer에서 접속을 할 수 없으니 꼭 기본 포트만 사용하자.
  2. 볼륨에서 폴더 /var/lib/mysql 을 원하는 폴더에 마운트 한다. 마운트 한 폴더는 MySQL 데이터를 저장할 때 필요하다. (MySQL 설정을 변경해야 하면 my.cnf도 파일로 마운트 한다. my.cnf의 위치는 /etc/my.cnf )
  3. 환경 변수에서 MYSQL_RANDOM_ROOT_PASSWORD 를 생성하고 값으로 yes, MYSQL_USER 를 생성하고 값으로 admin, MYSQL_PASSWORD 를 생성하고 값으로 원하는 비밀번호를 입력하자.

위 사항을 지키면서 MySQL 도커 컨테이너를 설치했으면 MySQL을 실행하자. MYSQL_RANDOM_ROOT_PASSWORD를 yes로 설정했으면 도커의 로그에 다음과 같은 문구가 있을 것이다. 확인해서 잘 기록하자.

0000-00-00 00:00:00+00:00 [Note] [Entrypoint]: GENERATED ROOT PASSWORD: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

위 X로 이루어진 32자의 문자열 부분이 랜덤하게 생성된 root 유저의 비밀번호이다. 이 비밀번호로 admin 유저에게 모든 권한을 부여해야 나중에 DB를 생성하는데 문제가 없으니 어딘가에 잘 기록한다. 이제 admin 유저에게 권한을 부여해 보자.

일단 MySQL 도커 컨테이너의 터미널로 들어간다. 터미널에서 생성을 누르면 bash가 열리고 mysql -u root -p 를 입력하면 Enter password: 라는 문구가 나온다. 여기에 아까 확인한 32자 root 유저의 비밀번호를 입력하자. (문제가 없었다면 환경 변수에 설정된 대로 admin 유저가 이미 생성되어 있으니 별도로 유저를 생성할 필요는 없다.)

bash-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 581
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL에 root 유저로 로그인한 상태.

로그인에 성공했으면 위와 같은 화면이 나온다. 이제 다음처럼 순서대로 명령어를 입력해 주자.

mysql> grant all privileges on *.* to admin@'%';
Query OK, 0 rows affected (0.16 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
bash-4.4#
정상적으로 admin 유저에게 권한이 부여된 모습.

위와 같이 bye라는 문구가 나왔다면 admin 유저에게 권한이 설정된 것이다. MySQL에서 할 일은 모두 끝났다.

두번째, Adminer 설치하기

Adminer는 2가지만 설정하고 설치하자.

  1. 환경 변수에서 ADMINER_DEFAULT_SERVER 를 생성 후 mysql을 입력.
  2. 링크에서 설치한 MySQL 컨테이너를 선택하고 별칭을 mysql로 입력.

여기서 별칭은 나중에 adminer에서 로그인할 때 서버 이름으로 쓰인다.

세번째, Ghost 설치하기

Ghost는 config.production.json을 설정해둬야 한다. 먼저 config.production.json 파일을 만들고 다음 내용을 자신에 맞게 변경해서 입력한 후 저장하자.

{
  "url": "https://my.domain.com",
  "server": {
    "host": "0.0.0.0",
    "port": 2368
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "mysql",
      "port": 3306,
      "user": "admin",
      "password": "my_admin_password",
      "database": "my_ghost_database"
    }
  },
  "mail": {
    "transport": "SMTP",
      "options": {
        "service": "Gmail",
          "auth": {
            "user": "my_google_id@gmail.com",
            "pass": "xxxxxxxxxxxxxxxx"
       }
    }
  },
  "logging": {
    "transports": [
      "stdout"
    ]
  },
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}
기본적인 설정을 적용한 모습. 추가적인 설정은 Ghost-Configuration를 참조하자.
  1. 볼륨에서 /var/lib/ghost/config.production.json 를 위에서 생성한 파일로, 폴더 /var/lib/ghost/content 를 원하는 폴더에 마운트 한다.
  2. 링크에서 설치한 MySQL 컨테이너를 선택하고 별칭을 mysql로 입력.

모든 설정이 끝났다. Ghost 컨테이너를 실행하고 로컬 포트를 이용해서 접속해 보자. 정상적으로 설치되었다면 초기 화면이 나올 것이다. (나는 Ghost DB를 미리 생성하고 실행을 했는데, 혹시 미리 생성해야 한다면 Charset은 utf8mb4_0900_ai_ci로 설정하고 DB를 생성해주자.)

※ Google SMTP 설정하기

메일이 정상적으로 동작하기 위해서는 config.production.json에서 SMTP를 설정해야 하는데 나는 Google의 SMTP를 사용했다. [Go] Google Gmail SMTP 설정 방법 및 메일 전송 - 미생을 참고해서 구글의 SMTP를 설정하고 비밀번호를 pass에 입력해서 동작하는 것을 확인했으니 필요하면 참고하자.

Ghost가 5로 버전이 올라가면서 관련 글들이 많이 없어서 직접 해보았고, 혹시 설치해 보고 싶은 사람이 있을까 이 글을 작성했다. 혹여, 나도 나중에라도 까먹으면 참고하면 되니까. 아무튼, 이 글이 누군가에게 도움이 되었으면 좋겠다.