GNU/Linux >> Linux の 問題 >  >> Linux

Dockerを使用したGhostCMSのセルフホスティングの完全ガイド

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;
非WWWからWWW

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__clientdatabase__connection__hostdatabase__connection__userdatabase__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.jsonmariadb.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インスタンスを維持するためのヒント

Ghostインスタンスを維持するのに役立つヒントをいくつか紹介します。

ゴーストログをリアルタイムで監視

コンテナがリアルタイムでデプロイされているときにコンテナのログを確認する場合は、次のコマンドを実行できます。

docker logs -f ghost_ghost_1
ダウンタイムなしでGhostボリュームをバックアップおよび復元

クラウド+ローカルアプローチを使用すると、ダウンタイムなしでゴーストボリュームをバックアップおよび復元できます。

ダウンタイムなしでGhostコンテナを更新

--scaleを使用 Docker Composeのフラグを使用すると、Ghostの最新バージョンに基づいて新しいコンテナーを作成できます。完了したら、古いものを削除できます。これにより、ダウンタイムがゼロになります。

以下の記事で読むことができるヒントがさらにいくつかあります。

作業を簡素化するために、GitHubアクションを使用してGhostテーマをデプロイおよび管理することもできます。

バグが発生した場合、問題が発生した場合、または提案がある場合は、下にコメントを残してお知らせください。


Linux
  1. Dockerロギングの完全な初心者向けガイド

  2. Dockerを使用してGhostインスタンスをセルフホスティングするための7つの便利なヒント

  3. セルフホスティングRocket.ChatとDockerの完全ガイド

  1. Grep正規表現:完全ガイド

  2. Dockerを使用してWordPressをインストールする方法、わかりやすいガイド

  3. ダウンタイムなしでDockerコンテナを更新する方法

  1. Dockerガイド:MySQLを使用したGhostブログとDockerを使用したTraefikのデプロイ

  2. Linuxコマンド-完全ガイド

  3. ChromebookにLinuxをインストールするための完全ガイド