Ghost CMSで個人ブログ・技術ブログをセルフホスティングで始める方法
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 アドレスを記述する。

反映には少し時間がかかるので、 コーヒーでも飲んで待っていよう。 dig コマンドでレコードが反映されているかが確認できる。 ドメイン名は自分が DNS レコードに記述したものを指定してほしい。
$ dig example.com
consoleセットアップ手順
サーバー内で Ghost CMS をセットアップする手順を以下に示す。 ここでは、 公式で使用を推奨されている Ubuntu を使用することを前提にする。 僕の環境ではとくに Ubuntu 20.04 LTS を使用している。 もしも何らかの理由で他の OS を使用する場合は、 適宜読み替えてほしい。 基本的には ghost-cli というツールがセットアップを自動化してくれるため、 それを使っていくことになる。
1. aptパッケージのアップデート
既に更新されていれば実行しなくて大丈夫。
$ sudo apt-get update
$ sudo apt-get upgrade
console2. 作業用ユーザーの作成
ghost-cli はこちらのドキュメントに書かれているように、 root ユーザーでの実行を認めていない。 なので、 作業用のユーザーを作成する。<username>
は好きなユーザー名で置き換える。
$ adduser <username>
$ usermod -aG sudo <username>
console以降は作成したユーザーで作業を行なう。
$ su - <username>
console3. 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
console4. ghost-cliをインストール
ghost-cli は Ghost のセットアップと管理を簡単に行うためのツールだ。 記事執筆時点での最新の ghost-cli のバージョンは1.24.2。
$ npm install ghost-cli -g
console5. Nginxをインストール
Ghost では、 Web サーバーとして Nginx を使用するのでこちらもインストールしておく。
$ sudo apt-get install nginx
console6. MySQLをインストール
記事などのデータを格納するための DB として MySQL をインストールする。
$ sudo apt-get install mysql-server
consoleインストールしたら、 MySQL の root ユーザーのパスワードを変更する。 以下では、 SQL のpassword
部分を好きな値に変えて欲しい。
$ sudo mysql
consoleALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
quit
sql7. 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>
console次に、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
console8. Webページにアクセスできることを確認
ここまでの手順で Web サーバーが立ち上がるので、 最後に Web ページにアクセスできることを確認する。https://<domain>/ghost
で管理画面にアクセスすることができる。 以上で Ghost のセットアップは完了だ。
ちなみに、 当ブログでは、 Thesis というブログテーマを使用している。 有料テーマだが、 SEO も考慮された良いテーマなのでもしよければ試してみてほしい。 デモや詳細は下の公式ページから確認できる。
Discussion