UbuntuにGhost CMSをインストールしてセットアップする方法
Ghostは、JavaScriptで書かれた無料でオープンソースのブログプラットフォームで、2013年に初めてリリースされました。WYSIWYG(What You See Is What You Get)エディタとMarkdown言語を使用して投稿を書くことをサポートしています。Wordpressとは異なり、シンプルさを重視し、純粋なブログプラットフォームであるため、SEOやソーシャルシェアリング機能があらかじめ組み込まれています。Ghostは、用意が整ったホスティングサービスであるGhost(Pro)を提供していますが、簡単に自己ホスティングも可能です。
このチュートリアルでは、開発モードと本番モードの両方で、UbuntuにGhostブログプラットフォームをインストールして設定する方法を見ていきます。
このチュートリアルでは、あなたは学びます:
- 開発モードでGhostを手動またはDockerを使用して迅速にインストールする方法
- プロダクションでGhostを設定する方法
- ポート80と443を通過するトラフィックを許可するためのUFWの設定方法
紹介
Ghostは開発モードまたはプロダクションモードで実行できます。開発モードは、プロジェクトを迅速に作成する必要があるときや、テーマの開発のような場合に使用したいモードです。このモードではsqliteがデータベースとして使用され、専用のウェブサーバーのインストールは必要ありません。一方、プロダクションモードでは、適切なスタックをインストールする必要があります。公式にサポートされているものには、データベースとしてMySQL 8とウェブサーバーとしてNGINXが含まれています。
両方のインストールモードに共通する要件はNodeです。なぜなら、GhostはJavascriptで書かれており、サーバーサイドのNode.jsエンジン上で動作するからです。サポートされているNodeのバージョンは14.xと16.xです。私たちが実行しているプラットフォームではこれらのバージョンが利用できない可能性が高いため、サードパーティのソフトウェアソースから入手する必要があります。この場合、NodeSourceを使用します。
最新のNode.js LTSバージョンをインストールする
最新のNode.jsバージョンは16.xです。NodeSourceリポジトリからUbuntuにインストールする方法を見てみましょう。最初に行うべきことは、NodeSourceリポジトリの署名キーをダウンロードし、それをデアーマー化して、/usr/share/keyringsディレクトリにコピーすることです:
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/nodesource.gpg > /dev/null次のステップとして、NodeSourceリポジトリをソフトウェアソースに追加します。/etc/apt/sources.list.d/nodesource.listファイルを作成し、次の内容を書き込みます:
deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x jammy main
deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource/com/node_16.x jammy main
次に、リポジトリを同期させ、最後にnodejsパッケージをインストールします。ノードパッケージマネージャー(npm)は依存関係としてインストールされます:
sudo apt-get update && sudo apt-get install nodejs開発モードでGhostをインストールする
開発モードでGhostをインストールする方法を見てみましょう。最初にやりたいことは、私たちのGhostのインストールを管理するために設計されたユーティリティであるghost-cliをインストールすることです。
ghost-cliとGhostのインストール
最新の ghost-cli を取得するには、npm を使用する必要があります。通常、node パッケージマネージャーでパッケージをグローバルにインストールするための推奨される方法は、sudo をプレフィックスに付けた「npm install」コマンドを実行することです。しかし、これは良い考えではありません。なぜなら、パッケージのインストールの一環として任意のコードが実行される可能性があり、そのコードが管理者権限で実行されるのは望ましくないからです。
別の方法は、--prefixオプションを使ってnpmを実行することです。このオプションは引数としてパスを取り、パッケージをどこにインストールするかを指定するために使用されます。この場合、ユーティリティを私たちのユーザーのためだけにインストールするのが十分なので、私たちのHOMEにインストールすることができます;例えば、~/.npm/ディレクトリに:
npm --prefix=~/.npm install ghost-cli@latest -g上記のコマンドは「ghost」バイナリを~/.npm/bin/ghostとしてインストールします。ユーティリティをフルパスで呼び出さずに済むように、~/.npm/binディレクトリをPATHに追加することができます。インストールが完了したら、ghostユーティリティを使ってGhostをデプロイできます。まず、プロジェクトをホストするディレクトリを作成し、その中にGhostをインストールします:
mkdir ghost-project && ~/.npm/bin/ghost install local --dir ghost-projectGhostはローカル/開発モードでインストールされます。インストールが完了すると、以下のようなメッセージが表示されるはずです:
Ghost was installed successfully! To complete setup of your publication, visit:
http://localhost:2368/ghost/ページを訪れると、いくつかの基本的なプロジェクト情報を提供するように促されます。
何らかの理由でGhostをアンインストールしたい場合は、ghostユーティリティの「uninstall」コマンドを使用できます。
~/.npm/bin/ghost uninstall --dir ghost-projectGhostインスタンスを開始および停止するには、代わりにそれぞれ「start」および「stop」コマンドを使用できます。
Dockerを使用してローカルにGhostをインストールする
Ghostプロジェクトに迅速に取り組むための代替手段として、ghostコミュニティが提供するDockerイメージを使用する非常に便利なオプションがあります。このチュートリアルのこのセクションでは、すでにDockerに慣れていることを前提としています。GhostのDockerイメージをビルドし、それに基づいてコンテナを起動するには、以下のコマンドを使用できます。
sudo docker run -d --name ghostproject -e NODE_ENV=development -p 2368:2368 ghost上記のコマンドを実行することで、「ghost」イメージがダウンロードされます(マシンに存在しない場合)。その後、それに基づいてコンテナが起動します。 -dオプションを使用したため、コンテナはデタッチモードで起動します(バックグラウンドで実行され、ターミナルをブロックしません)。 --nameオプションでは、コンテナ名(この場合「ghostproject」 - 他の場合はランダムに生成されます)を指定しました。これは迅速で親しみやすい参照として使用できます。代わりに、-eオプションを使用して、NODE_ENV環境変数の値を定義しました:これはコンテナ内で環境モードを設定するために使用されます。最後に、-pオプションを使用して、ホストシステムのポート2368を同じコンテナポートにマッピングしました。このようにして、http://localhost:2368/ghostに移動することで「dockerized」Ghostインスタンスにアクセスできます。
本番環境でのGhostの展開
これまで、開発モードでGhostを迅速にインストールする方法を見てきました。Ghostを本番環境にデプロイする必要がある場合、データベースとしてMySQL8をセットアップし、ウェブサーバーとしてNGINXを使用しなければなりません(これは推奨されるセットアップです)。公式ドキュメントでは、以下のいずれかのUbuntuバージョンにインストールすることをお勧めしています:
- 16.04
- 18.04
- 20.04
- 22.04
この記事のために、最新のUbuntu LTSバージョン(22.04)を使用します。このバージョンでは、MySQL8がデフォルトのリポジトリに利用可能です。
MySQLとNGINXのインストール
Ubuntu 22.04にMySQL8とNGINXをインストールするのは非常に簡単な作業です。私たちが行う必要があるのは、次のコマンドを実行することだけです:
sudo apt install mysql-server nginxインストールの一環として、mysqlとnginxサービスの両方が起動し、ブート時に自動的に有効になります。
ゴーストのためのデータベースを作成する
私たちは今、プロジェクトのためにデータベースを作成する必要があります。最初にやるべきことは、MySQLシェルにログインすることです:
sudo mysql -u root
開かれるMySQLシェルから、プロジェクト(「ghostproject」)用のデータベースと、それに対するすべての権限を持つデータベースユーザー(「ghostuser」)を作成するために、次のクエリを発行できます。
mysql> CREATE DATABASE ghostproject;
mysql> CREATE USER 'ghostuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON ghostproject.* TO 'ghostuser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit;プロジェクトディレクトリの設定
次のステップはプロジェクトディレクトリの作成です。私たちはプロダクションでGhostをデプロイするため、/var/www ディレクトリに作成します:
sudo mkdir /var/www/ghost-project次に、このディレクトリの所有権を標準ユーザー(この場合は「egdoc」)に渡したいと思います。このユーザーは「ghost」以外の誰かでなければなりません。「ghost」ユーザーとグループは、ghost-cliによるインストールの一部として作成されます。
sudo chown egdoc:egdoc /var/www/ghost-projectこの時点で私たちのプロジェクトのディレクトリは準備が整っていますが、まだghost-cliユーティリティをインストールしていません。公式ドキュメント自体でも示唆されているように、インストールを行う最も簡単な方法は次のコマンドを実行することです。
sudo npm install ghost-cli@latest -g上記のコマンドは、既にユーザのPATHにある/usr/local/binディレクトリにghost-cliをインストールします。管理者権限でnpmを実行することは、上述の通り良くない習慣です。したがって、--prefixを使用してインストールディレクトリを指定することができます。このディレクトリは、システムdサービスが自動的に作成し実行するユーザーであるghostユーザーがアクセス可能でなければなりません。この例のために、/opt内にディレクトリを作成し、それを「ghost」と呼ぶことにします:
sudo mkdir /opt/ghost && sudo chown egdoc:egdoc /opt/ghost
npm --prefix=/opt/ghost install ghost-cli@latest -gユーティリティがインストールされたら、それを使用してGhostを設定できます。
/opt/ghost/bin/ghost install --dir /var/www/ghost-projectインストールプロセスの一環として、いくつかのチェックが行われ、その後、必要な依存関係がダウンロードされてインストールされます。最後に、いくつかの情報を入力するように求められます。他のことの中で、ブログのURL(ここでは「ghostproject.lan」を使用しました)、MySQLサーバーのホスト名、データベース名、ユーザー名、パスワードの入力を求められます:
? Enter your blog URL: http://ghostproject.lan
? Enter your MySQL hostname: localhost
? Enter your MySQL username: ghost
? Enter your MySQL password: [hidden]
? Enter your Ghost database name: ghostprojectそのスクリプトは、管理者権限を必要とする特定の操作を実行するために、私たちの「sudo」パスワードも要求します。
- 「ゴースト」システムユーザーとグループを作成します(ユーザーは–systemオプションで作成されるため、そのUIDは< 1000になります)
- 「content」プロジェクトのサブディレクトリ(この場合は
/var/www/ghost-project/content)の所有権をghostユーザーとghostグループに再帰的に割り当てます。 - プロジェクトのために自動的にNGINXのVirtualHostを作成するかどうかを尋ねます。
- 私たちにLet's Encryptを使用してSSLを自動的に設定するかどうかを尋ねます。
- プロジェクトのためにsystemdサービスユニットを作成すべきかどうか私たちに尋ねます。
プロセスの最後に、Ghostを開始するかどうか尋ねられます。これは、必要なテーブルがデータベースに作成されるため、しばらく時間がかかることがあります。準備が整ったら、ブログは指定されたURLでアクセスできるようになります。こちらがこのプロジェクトのために作成されたNGINXのVirtualHostファイルです:
server {
listen 80;
listen [::]:80;
server_name ghostproject.lan;
root /var/www/ghost-project/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
location ~ /.well-known {
allow all;
}
client_max_body_size 50m;
}代わりに、以下はゴーストプロジェクト(/lib/systemd/system/ghost_ghostproject-lan.service)を自動的に開始(および再起動)するために必要な生成されたsystemdサービスです:
[Unit]
Description=Ghost systemd service for blog: ghostproject-lan
Documentation=https://ghost.org/docs/
[Service]
Type=simple
WorkingDirectory=/var/www/ghost-project
User=998
Environment="NODE_ENV=production"
ExecStart=/usr/bin/node /opt/npm/bin/ghost run
Restart=always
[Install]
WantedBy=multi-user.targetファイアウォールの設定
私たちのマシンにファイアウォールが動作している場合(実際には動かすべきです!)、必要なポートを通過するトラフィックを許可する必要があります。この場合、ポート80/tcpと443/tcp(SSLを設定する場合)です。以下の例では、Ubuntuのデフォルトであるため、UFW(Uncomplicated Firewall)が使用されていると仮定します。私たちが実行する必要があるコマンドは次のとおりです:
sudo ufw allow "Nginx Full"結論
Ghostは、Javascriptで構築された無料でオープンソースのブログプラットフォームです。このチュートリアルでは、テストや開発目的のためにシステムにGhostのローカルインスタンスを迅速にインストールする方法と、プロダクション環境でGhostブログを展開する方法を学びました。このプラットフォームについてもっと知りたい場合は、プロジェクトの公式ウェブサイトを訪れるだけで済みます。

