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レコードの設定例

セットアップ手順

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

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

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

sudo apt-get update
sudo apt-get upgrade

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

ghost-cliはrootユーザーでの実行を認めていない(https://ghost.org/docs/faq/root-user-fix/)。なので、作業用のユーザーを作成する。<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をインストール

sudo apt-get install nginx

6. MySQLをインストール

sudo apt-get install mysql-server
sudo mysql

MySQLで以下の命令を実行する。<password>は好きな値に置き換える。

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>

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

以上でGhostのセットアップは完了だ。

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

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

Webページにアクセスできない場合は

もしもWebページに正しくアクセスできない場合は、以下のような理由が考えられる。

Ghostのインストールに何らかの理由で失敗している

ghost install の際にエラーが吐かれていないか確認すると良い。また、ghost doctor コマンドで何か環境の問題がないかを確認することができるのでそれも試してみると良いかもしれない。

DNSの設定が正しく行えていない

ドメインを取得して正しく使用するためには、DNSレコードが正しく記述されている必要がある。自身の利用しているDNSで使用しているVPSのpublic IPがAレコードとして指定してあることを確認してみてほしい。

ファイアウォールの設定などが正しくない

ドメイン名が正しく引けていて、Webサーバーも立ち上がっているようであれば、ファイアウォールの設定で弾かれている可能性がある。ufwコマンドやVPSのファイアウォール設定で80, 443ポートが開かれているかを確認してみると良い。