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

Dockerを使用したNginxでのIssoコメントシステムのデプロイ

Issoは、独自のDisqusの優れた代替手段として機能できるオープンソースのコメントソフトウェアです。

ブログやウェブサイトにコメントシステムを追加するために使用できます。

JavaScriptが埋め込まれているため、WordPress、Ghost、その他多くのフレームワークで動作します。ここでは、実例としてGhostを使用しました。

ハイブリッドコンテナ化を使用したDockerを使用したIssoのインストール

このドキュメントでは、Essentialsを備えたNginxコンテナーの下にIssoをデプロイすることに焦点を当て、DockerComposeの方法を採用することで簡素化されたアプローチを採用しています。構成では、GitHubで開発者から提供された公式のDockerfileのビルドから生成されたイメージを使用します。

公式ガイドには、ホスト側のインストールに基づくNginxの使用法が記載されています。ここでは、いつものように、DockerベースのNginx構成を使用しました。

公式ドキュメントには、Dockerの基本的な1行の例が記載されています。ただし、本番環境での使用を検討する場合は、これを詳細に検討する必要があります。

したがって、同じ例に基づいてDocker Composeバージョンをカスタマイズし、IssoのカスタムDockerComposeベースのセットアップをカスタマイズしました。後者はもはや維持されていませんが、それでも役立つリファレンスです。

このガイドを使用すると、Issoのアップデートがリリースされるたびに、Dockerfileを再構築し、新しいイメージを作成できます。

前提条件

必須ではありませんが、次の場合はチュートリアルを簡単に実行できます。

  • Dockerに関するある程度の知識
  • DockerComposeの理解

SSLが有効なサブドメインを使用して、リバースプロキシコンテナの背後にIssoをデプロイします。

前述のトピックに関する知識とは別に、次のインフラストラクチャ要件が必要になります。

  • 一般向けのUbuntuLinuxサーバー 。 Linodeのようなクラウドサービスプロバイダーを使用できます。この展開には、1GBのRAMを備えたNanoサーバーで十分です。
  • ドメインへのアクセスとそのDNS設定
  • LinuxサーバーにインストールされているDockerとDockerCompose。
  • Nginxリバースプロキシはすでにセットアップされています (Docker Composeファイルはこのチュートリアルに含まれています)

ヘルプが必要な場合は、次のガイドに従うことができます:

  • UbuntuへのDockerのインストール
  • UbuntuにDockercomposeをインストールする
  • リバースプロキシDockerのセットアップ

isso.domain.comを使用します domain.comで入手できるGhostブログの例として 。必要に応じて適切に交換してください。 DockerComposeで次のNginx構成を使用しています:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-proxy-companion
    environment:
      DEFAULT_EMAIL: "[email protected]"
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

docker create network netを使用して外部ネットワークを作成します docker-compose up -dを使用してデプロイします 対応するディレクトリから。詳細については、上記のリンク先のNginxDockerの記事を確認してください。

ステップ1:DNS設定を変更する

DNSプロバイダーのコントロールパネルで、ドメインのA/AAAAレコードがLinuxサーバーのIPアドレスを指していることを確認してください。

domain.comでホストされているGhostブログのisso.domain.comでIssoをホストする場合は、次のAレコードを追加してxxx.xxx.xxx.xxxをサーバーのIPアドレスに置き換える必要があります。

タイプ ホスト TTL
記録 isso xxx.xxx.xxx.xxx 5分

ステップ2:Issoをダウンロードする

Nginxコンテナの作成ファイルを準備する前に、GitでIssoをダウンロードする必要があります。

/ opt / issoで取得しましょう 。

gitを使用する Issoをダウンロードして、/ optディレクトリの下に配置するには:

sudo git clone https://github.com/posativ/isso /opt/isso

次に、このディレクトリに切り替えます:

cd /opt/isso

これで、DockerComposeを介してIssoの必要なイメージを生成するための公式Dockerfileを構築する準備が整いました。

ステップ3:構成値を編集する

イメージをビルドする前に、本番環境で使用するために必要な最小限のパラメーターを使用して構成ファイルを設定することをお勧めします。

sudo nano isso.cfg

構成ファイルのセクションごとの設定:

