Ghostは、ブログ、ニュースレター、またはメンバーシップWebサイトに適したオープンソースのコンテンツ管理システムです。
超高速でSEOに最適化されています。 Linuxハンドブックで気に入っています。もちろん、私たちのWebサイトはGhostを使用しています。
これで、Ghost自体のメーカーからマネージドGhostインスタンスを選択できます。かなりの費用がかかりますが、Ghostの展開、更新、および保守に労力を費やす必要はありません。そしてもちろん、Ghostプロジェクトの開発にも役立ちます。
たくさんの費用をかけたくない場合や、「自分でやる」アプローチで問題を解決したい場合は、サーバーでGhostをセルフホストすることができます。
このチュートリアルでは、Dockerを使用してGhostをデプロイする手順を示します。
Dockerを使用したセルフホスティングGhost
つまりね。 DigitalOceanなどの一部のクラウドサーバープロバイダーも、ワンクリックのGhostデプロイメントを提供しています。 Ghostの初期設定と構成の手間をかけたくない場合は、これが簡単な方法かもしれません。
それはさておき、LinuxサーバーにGhostwithDockerをデプロイするために必要なものを見てみましょう。
Linuxコマンドに精通しているだけでなく、DockerComposeの基本を知っていることもここで役立ちます。
- Linuxサーバー。物理サーバー、仮想マシン、またはクラウドサーバーを使用できます。パートナーのLinodeにサインアップして、100ドルの無料クレジットを獲得できます。
- DockerとDockerComposeがサーバーにインストールされています。
- Ghostを導入するドメインのDNSへのアクセス。
- www/non-wwwリダイレクトと許可されたアップロード制限を使用したNginxリバースプロキシの設定。
ステップ0:初期設定を準備します
システムにDockerとDockerComposeをインストールする必要があります。これらのチュートリアルを参照して、Ubuntuの手順を入手できます。
それ以外に、Ngnixリバースプロキシを設定する必要もあります。これは、同じサーバーに複数のGhostまたは他のWebサービスをインストールする場合に役立ちます。
これで、以下にリンクされているチュートリアルでこのトピックについて詳しく説明したので、ここで同じ手順を繰り返すことはしません。ただし、システムでこの設定を行う必要があります。
ステップ4までこのチュートリアルに従ってください:
ステップ1:Ghostの展開の準備
ここでは、SSL証明書、www / non-wwwリダイレクト、および許可されたアップロード制限を考慮しているため、Jwilderリバースプロキシ方式を使用しています。
SSL証明書の処理方法は、上記の要件セクションで共有されているリンクですでに説明されています。さらに、www / non-wwwリダイレクトを有効にして、許可されるアップロード制限を増やす方法について説明します。
WWW/non-WWWリダイレクト
SEOの設定によっては、wwwのリダイレクトをwww以外に設定したり、その逆を設定したりすることができます。たとえば、ブログがdomain.comでホストされている場合、www.domain.comにアクセスするユーザーはブログにリダイレクトされる必要があります(GitHubのドメインがどのように機能するか)。
同様に、www.domain.comでホストしている場合は、domain.comにアクセスするユーザーをリダイレクトする必要があります(Linodeのドメインがどのように機能するか)。
WWWから非WWWへ
www.domain.com
という名前のファイルを作成します 次のコンテンツを含むnginxdockercomposeディレクトリ内に保存します:
rewrite ^/(.*)$ https://domain.com/$1 permanent;
domain.com
という名前のファイルを作成します 次のコンテンツを含むnginxdockercomposeディレクトリ内に保存します:
rewrite ^/(.*)$ https://www.domain.com/$1 permanent;
ここで、WWWから非WWWへのリダイレクトを使用するとします。あなたがしなければならないのは、Nginxサービス構成のボリュームセクションにファイルをバインドマウントすることだけです:
- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
画像のアップロードは、デフォルトの最大アップロードサイズである50MBの影響を受ける可能性があります。アップロードの最大制限を設定し、Dockerに画像をアップロードする際の問題を回避するには、たとえば1 GBの場合、client_max_upload_size.conf
という名前のファイルを作成します。 次の内容で保存します:
client_max_body_size 1G;
後で、前のファイルで説明したようにマウントする必要があります:
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
docker-compose up -d
を実行します NginxディレクトリからNginx構成を更新します。
まず、Ghostデプロイメント構成は、基本的に2つの主要コンポーネントで構成されています。
- MariaDBデータベースバックエンド
- Webフロントエンドとしてのゴースト自体
GhostとDockerをデプロイしているため、上記のすべてのコンポーネントはそれぞれ独自のコンテナーとして設定されます。
データベースサービスには、ghost
という内部ネットワークを使用します Ghostサービスでのみ表示される必要があるためです。
networks:
- ghost
ただし、Ghostサービスの場合は、もちろん、同じnet
リバースプロキシ構成で使用されるネットワークは、ghost
とともに指定する必要があります ネットワークを構築して初めて、NginxDockerコンテナでネットワークを起動して実行できるようになります。
networks:
- net
- ghost
次に、DockerComposeを使用してそれらを個別に構成する方法を検討します。
MariaDBの場合、DockerHubで入手できる公式のMariaDB10.5.3イメージを使用します。
ghostdb:
image: mariadb:10.5.3
volumes:
- ghostdb:/var/lib/mysql
restart: on-failure
env_file:
- ./mariadb.env
networks:
- ghost
ここでは、ghostdb
というボリュームを使用しています データベースデータを/var/lib/mysql
に保存します 。また、関連する環境変数をenv_file
に設定しました mariadb.env
と呼ばれます :
MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost
latest
を使用する代わりに、Ghostサービス自体の場合 タグ、私は特に、安定したリリースとして開発者によって起動されたDockerHubでタグ付けされたバージョン番号を使用することを好みます。ここで、この記事を書いている時点では、4.5.0
です。 :
ghost:
image: ghost:4.5.0
volumes:
- ghost:/var/lib/ghost/content
- ./config.json:/var/lib/ghost/config.production.json
env_file:
- ./ghost-mariadb.env
restart: on-failure
depends_on: ghostdb
networks:
- net
- ghost
バインドマウントされたconfig.json
ファイルはSMTP(Mailgun)と重要なログローテーション(エラー重視)設定で構成されています:
{
"url": "http://localhost:2368",
"server": {
"port": 2368,
"host": "0.0.0.0"
},
"mail": {
"transport": "SMTP",
"options": {
"service": "Mailgun",
"host": "smtp.eu.mailgun.org",
"port": 465,
"secureConnection": true,
"auth": {
"user": "replace-me-with-a-mailgun-configured-email-address",
"pass": "replace-me-with-the-relevant-mailgun-apikey-of-50-characters"
}
}
},
"logging": {
"path": "content/logs/",
"level": "error",
"rotation": {
"enabled": true,
"count": 10,
"period": "1d"
},
"transports": [
"file",
"stdout"
]
},
"process": "systemd",
"paths": {
"contentPath": "/var/lib/ghost/content"
}
}
MySQL / MariaDBを使用する必要がある場合、Ghostサービスはghostdb
に依存する必要があります それが機能するためのサービス。これは、ghost-mariadb.env
をバインドマウントした場合にのみ確認できます。 mariadb.env
に従った正しいデータベース構成を持つファイル(Ghostデータベースサービスのボリュームセクションに表示) データベースサービスでは、次のようになります:database__client
、database__connection__host
、database__connection__user
、database__connection__password
およびdatabase__connection__database
。
また、各環境変数VIRTUAL_HOST
を割り当てます。 およびLETSENCRYPT_HOST
両方のdomain.com
に また、www.domain.com
それぞれ、両方が存在することを確認するために。これにより、リダイレクトとSSL証明書が問題なくスムーズに機能することが確実になります。メインのURLをwwwなしにしたいので、url=https://domain.com
として設定します。 。この設定は本番レベルで使用するため、NODE_ENV
変数は実動モードに設定されます。これらの詳細も追加する必要があります。
したがって、完全な環境ファイル(ghost-mariadb.env
)Ghostサービスの場合:
VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production
database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost
上記のデータに矛盾があると、Ghostが誤ってSQLiteに切り替わる可能性があります。あなたはそれを望まない。したがって、上記のすべてのパラメーターが、mariadb.env
で説明されているデータベースサービスと正しく対応していることを確認してください。 上記。
各データベースサービスには、ユーザーデータとコンテンツデータを保存するための独自のDockerボリュームがあります。それらを外部ボリュームとして作成します:
docker volume create ghostdb
docker volume create ghost
次に、volumes
を含める必要があります 次の詳細を含むdockercomposeファイル内のセクション:
volumes:
ghost:
external: true
ghostdb:
external: true
これで、Ghostをデプロイするために必要なコンポーネントができました。
ステップ2:ゴーストのデプロイ
これで、docker-composeファイルの準備が整いました。このファイルを使用する時が来ました。
サーバー上にGhostdockercomposeディレクトリを作成します。
mkdir ghost
ディレクトリに移動して、必要なファイルを編集します。
cd ghost
これまでの説明に基づいて、次のdocker-composeファイルを作成します。
version: '3.7'
services:
ghostdb:
image: mariadb:10.5.3
volumes:
- ghostdb:/var/lib/mysql
restart: on-failure
env_file:
- ./mariadb.env
networks:
- ghost
ghost:
image: ghost:4.5.0
volumes:
- ghost:/var/lib/ghost/content
- ./config.json:/var/lib/ghost/config.production.json
env_file:
- ./ghost-mariadb.env
restart: on-failure
depends_on:
- ghostdb
networks:
- net
- ghost
volumes:
ghost:
external: true
ghostdb:
external: true
networks:
net:
external: true
ghost:
internal: true
また、上記のように他の構成ファイルを作成することを忘れないでください:config.json
、mariadb.env
およびghost-mariadb.env
同じディレクトリ内。
Ghostインスタンスを開始します:
docker-compose up -d
指定したドメインURLを使用して、構成で指定されたGhostドメインにアクセスします。
ステップ3:Ghost管理者アカウントを設定する
管理者アカウントを設定するには、 domain.com/ghostにアクセスする必要があることに注意してください。 サイトをゴースト管理者として主張するまで、画面の指示に従います。
再確認するには、SQLiteではなくMySQL/MariaDBを実際に使用していることを確認してください。左下のユーザーアイコンに移動します:
これで、mysql
として表示される別のデータベースコンテナを実際に使用していることを確認できます。 MySQLまたはMariaDBDockerイメージを使用しているかどうかに関係なく:
また、上記の手順に基づいて、バージョン、環境、メールの3つのパラメータが期待どおりに設定されていることもわかります。以上です!これで、Ghostがサーバー上に自己ホスト型インスタンスとして正常にデプロイされました!
Ghostインスタンスを維持するのに役立つヒントをいくつか紹介します。
コンテナがリアルタイムでデプロイされているときにコンテナのログを確認する場合は、次のコマンドを実行できます。
docker logs -f ghost_ghost_1
クラウド+ローカルアプローチを使用すると、ダウンタイムなしでゴーストボリュームをバックアップおよび復元できます。
--scale
を使用 Docker Composeのフラグを使用すると、Ghostの最新バージョンに基づいて新しいコンテナーを作成できます。完了したら、古いものを削除できます。これにより、ダウンタイムがゼロになります。
以下の記事で読むことができるヒントがさらにいくつかあります。
作業を簡素化するために、GitHubアクションを使用してGhostテーマをデプロイおよび管理することもできます。
バグが発生した場合、問題が発生した場合、または提案がある場合は、下にコメントを残してお知らせください。