デフォルトっぽいアプリが再ビルドされない

こんにちは、この ガイド を使って Linux マシンにデフォルトの Discourse をセットアップしました。非常にスムーズに進み、サイトも問題なく起動しました。

ユーザーが Facebook 経由で接続できるようにしようと思い、上記のリンクから参照されている Facebook の手順に従いました(もう一度リンクを貼ろうと思いましたが、新規ユーザーは投稿できるリンクが 2 つまで apparently のようです)。その結果、接続はうまくいきませんでしたが、サイト自体は引き続き稼働していました(Facebook でログインしようとした際のエラー内容は覚えていません)。

Facebook のドキュメントを確認している際に、HTTPS を有効にする必要があるという記述を見つけ、こちらのドキュメント に従って設定を進めました。./launcher rebuild app まで順調に進んだのですが、そこで PostgreSQL のエラーが発生しました。PostgreSQL の設定には何も手を加えていない(少なくとも私の記憶では)ので、驚きました。最初のエラーは以下の通りです:

INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

PostgreSQL サービスは停止させていませんが、service start postgres を実行すると「インストールされていない」というメッセージが出ました。つまり、私が慣れている方法とは異なる方法で自動的にインストールされているのでしょう。何か考えられるミスはありますか?よろしくお願いします。

私の container/app.yml は以下の通りです:

templates:
  - "templates/web.template.yml"
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"

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

params:
  db_default_text_search_config: "pg_catalog.english"

  db_shared_buffers: "128MB"

env:
  LANG: en_US.UTF-8
  LETSENCRYPT_ACCOUNT_EMAIL: 'myotheremail@gmail.com'
  UNICORN_WORKERS: 2

  DISCOURSE_HOSTNAME: mysite.com

  DISCOURSE_DEVELOPER_EMAILS: 'myemail@gmail.com'

  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: myemail@gmail.com
  DISCOURSE_SMTP_PASSWORD: "myPa$$word"

  ## The http or https CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

run:
  - exec: echo "Beginning of custom commands"
  - exec: echo "End of custom commands"

公式ガイドに従っていた場合、HTTPS は自動的に設定されるはずです。リンクされたガイドの最上部に以下の注意書きがあります。

はい、その通りです。私はその手順に従いました。最初は Facebook ログイン接続ガイドに進みましたが、それが問題の原因だとは思いません。あなたが投稿したガイドを一通り確認した後、https へ進み、上記に挙げた問題に直面しています。

はい、一度立ち止まって整理しましょう。

以下の 2 つのガイドだけFollowすれば十分です。

HTTPS はデフォルトで有効になっているため、以下のガイドはFollowしないでください

可能であれば最初からやり直し、Facebook でログインしようとした際に発生するエラーがあれば報告してください。

はい、最初のガイドを完成させた時点でサイトは公開されていましたが、HTTPSではありませんでした。有効にするまでHTTPSにはならないものだと思っていました。指示を再度確認します。何か理解しそこなっていたのかもしれません。その後、また報告します。

アプリを再起動しましたが、これらの手順の中で、Let’s Encrypt 方式(一番下)以外に証明書に関連する部分がどこにも見当たりません。HTTPS としてサイトを設定する方法がどこにあるのか見当たりません。何が不足しているのでしょうか?これらの手順のどこで HTTPS の設定が行われるのか、具体的に指し示していただけますか?

すべての処理は裏側で行われます。最後の設定ステップでメールアドレスを入力すると:

ENTER キーを押してスキップしてしまったことに気づかないかもしれません。その場合、設定を再実行するか、Let’s Encrypt の手順に従うのが最も良いでしょうか。現時点でサイトに少しコンテンツがあるため、それが消去されないようにしたいことを念頭に置いてください。(再度、お手伝いいただきありがとうございます)

再度 discourse-setup を実行し、Let’s Encrypt のアドレスを入力してください。

素晴らしい機能ですね。初めて見逃していたなんて、自分がばかげた気がします。ご対応いただき、二人とも、そしてチームの皆さんに感謝します。

もっと早く理解できるよう、言い方を変える方法はありますか?

そうだと思います。サーバー作業にはかなり慣れているのですが、Let’s Encrypt が登場してからはあまり活動していなかったため、もしセットアップがそのまま動作するものなら、ドキュメントに証明書の取得に関するセクションがあるはずだと勝手に思っていました。しかし、そのようなセクションがなかったので、別のステップで行う必要があると判断しました。そのページには、./disource-setup コマンドの出力以外に Let’s Encrypt に言及する箇所は何もありません。もしかすると、「Discourse 設定の編集」セクション(コマンド実行前)に、「HTTPS を使用したい場合は Let’s Encrypt 欄に何らかの情報を入力する必要があります」といった注記を追加すると良いかもしれません。私はそのページで HTTPS 関連の情報を探そうとはしましたが、「https」という文字列が見つからなかったため(Ctrl+F で検索)、そこに記載されていないと誤解しました。「https」や「cert」で検索しても該当する箇所がなかったため、別の手順が必要だと推測したのです。

正直に言うと、もし私がより頻繁にウェブサイトのホスティング作業を行っていたなら、Let’s Encrypt にもっと早く気づき、すぐに状況が理解できたでしょう。もしかすると、「必要なもの」セクションに、Let’s Encrypt に関連するメールアドレスの記載があれば、より分かりやすかったかもしれません。

これを批判的に受け取ってほしくありません。ドキュメント自体は素晴らしいものであり、問題の原因は私の人間によるミスでした。

なるほど。どの言葉ですか?

私の返信の残りの部分が読めなかったのかどうかわかりませんが、私が適切だと思う修正を PR として提出することにします。ただ、ドキュメントに証明書処理について言及するのが良いと思います。

ああ、なるほど!インストールに関するクラウドドキュメントではそれが明確になっていないのですね。その通りだと思います。

discourse-setup の表現を確認して、Let’s Encrypt が何かをより明確に説明すべきか検討します。ユーザーがそれを既知だと仮定すべきではないのは確かですから。

ありがとうございます。