[general] セクション:

  • dbpathを使用する デプロイするコンテナの内部から見たデータベースパスを設定します。
  • ホストのドメイン名を設定します パラメータ。ブログの投稿にIssoコメントボックスを埋め込むブログまたはウェブサイトになります。ブログでwww以外からwwwへのリダイレクトを使用する場合は、 www.domain.comを設定することに注意してください。 domain.comの代わりにホストとして コメントが最終的に投稿されるエンドポイントだからです。
  • max-ageを使用 、ユーザーが15分以内に自分のコメントを編集/削除できる時間範囲を設定できます(デフォルト)。
  • smtpを使用しています 新しいコメントがブログに投稿されるときの通知方法(電子メール経由)として。

[モデレーション] セクション:

この値を"true"に設定します Webサイトに投稿されたすべてのコメントのモデレートを有効にします。

[ガード] セクション:

この値を"true"に設定します 投稿されたすべてのコメントに対して基本的なスパム保護を有効にします。

[サーバー] セクション:

  • リッスンを使用 、リッスンするサーバーを指定します。 Issoは、TCP/IPとUNIXドメインソケットの両方をサポートしています。

[smtp] セクション:

おそらく最も重要なセクションでは、SMTPサービスプロバイダーに基づいて、ここで基本的な資格情報を設定します。この設定では、訪問者が新しいコメントを投稿するたびに、「新しいコメントが投稿されました」というタイトルの電子メール通知が届きます。これにより、新しいコメントに関する通知を受け取り、メールボックスから簡単にモデレートできます。 SendGridのパラメーターは次のとおりです。

  • ユーザー名 文字通りapikey 値として(すべてのSendGridユーザーに共通)。
  • パスワード APIキーIDに固有の一意のAPIキーです。
  • ホスト smtp.sendgrid.netになります
  • ポート 587である必要があります
  • から 新しいコメントについて通知を受け取りたいメールアドレスです。
  • from 受信トレイに表示される名前とアドレスです。簡単にするために、送信者名を「新しいコメント投稿者」に設定し、メールアドレスは [email protected]にしています。 。

SendGridを使用していないが、他のSMTPサービスプロバイダーを使用している場合は、ユーザー名、パスワード、ホスト、およびポートのメトリックを、対応する値に基づいて適宜変更する必要があります。

要約すると、開始するための完全な構成ファイルは次のとおりです。

[general]
dbpath = /db/comments.db
host = https://domain.com/
max-age = 15m
notify = smtp
[moderation]
enabled = true
[guard]
enabled = true
[server]
listen = http://0.0.0.0:8080/
[smtp]
username = apikey
password = replace-me-with-sendgrid-apikey
host = smtp.sendgrid.net
port = 587
to = [email protected]
from = New Commenter <[email protected]>

ステップ4:公式Dockerファイルに基づいてIssoDockerイメージをビルドします

すでに/opt / issoのGitHubリポジトリからIssoをダウンロードしているため 、Dockerfileはすでに存在しています。

それでは、イメージを作成して、 isso:0.12.2という名前を付けましょう。 :

docker build . -t isso:0.12.2

この画像は、 0.12.2を使用してローカルに作成されます 鬼ごっこ。 DockerComposeで使用するときが来ました:

version: '3.7'

services:
  isso:
    image: isso:0.12.2
    restart: on-failure
    volumes:
      - ./:/config
      - ./:/db
    environment:
     - UID=4242
     - GID=4242
     - VIRTUAL_HOST=isso.domain.com
     - LETSENCRYPT_HOST=isso.domain.com
    networks:
     - net

networks:
  net:
    external: true

まず、イメージ名を設定し、 on-failureを使用します ポリシーを再起動します。開発者によって示されるようにボリュームがどのようにマウントされるかに基づいて、両方の / config および/db ディレクトリは、Issoコンテナ内でどのように表示されるかを示します。 UID およびGID 値4242は、非特権ユーザーとしてコンテナーを実行するために使用されます。

VIRTUAL_HOST Isso JSファイルをオンラインでアクセス可能にして、サイトに埋め込むために使用されます。 LETSENCRYPT_HOST HTTPSアクセス用の無料のSSL証明書を提供します。 Nginxコンテナは、 netと呼ばれるネットワークを使用しています 。したがって、この構成でも同じネットワークを使用する必要があります。

これで、Dockerを使用してIssoをデプロイする準備が整いました!

ステップ5:DockerComposeファイルをデプロイする

