複数ドメイン / リダイレクトでLet's Encryptを設定

@pfaffman さん、元の投稿の編集で to: 行に誤った + があり、正規表現が壊れています。削除する必要があります。

また、以下の段落は意味が通らなくなったため、編集が必要です。

置き換える必要があるパターンは 2 つあり、1 つは --keylength で終わり、もう 1 つは --fullchainpath で終わります (実際のファイルでは、元のドメインがこれらのスイッチの前にあります)。(サブ)ドメイン (および -d で先行する追加のサブドメイン) を入力し、次に app.yml のフックセクション (ファイルの末尾近く) に以下を追加します。

以下を提案します。

この投稿の domain1domain2 を使用して、必要なコードを生成します。domain1 は元のドメイン、domain2 は追加したいドメインです。結果の after_ssl: ブロックを app.ymlhooks: セクションに追加し、launcher rebuild app を実行してください。

「いいね!」 1

おっと。プラス記号を削除して、テキストを微調整しました。コンピューターで確認できるときに、もう一度確認します。

@textkitさん、これはウィキなので、必要であればさらに編集できます。

3.5.0.beta8-dev への最後のアップデート以降、

/etc/runit/1.d/letsencrypt

が Docker コンテナに存在しないため、ビルドできません。回避策: https://www.forcewww.com/

そのため、以下が機能しなくなりました。

## 非 www および www ドメイン名の Let's Encrypt 証明書を追加
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d example.de -d www.example.de --keylength"

このようなツール/バイナリを Docker コンテナから削除する前に、通知を受け取ることができれば幸いです…

「いいね!」 4

これは、Discourse が LetsEncrypt を処理する方法の変更ですか、それとも LetsEncrypt 自体の変更ですか?

現在、この問題でサーバーが混乱しています。今のところ、app.yml のその部分をコメントアウトするのが回避策ですが、将来的にはこれらの追加証明書をセットアップに追加する方法が必要だと感じています。

「いいね!」 2

Discourse はそれを別のファイルに移動しました。現在作業中です。数日中に、複数のサブドメインをサポートできるようにするために何が必要かを確認してみます。

「いいね!」 2

OPを新しいテンプレートで編集しましたが、まだテストしていません。

「いいね!」 1

いいえ、これは機能しません。

FAILED

Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace failed with the params {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz/”, “to”=>“-d spokes.nz -d www.spokes.nz”}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

「いいね!」 2

早すぎるようです。

もし意味が通じるなら、sshのものがあった一番下のスタンザにreplaceを置いてみてください(携帯からなので、明日確認してみます)

「いいね!」 1

こんにちは、@nathankさん

推測ですが、あなたが受けているエラーは、app.yml ファイルの提案されたスタンザの各行の最後のスラッシュと最後の引用符の前にスペースが欠けていることが原因ではないかと思います。

エラーメッセージから推測すると、あなたの各行は次のようになっていると思われます(原文のまま)。

from: /-d spokes.nz/
to: “-d spokes.nz -d www.spokes.nz”

私がそう言うのは、私の場合は次のようになっているからです。

from: /-d nzarchitecture.net.nz /
to: "-d nzarchitecture.net.nz -d www.nzarchitecture.net.nz "

このように、各行の末尾の直前にスペースを入れると、エラーを発生させることなく Discourse を再構築できるようになりました。(よく見ると、このスレッドの冒頭に投稿された @pfaffman さんの更新されたスタンザに、これらの余分なスペースが表示されていることがわかります)。

エラーメッセージで指摘されているように、私も usr/local/bin/ ディレクトリには全くファイルがありません。そのため、この Let’s Encrypt ファイルがないことがエラーを引き起こす原因ではないと疑っています。

とはいえ、私の場合は Discourse は nzarchitecture.net.nz の URL で正常に動作しますが、残念ながらブラウザで www.nzarchitecture.net.nz と入力すると証明書エラーが発生します。この原因がそのファイルの欠如によるものかどうかはわかりません。

「いいね!」 2

現在、これを環境変数にロールインして、discourse_docker で直接処理しようとしています。ホスト名のエイリアスのコンマ区切りのリストのようなものです。これは直接処理するには十分一般的なユースケースのようです。

これにより、このケースの設定が容易になり、誰も app.ymls を変更する必要がなくなります。

私の現在の計画は、DISCOURSE_HOSTNAME www.domain.com を使用することです。

以下のような環境を許可します。
DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com は、証明書を取得し、すべてのホスト名で有効になります。

(ついでに、Let’s Encrypt の自動更新も正常に機能していないようなので、それらも修正しています)

「いいね!」 8

素晴らしいですね!どうもありがとうございます。これで間違いなく楽になります!

「いいね!」 3

見落としていました!ご提案通りにしましたが、ブートストラップに失敗しました。

FAILED

Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace failed with the params {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz /”, “to”=>"-d spokes.nz -d www.spokes.nz "}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

素晴らしい!!!

「いいね!」 3

おそらく中心的な問題ではありませんが、試行錯誤する中で、Digital Oceanで実行されているDockerのバージョンも20.0.4(だったと思います)から28.3.3に更新しました。それがこのエラーの解決に役立ったのかもしれません。少なくとも、再構築プロセスの開始時に受けていたDockerの「非推奨」警告はなくなりました。

「いいね!」 1

Let’s Encrypt ファイルを変更しようとする部分を削除し、PR が承認されるのを待つ必要があります。

「いいね!」 2

わかりました!幸い、私は2つのコンテナインストールを使用しているので、それは大したことではありません。

これまでに何か進展はありましたか?

「いいね!」 1

はい、レビュー待ちのプルリクエストをこちらで開いています。

「いいね!」 4

皆さん、フォローアップですが、マルチドメインがマージされました。最新バージョンの discourse_docker では、ssl および letsencrypt テンプレートを含め、DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com の形式で環境変数を設定することで、代替ホスト名をセットアップできます。

サイトは、追加の設定変更なしで、証明書リクエストとともに構成されたホスト名をプルします。

「いいね!」 4

無知をお許しください。これはサイト設定で編集できますか、それとも app.yml で編集する必要がありますか?

前者の場合、最新版にアップデートした後、見つけることができませんでした。後者の場合、app.yml で具体的に何を調整すればよいですか?

app.yml に記述します。これは Discourse ではなく、コンテナ内の NGINX によって処理され、Discourse データベースにアクセスできません。

ENV セクションに記述します。

env:
   DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

追加したいドメインのみを含めます。これにより、サイトの実際のホスト名にリンクしてリダイレクトできるようになります。

「いいね!」 3

完璧です。すべて機能しています。ありがとうございます!

管理者が提供したエイリアスを、次回の更新時にapp.ymlに書き込む、またはapp.ymlの指示が読み取れる場所に情報を残すような、気の利いた方法があればさらに良くなるでしょう。

「いいね!」 2