インストールが機能しません!

DigitalOcean のワンクリックアプリを使って新規インストールを試みています。
これは 3 回目の最初からの作成ですが、同じ問題に直面しています。
DNS を確認すると、ドメインが Droplet の IP を指していることは確認できますが、Discourse がドメインに表示されません。

discourse-doctor を実行すると、「ドメインが提供されている/提供されていない」情報が表示される前に処理が停止(フリーズ)してしまいます。

この挙動を引き起こすようなアップデートはありましたか?

「いいね!」 1

ワンクリックインストールはサポートされていません。

非常に簡素な公式インストール手順をご利用ください。

その後、何か問題が発生した場合は、こちらに投稿してサポートを受けることができます。

「いいね!」 6

@merefield 新しく Droplet を作成し、公式のインストール手順に従ってインストールを実行しました。しかし、全く同じ問題が発生したままです。

discourse-doctor がフリーズしています

また、ドメイン上で何も提供されていません。

これは公式インストールで完全に新しい環境です。何が起きているのか分かりません。何か手がかりはありませんか?

「いいね!」 1

@merefield ./launcher logs app を実行すると、以下が表示されます:

nginx: [emerg] cannot load certificate "/shared/ssl/mydomainname.de.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

ただし、これが何を意味するのかはわかりません。

「いいね!」 1

なので、/shared/ssl を参照しようとしているようですが、実際には SSL は shared/standalone/ssl にあります。これをどう修正すればよいでしょうか?

「いいね!」 1

問題は通常、DNS の設定が正しくないか、まだ反映されていないことにあります。URL を共有していただければ、誰かが確認できます。

よく https://dnschecker.org/#A/example.com を使って確認しています。

ただし、何度も試している場合は、Let’s Encrypt が証明書を発行できる回数が尽きている可能性が高いです。おそらくそれが現在の問題でしょう。90% の確信があります。Set up Let’s Encrypt with multiple domains / redirects - #53 に従って「裏技」を使うこともできますが、設定はより複雑になり、簡単な構成では実現できません。最も良い方法は、数日待ってから再度試すことです。

これは問題ではありません。/shared/ssl はコンテナ内のパスであり、shared/standalone/ssl はコンテナ外のパスです。

「いいね!」 4

@pfaffman ええ、それは確かにあり得ますね!それでもまだ作成できないのですが、別のドメインなら作成できます。DNS 検索で正しいサーバーに接続されていることが確認できているので、おそらくご指摘の通りだと思います。もう少し待ってから再度試してみます。
ありがとう :metal:

「いいね!」 2

@pfaffman チートについてお手伝いいただけますか?複数のドメインでの設定を確認しましたが、あなたが何を意図されているのか確信が持てません。何か after_ssl フックを使うことをおっしゃっているのでしょうか?

「いいね!」 1

他のドメインを追加するだけです。つまり、フォーラムが forum.example.com の場合、cheat.example.com の DNS レコードをサーバーを指すように追加し、そこに記載されている手順に従って追加します。これは異なる証明書のリクエストとなるため、リクエストを許可されます。

「いいね!」 1

@pfaffman 私は Digital Ocean を使用しています。cheat.example.com を A レコードとして追加しましたが、設定時にドメインとして認識されません。

(警告: コンピューターのポート 443 がアクセス可能なようではありません)

手順に従って再構築しましたが、それでも「サイトにアクセスできません」という表示のままです。:thinking:

他の設定については、app.yml ファイルの hooks: セクションに以下の内容を追加しました。

  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com"