ここで、覚えておくべき重要なポイントは次のとおりです。

  • このコンテナは、Issoと同じネットワークを共有して、相互に通信できるようにする必要があります。 Issoはnetを使用するため ネットワーク、リバースプロキシコンテナと同様に、これは同じものを使用します。別のネットワークを構成している場合は、必ずそれを使用してください。
  • 「障害時」の再起動ポリシーを設定する必要があります。
  • ボリュームを使用して永続データを保護する必要があります( / opt / isso の下のホスト側) )コンテナ内のそれぞれの場所に取り付けられています。

コンテナには、docker-composeファイルの外部に設定する環境変数が必要です。これらはホスト側から読み取られる重要な値であるため、Issoはハイブリッドドッキング設定の良い例です。

Issoインスタンスを起動してみましょう:

docker-compose up -d

リアルタイムチェックで展開がどのように行われたかを確認します:

docker logs -f isso_isso_1

すべてがうまくいけば、以下に示すように、次のような出力が得られます。

2021-08-23 14:48:21,334 INFO: connected to SMTP server
2021-08-23 14:48:21,750 INFO: connected to https://domain.com/
[2021-08-23 14:48:21 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2021-08-23 14:48:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2021-08-23 14:48:21 +0000] [1] [INFO] Using worker: sync
[2021-08-23 14:48:21 +0000] [8] [INFO] Booting worker with pid: 8
[2021-08-23 14:48:21 +0000] [9] [INFO] Booting worker with pid: 9
[2021-08-23 14:48:21 +0000] [10] [INFO] Booting worker with pid: 10
[2021-08-23 14:48:21 +0000] [11] [INFO] Booting worker with pid: 11

ステップ6:ウェブサイトにIssoコードを埋め込む

手順3で説明した構成に基づいて、Isso埋め込みコードでWebサイトを更新する必要があります。

あなたはあなたのウェブサイトのどこにJavaScriptを埋め込むべきかを理解することができます。

<script data-isso="https://isso.domain.com/"
                data-isso-avatar="true"
                data-isso-vote="true"               
                data-isso-vote-levels="-5,5"
                src="https://isso.domain.com/js/embed.min.js"></script><
        <section id="isso-thread"></section>
ゴーストの手順

DockerベースのGhostのデプロイでは、プロセスは次のようになります。

ゴーストサーバーにログインし、ゴーストディレクトリに入ります:

cd ~/ghost

post.hbs ファイルは/var/lib/ghost/current/content/themes/theme-name/post.hbsにあります 。埋め込みを有効にするために現在使用しているテーマには、post.hbsのみを使用することを忘れないでください。ここでは、Casperテーマを使用しています。したがって、 theme-name ここにcasperがあります 。 Ghostコンテナのシェルに入ると、それを再確認できます:

[email protected]:~$ docker exec -ti ghost_ghost_1 bash -c "ls /var/lib/ghost/current/content/themes/casper/"
LICENSE    author.hbs	  error.hbs    package.json  post.hbs
README.md  default.hbs	  gulpfile.js  page.hbs      tag.hbs
assets	   error-404.hbs  index.hbs    partials      yarn.lock

docker cpコマンドを使用してファイルをコピーします:

docker cp ghost_ghost_1:/var/lib/ghost/current/content/themes/casper/post.hbs post.hbs

これで、Docker Composeファイルが存在する独自のセルフホストGhostディレクトリ内にファイルが作成されたので、そのファイルを開き、article-commentsセクション内に次のコードを埋め込みます。

    <section class="article-comments gh-canvas">
        <script data-isso="https://isso.domain.com/"
                data-isso-avatar="true"
                data-isso-vote="true"               
                data-isso-vote-levels="-5,5"
                src="https://isso.domain.com/js/embed.min.js"></script><
        <section id="isso-thread"></section>
    </section>

ここでは、 data-isso-vote ="true" 訪問者とdata-isso-vote-levels="-5,5"への投票を有効にします これらの値の範囲(この場合は-5から5)を設定できます:

新しく変更したファイルをGhostDockerCompose構成のボリュームセクションにマウントし、次のように更新します。

- ./post.hbs:/var/lib/ghost/current/content/themes/casper/post.hbs

この構成に基づいて、新しいGhostインスタンスをスケールアップします。

docker-compose up -d --scale ghost=2 --no-recreate

約1分後、まだ実行中の古いGhostコンテナを削除します。

docker rm -f ghost_ghost_1

シングルコンテナモードにスケールダウンします:

docker-compose up -d --scale ghost=1 --no-recreate

この時点で、ブログでのIssoの設定は正常に完了しています。

ステップ7:WebサイトのIssoコメントボックスにアクセスします

