Issoは、独自のDisqusの優れた代替手段として機能できるオープンソースのコメントソフトウェアです。
ブログやウェブサイトにコメントシステムを追加するために使用できます。
JavaScriptが埋め込まれているため、WordPress、Ghost、その他多くのフレームワークで動作します。ここでは、実例としてGhostを使用しました。
このドキュメントでは、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を幅広く活用し、生産性を最大限に高めることができます。このガイドが、サイトで独自のコメントシステムをセルフホスティングするのに役立つことを願っています。提案、フィードバック、または質問がある場合は、以下のコメントセクションで共有できます。