<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Cinntiq Studio]]></title><description><![CDATA[This is my diary that writes about what I have experienced in my life. The topic of the writing can be anything. Programming, games, cooking, reviews, my thoughts and diaries.]]></description><link>https://cinntiq.com/</link><image><url>https://cinntiq.com/icons/icon-48x48.png</url><title>Cinntiq Studio</title><link>https://cinntiq.com/</link></image><generator>Ghost 5.0</generator><lastBuildDate>Mon, 30 Sep 2024 22:41:35 GMT</lastBuildDate><atom:link href="https://cinntiq.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[시놀로지에 Ghost 5 설치하기]]></title><description><![CDATA[Ghost 5로 업그레이드하면서 SQLite에서 MySQL로 전환해야 하는 상황을 겪으셨나요? 이 글에서는 Synology NAS의 Docker 환경에서 Ghost 5, MySQL, 그리고 Adminer를 설치하는 과정을 상세히 안내합니다. 터미널 작업을 최소화하고 NAS의 기본 기능만으로 설치하는 방법을 소개합니다.]]></description><link>https://cinntiq.com/install-ghost-5-on-a-synology-nas/</link><guid isPermaLink="false">Ghost__Post__6391a3a982224e0001802c99</guid><category><![CDATA[Develop]]></category><dc:creator><![CDATA[Cinntiq]]></dc:creator><pubDate>Thu, 08 Dec 2022 12:17:43 GMT</pubDate><content:encoded><![CDATA[<p>기존에는 시놀로지 도커에 Ghost 도커 컨테이너를 설치하고 SQLite로 DB를 설정하면 단일 컨테이너만으로도 간단하게 Ghost를 돌릴 수 있었다. DB를 백업하고 싶으면 그냥 파일 하나만 복사해놓으면 그만이었고. 그런데, 고스트 재단에서 DB를 MySQL 8 이상만 지원하기로 결정했단다. 덕분에 기존에 사용하던 SQLite는 버려야 하는 상황이 되어버렸다 🙄</p><p>물론 성능 개선과 유지 보수의 문제를 생각하면 어쩔 수 없는 선택이기는 하다. 최근 몇 년간 비약적으로 발전한 디자인을 생각하면 관리의 편의성은 아주 사소한 문제라 결국 버전을 올리기로 결정했다.</p><p>Ghost는 이제 단독으로 돌아가지는 않고 Ghost 5를 위한 MySQL 8을 설치해야만 한다. 물론 여러 가지 방법들이 있겠지만 개인적으로 터미널 들어가서 무언가를 건드리는 것을 썩 좋아하지는 않아서 시놀로지에서 기본적으로 제공되는 기능으로만 설치하기로 했다.</p><p>우선 레지스트리에서 공식 이미지로 Adminer, Ghost, MySQL을 받자. 나는 Ghost만 alpine으로 받고 나머지는 latest로 받았는데 이거는 취향대로 받아주면 된다. 다 받았으면 아래에서 설명하는 대로 설치를 해보자.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">이 글에서 모든 컨테이너는 브릿지(Bridge) 네트워크로 설치를 했다.</div></div><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">이 글에서는 도메인에 관련된 설정은 생략하고 기본으로 설정된 포트만 이용해서 진행한다. 도메인 설정 등은 리버스 프록시나 시놀로지의 웹 스테이션을 조금만 만져보면 금방 알 수 있는 부분이라 건너뛰기로 했다.</div></div><h2 id="%EC%B2%AB%EB%B2%88%EC%A7%B8-mysql-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0">첫번째, MySQL 설치하기</h2><p>다음의 사항을 주의하면서 MySQL을 설치하자.</p><ol><li>로컬 포트는 취향대로 열고 컨테이너 포트는 3306(TCP), 33060(TCP)으로 설정하자. 로컬 포트는 외부에서 접속할 일이 없으면 필요 없는 포트라 자동으로 설정해도 무관하다. 포트를 변경하면 Adminer에서 접속을 할 수 없으니 꼭 기본 포트만 사용하자.</li><li>볼륨에서 폴더 <code>/var/lib/mysql</code> 을 원하는 폴더에 마운트 한다. 마운트 한 폴더는 MySQL 데이터를 저장할 때 필요하다. (MySQL 설정을 변경해야 하면 my.cnf도 파일로 마운트 한다. my.cnf의 위치는 <code>/etc/my.cnf</code> ) </li><li>환경 변수에서 <code>MYSQL_RANDOM_ROOT_PASSWORD</code> 를 생성하고 값으로 yes, <code>MYSQL_USER</code> 를 생성하고 값으로 admin, <code>MYSQL_PASSWORD</code> 를 생성하고 값으로 원하는 비밀번호를 입력하자.</li></ol><p>위 사항을 지키면서 MySQL 도커 컨테이너를 설치했으면 MySQL을 실행하자. <code>MYSQL_RANDOM_ROOT_PASSWORD</code>를 yes로 설정했으면 도커의 로그에 다음과 같은 문구가 있을 것이다. 확인해서 잘 기록하자.</p><figure class="kg-card kg-code-card"><pre><code class="language-`bash">0000-00-00 00:00:00+00:00 [Note] [Entrypoint]: GENERATED ROOT PASSWORD: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</code></pre><figcaption><p><span style="white-space: pre-wrap;">랜덤하게 생성한 MySQL의 Root 비밀번호</span></p></figcaption></figure><p>위 X로 이루어진 32자의 문자열 부분이 랜덤하게 생성된 root 유저의 비밀번호이다. 이 비밀번호로 admin 유저에게 모든 권한을 부여해야 나중에 DB를 생성하는데 문제가 없으니 어딘가에 잘 기록한다. 이제 admin 유저에게 권한을 부여해 보자.</p><p>일단 MySQL 도커 컨테이너의 터미널로 들어간다. 터미널에서 생성을 누르면 bash가 열리고 <code>mysql -u root -p</code> 를 입력하면 Enter password: 라는 문구가 나온다. 여기에 아까 확인한 32자 root 유저의 비밀번호를 입력하자. (문제가 없었다면 환경 변수에 설정된 대로 admin 유저가 이미 생성되어 있으니 별도로 유저를 생성할 필요는 없다.)</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">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.</code></pre><figcaption><p><span style="white-space: pre-wrap;">MySQL에 root 유저로 로그인한 상태</span></p></figcaption></figure><p>로그인에 성공했으면 위와 같은 화면이 나온다. 이제 다음처럼 순서대로 명령어를 입력해 주자.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">mysql&gt; grant all privileges on *.* to admin@'%';
Query OK, 0 rows affected (0.16 sec)

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