あるいは、この方法でドメインまたはサブドメインを 1 つ追加することもできます。レート制限に達してしまった場合の簡単な回避策です。ただし、レート制限に達しないようにするためには、常にテスト環境である --dryrun を使用するのが最善です。(Let’s Encrypt は現在、--dryrun を、非英語圏のユーザーにとってよりわかりやすい名称(例えば --test--testrun など)に改名する可能性を検討しています。おそらくその変更は 2021 年 1 月以降になるでしょう。彼らはガイドの完全な書き直しにも取り組んでいます。:slightly_smiling_face:


既存の証明書に新しいドメインを追加するための推奨方法は、元のコマンドラインを再利用し、新しいドメインをもう一つの -d フラグで追加し、--expand を追加して certbot に新しいレガシー(これにより /etc/letsencrypt/live に新しいサブディレクトリが作成されることになります)を作成させないよう指示することです。

「いいね!」 3

ここで問題なのは、手遅れになるまでそれがテストであることがわからない点です。また、Discourse をテストモードでその証明書を取得するように設定する方法が、私にも明確ではありません。

私が伝えようとしていたのはその点です。

「いいね!」 1

それが、彼ら(Let’s Encrypt)がガイドを再編している理由の一つです。より明確にするためです。テスト環境を使用してテスト(偽)証明書を取得する設定が完了したら、本番モードで Certbot を実行して CA を取得できます。その後、Discourse をインストールすれば、新しい(拡張された)CA を自動的に取得するはずです。

:+1:

そうではありません。app.yml にスイッチを追加するためのセクション(stanza)を追加する方法を特定すること—それがどれだけ自明に見えようとも—は、Discourse のインストールよりも約3倍(あるいは10倍)も難しいのです。app.yml を編集して複雑なものを追加し、スペースを完璧に整える必要があるのでしょうか?1週間待つか、新しい名前を選んでください。

「いいね!」 2

@pfaffman 説明した通り、新しい名前を選択しました。一つの問題は、cheat.example.com が A レコードではなく CNAME であるべきだったことです。

それでもまだ動作しません。もう少し時間をかけてみます。

編集: 参考までに、私の app.yml は以下の通りです:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Lets Encrypt (https) を追加したい場合は、以下の 2 行のコメントを外してください
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## db_shared_buffers を総メモリの最大 25% に設定します。
  ## ブートストラップによって検出された RAM に基づいて自動的に設定されますが、上書きすることもできます
  db_shared_buffers: "256MB"

  ## ソートパフォーマンスを向上させることができますが、接続ごとにメモリ使用量が増加します
  #db_work_mem: "40MB"

  ## このコンテナが使用する Git リビジョンはどれですか?(デフォルト: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
  # DISCOURSE_RELATIVE_URL_ROOT: /forum
  ## 同時ウェブリクエストを何件サポートするか?メモリと CPU コア数に依存します。
  ## ブートストラップによって検出された CPU に基づいて自動的に設定されますが、上書きすることもできます
  UNICORN_WORKERS: 4

  ## TODO: この Discourse インスタンスが応答するドメイン名
  ## 必須です。Discourse は IP アドレス単独では動作しません。
  DISCOURSE_HOSTNAME: cheat.example.com

  ## 上記で指定したホスト名(-h オプション)と同じホスト名でコンテナを起動したい場合は、以下の行のコメントを外してください(デフォルト: "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初期登録時に管理者および開発者として設定される、カンマ区切りのメールアドレスのリスト
  ## 例: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'emails@emails.com'

  ## TODO: 新しいアカウントの検証や通知の送信に使用する SMTP メールサーバー
  # SMTP アドレス、ユーザー名、パスワードは必須です
  # 警告: SMTP パスワードに含まれる '#' 文字は問題を引き起こす可能性があります!
  DISCOURSE_SMTP_ADDRESS: smtpout.secureserver.net
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: some@email.com
  DISCOURSE_SMTP_PASSWORD: "apassword"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)

  ## Lets Encrypt テンプレートを追加した場合は、以下の行のコメントを外して無料の SSL 証明書を取得してください
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## この Discourse インスタンスの http または https CDN アドレス(取得用に設定)
  ## 詳細は https://meta.discourse.org/t/14857 を参照してください
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## プラグインはここに追加します
## 詳細は https://meta.discourse.org/t/19157 を参照してください
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com --expand"
 
「いいね!」 1

結局、1週間が過ぎ、ドメインを再度使えるようになりました。サブドメインとの連携設定に何かミスがあったのでしょう。LetsEncryptの情報を確認したところ、これが解決策だと確信しています。

@pfaffman@JimPas さん、ご協力と有益な回答をありがとうございます!

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.