数分待ってから、Issoを構成したばかりのGhostドメインをブラウザーに指定します。

たとえば、ブログを domain.comでホストしている場合 、ブログ投稿の一番下までスクロールすると、コメントボックスがすぐに使用できるようになります!

コンテナの停止

コンテナを停止する場合は、Issoをダウンロードしたディレクトリ( / opt / isso )に移動してください。 この場合)Gitを使用し、次のコマンドを使用します:

docker-compose down

デプロイを再開するには、同じ / opt / issoで作業していることを確認してください ディレクトリと実行:

docker-compose up -d
ボーナスのヒント

Issoのセットアップに役立つ追加のヒントを次に示します。

Web管理インターフェース

WebインターフェイスでIssoコメントにアクセスしてモデレートすることもできることをご存知ですか?その目的に役立つ対応するURLは、 isso.domain.com/adminです。 。ここでは、サブドメインにissoを使用しました。ただし、これを有効にするには、 [admin]という追加のセクションを設定する必要があります 構成ファイル(ステップ3で説明)に次の内容が含まれています:

[admin]
enabled = true
password = plain-text-password

plain-text-passwordに注意してください 上に表示されているのは、文字通り、パスワードとして使用する値です。

ログインすると、Webインターフェイスは次のようになります。

DockerContentTrustを有効にしている場合

Dockerfileはnode:dubnium-busterを使用します ベースイメージとして、ビルドしようとしたときに有効な信頼データがないようです。 Dockerでは、コンテンツの信頼はデフォルトで無効になっています。ただし、有効にしている場合は、次のようなエラーが発生する可能性があります:

[email protected]:/opt/isso$ docker build . -t isso:0.12.2
WARN[0013] targets metadata is nearing expiry, you should re-sign the role metadata 
WARN[0013] snapshot is nearing expiry, you should re-sign the role metadata 
ERRO[0013] Can't add file /opt/isso/ansible/site.yml to tar: io: read/write on closed pipe 
Sending build context to Docker daemon    2.8MB
ERRO[0013] Can't close tar writer: io: read/write on closed pipe 
error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.41/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=isso%3A0.12.2&target=&ulimits=null&version=1: No valid trust data for dubnium-buster

そのため、必ず DOCKER_CONTENT_TRUSTを一時的に設定してください。 0として イメージを作成する前に(ステップ4):

export DOCKER_CONTENT_TRUST=0

1に戻します 画像を取得した後:

export DOCKER_CONTENT_TRUST=1
一等の更新

Issoの新しいバージョンがリリースされるたびに、リポジトリを別の場所に複製できます。

git clone https://github.com/posativ/isso.git isso-update
cd isso-update

この別の場所に移動した後( isso-update )、手順4に示すように、最新のバージョン番号を使用して新しいイメージを作成できます。それが完了したら、Isso Docker Composeファイルを編集し、そこでイメージのバージョン番号も更新します。

次に、新しいIssoコンテナーをスケールアップし、約1分待ってから、古いコンテナーを削除します。最後に、シングルコンテナモードにスケールダウンします(手順6の後半で説明します)。

投票が機能することを確認する

コメントに対する賛成票または反対票が機能しなかった理由を理解するのに少し時間がかかりました。 Issoは、これらのことに非常に注意深く、気を配っています。

別のIPアドレス(私の場合はモバイルデータ)からコメントにアクセスした後でのみ、賛成/反対投票を正常にテストできました。 Issoでのコメント投票をテストするには、VPNを使用することをお勧めします。

最終メモ

Issoアプリケーションとそのすべての機能の完全なリファレンスについては、Issoの公式ドキュメント、特にサーバーとクライアントのサブセクションを参照して、Issoを幅広く活用し、生産性を最大限に高めることができます。このガイドが、サイトで独自のコメントシステムをセルフホスティングするのに役立つことを願っています。提案、フィードバック、または質問がある場合は、以下のコメントセクションで共有できます。


Linux
  1. Dockerを使用してマイクロサービスをデプロイする方法

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. DISMを使用してシステムイメージを修復する

  1. straceを使用したLinuxでのシステムコールの理解

  2. nginx-413リクエストエンティティが大きすぎます

  3. Docker コンテナのファイル システムの探索

  1. Ubuntu16.04でNginxとPHP-FPMを使用してWordpressをDocker化する

  2. CentOS7にNginxを使用してDiscourseForumをインストールする方法

  3. Docker Compose、Nginx、SSL を使用した Apache で WordPress をインストールする