mysql&gt; exit
Bye
bash-4.4#</code></pre><figcaption><p><span style="white-space: pre-wrap;">정상적으로 admin 유저에게 권한이 부여된 모습</span></p></figcaption></figure><p>위와 같이 bye라는 문구가 나왔다면 admin 유저에게 권한이 설정된 것이다. MySQL에서 할 일은 모두 끝났다.</p><h2 id="%EB%91%90%EB%B2%88%EC%A7%B8-adminer-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0">두번째, Adminer 설치하기</h2><p>Adminer는 2가지만 설정하고 설치하자.</p><ol><li>환경 변수에서 <code>ADMINER_DEFAULT_SERVER</code> 를 생성 후 mysql을 입력.</li><li>링크에서 설치한 MySQL 컨테이너를 선택하고 별칭을 mysql로 입력.</li></ol><p>여기서 별칭은 나중에 adminer에서 로그인할 때 서버 이름으로 쓰인다.</p><h2 id="%EC%84%B8%EB%B2%88%EC%A7%B8-ghost-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0">세번째, Ghost 설치하기</h2><p>Ghost는 config.production.json을 설정해야 한다. 먼저 config.production.json 파일을 만들고 다음 내용을 자신에 맞게 변경해서 입력한 후 저장하자.</p><figure class="kg-card kg-code-card"><pre><code class="language-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"
  }
}
</code></pre><figcaption><p><span style="white-space: pre-wrap;">기본적인 설정을 적용한 모습. 추가적인 설정은 </span><a href="https://ghost.org/docs/config/?ref=studio.cinntiq.synology.me"><span style="white-space: pre-wrap;">Ghost-Configuration</span></a><span style="white-space: pre-wrap;">를 참조하자.</span></p></figcaption></figure><ol><li>볼륨에서 <code>/var/lib/ghost/config.production.json</code> 를 위에서 생성한 파일로, 폴더 <code>/var/lib/ghost/content</code> 를 원하는 폴더에 마운트 한다.</li><li>링크에서 설치한 MySQL 컨테이너를 선택하고 별칭을 mysql로 입력.</li></ol><p>모든 설정이 끝났다. Ghost 컨테이너를 실행하고 로컬 포트를 이용해서 접속해 보자. 정상적으로 설치되었다면 초기 화면이 나올 것이다. (나는 Ghost DB를 미리 생성하고 실행을 했는데, 혹시 미리 생성해야 한다면 Charset은 utf8mb4_0900_ai_ci로 설정하고 DB를 생성해주자.)</p><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">※ Google SMTP 설정하기</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">메일이 정상적으로 동작하기 위해서는 config.production.json에서 SMTP를 설정해야 하는데 나는 Google의 SMTP를 사용했다. </span><a href="https://hyunmin1906.tistory.com/276?ref=studio.cinntiq.synology.me"><span style="white-space: pre-wrap;">[Go] Google Gmail SMTP 설정 방법 및 메일 전송 - 미생</span></a><span style="white-space: pre-wrap;">을 참고해서 구글의 SMTP를 설정하고 비밀번호를 pass에 입력해서 동작하는 것을 확인했으니 필요하면 참고하자.</span></p></div>
        </div><p>Ghost가 5로 버전이 올라가면서 관련 글들이 많이 없어서 직접 해보았고, 혹시 설치해 보고 싶은 사람이 있을까 이 글을 작성했다. 혹여, 나도 까먹으면 참고하면 되니까. 아무튼, 이 글이 누군가에게 도움이 되었으면 좋겠다.</p>]]></content:encoded></item></channel></rss>