Ghostは、ブログ記事や関連する画像ファイルを管理し、それらをWebページとして公開するためのコンテンツ管理システム(CMS)である。CMSの有名どころだと、他にはWordpressなどがある。この記事では、Ghost CMSをセルフホスティングしてブログを開始するための手順を記す。

Ghost CMSの特徴

GhostはHeadless CMSの一つであり、オープンソースで提供されている。Headless CMSは従来のCMSとは異なり、バックエンドとフロントエンドが分離され、それらの間はAPIを介してやり取りが行われる。つまり、フロントエンドの技術スタックに縛られないため、React、Vue.js、Angularなど、好きなフロントエンドフレームワークや静的サイトジェネレーター(Gatsby、Next.jsなど)を使用することも可能というわけだ。個人的には、Ghost CMSは、Contentfulなどの他のHeadless CMSと比較して、オープンソースである点が魅力的である。デフォルトのUIがシンプルで使いやすいのも気に入っている。

事前準備

Ghostを自前で稼働させるために、いくつか事前にやっておくことがある。サーバー内で行うセットアップ操作は後述するが、それ以外で必要な準備項目をリストアップしておく。それぞれの詳細はすぐ下に記す。

  • サーバー環境を用意
  • 独自ドメインを用意
  • DNSを設定

サーバー環境を用意

まず、Ghostを実際に稼働させるためのサーバー環境を用意する必要がある。公式のドキュメントによると最低でも1GBのRAMが必要とされているが、実際にはもう少し余裕があると良いだろう。OSはUbuntuの使用が推奨されている。

独自ドメインを用意

ブログを公開するためにはドメインを用意しておく必要がある。適当なドメインレジストラで好きなドメインを取得しておいて欲しい。企業の技術ブログやマーケティング用のブログに使用する場合は、既存のドメインのサブドメインを利用するのもアリかもしれない。

DNSを設定

ドメインを使用するために、DNSを設定する必要もある。基本的には、使用しているドメインレジストラで提供されているDNSにレコードを設定をすると良い。例えば、当ブログでは以下のようにレコードの設定をしている。HOSTには使用するドメイン名、ANSWER部分には使用するサーバーのipアドレスを記述する。

DNSレコードの設定例
DNSレコードの設定例

反映には少し時間がかかるので、コーヒーでも飲んで待っていよう。digコマンドでレコードが反映されているかが確認できる。ドメイン名は自分がDNSレコードに記述したものを指定してほしい。

$ dig example.com

セットアップ手順

サーバー内でGhost CMSをセットアップする手順を以下に示す。ここでは、公式で使用を推奨されているUbuntuを使用することを前提にする。僕の環境ではとくにUbuntu 20.04 LTSを使用している。もしも何らかの理由で他のOSを使用する場合は、適宜読み替えてほしい。基本的にはghost-cliというツールがセットアップを自動化してくれるため、それを使っていくことになる。

1. aptパッケージのアップデート

既に更新されていれば実行しなくて大丈夫。

$ sudo apt-get update
$ sudo apt-get upgrade

2. 作業用ユーザーの作成

ghost-cliはこちらのドキュメントに書かれているように、rootユーザーでの実行を認めていない。なので、作業用のユーザーを作成する。<username> は好きなユーザー名で置き換える。

$ adduser <username>
$ usermod -aG sudo <username>

以降は作成したユーザーで作業を行なう。

$ su - <username>

3. node.jsをインストール

ghost-cliをnpmでインストールするため、node.jsをインストールする。Nodeのバージョンはサポートされているものとそうでないものがあるので、公式のSupported Node Versionsより確認をしてほしい。今回私は18.12.1を使用することにする。また、僕はasdfというツールを使用してnode.jsをインストールするが、適宜自由な方法でインストールしてもらえれば良い。

$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.12.0
$ . "$HOME/.asdf/asdf.sh"

$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
$ asdf install nodejs 18.12.1
$ asdf global nodejs 18.12.1

4. ghost-cliをインストール

ghost-cliはGhostのセットアップと管理を簡単に行うためのツールだ。記事執筆時点での最新のghost-cliのバージョンは1.24.2。

$ npm install ghost-cli -g

5. Nginxをインストール

Ghostでは、WebサーバーとしてNginxを使用するのでこちらもインストールしておく。

$ sudo apt-get install nginx

6. MySQLをインストール

記事などのデータを格納するためのDBとしてMySQLをインストールする。

$ sudo apt-get install mysql-server

インストールしたら、MySQLのrootユーザーのパスワードを変更する。以下では、SQLのpassword 部分を好きな値に変えて欲しい。

$ sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
quit

7. Ghostをインストール

ghost-cliを利用してGhostをインストールする。まずは、インストールするディレクトリを作成する。<dirname>は好きな名前に、<username>は使用している作業用ユーザー名に置き換える。

$ sudo mkdir -p /var/www/<dirname>
$ sudo chown <username>:<username> /var/www/<dirname>
$ sudo chmod 775 /var/www/<dirname>

次に、ghost installコマンドを利用してGhostをセットアップする。いくつかインタラクティブに質問をされるので、それぞれ以下のコメントに示したように答えていくことになる。<url> は事前に取得したドメインを使用して指定する。このブログであれば https://nctn.me となる。<password> は前項のMySQLの設定で指定したパスワードを使用する。<email> は自身のメールアドレスを指定。

$ cd /var/www/<dirname>
$ ghost install

blog url: <url>
mysql server: 127.0.0.1
mysql username: root
mysql password: <password>
ghost db name: <db name>
set up "ghost" mysql user: no
set up nginx: yes
set up ssl: yes
email address for let's encrypt: <email>
set up systemd: yes
start ghost: yes

8. Webページにアクセスできることを確認

ここまでの手順でWebサーバーが立ち上がるので、最後にWebページにアクセスできることを確認する。https://<domain>/ghost で管理画面にアクセスすることができる。以上でGhostのセットアップは完了だ。


ちなみに、当ブログでは、Thesisというブログテーマを使用している。有料テーマだが、SEOも考慮された良いテーマなのでもしよければ試してみてほしい。デモや詳細は下の公式ページから確認できる。

Priority Vision