まとめ

  • 適当に Ubuntu / t2.medium / 8GB でインスタンスを作る
  • Dockerをインストール
  • Polisをインストール
    • localhost以外で動かすならSSL証明書が必要

log on 2023-05-22 適当に Ubuntu / t2.micro / 8GB でインスタンスを作る

  • インスタンスを起動したらすぐブラウザ上からターミナルに接続できる風の画面が出て「べんりになったんだなー」と思ってクリックしたらインスタンスが起動中だから接続できなくてズッコケた

Dockerをインストール

Polisをインストール

  • GitHub - compdemocracy/polis: Open Source AI for large scale open ended feedback
  • $ git clone https://github.com/compdemocracy/polis.git
  • $ sudo apt install make
  • READMEに従う
  • $ cp example.env .env
  • $ make start
    • docker compose -f docker-compose.yml -f docker-compose.dev.yml --env-file .env up
    • ERROR: permission denied while trying to connect to the Docker daemon ...
    • gpt-4.icon - Dockerのデーモンはrootユーザーとして実行され、デフォルトでは他のユーザーはそれと対話できません。これが"permission denied"エラーが表示される理由です。 - この問題を解決するためには以下の手順を試してみてください: - ユーザーをdockerグループに追加する:これがこの問題を解決するための推奨される方法です。以下のコマンドでユーザーをdockerグループに追加できます: - `$ sudo usermod -aG docker $USER` - このコマンドを実行した後、グループのメンバーシップを再評価するためにログアウトして再度ログインする必要があります。
    • 直った!

10分経ってもビルドが終わらない

SSL証明書

  • image
  • メインREADMEで説明されているDocker Composeインフラストラクチャは、安全でない自己署名SSL証明書を使用しています。これは事前に生成され、ソースコードに公開されて保存されています。このHTTPSの実装は、テストにのみ適しています。

  • 後でやる

create account

  • ERROR: unauthorized domain: https://3.87.68.32 server.ts
if (
  !domainOverride &&
  !hasWhitelistMatches(host) &&
  !routeIsWhitelistedForAnyDomain
) {
  logger.info("not whitelisted", { headers: req.headers, path: req.path });
  return next("unauthorized domain: " + host);
}
  • .env
    • image
  • localhostではないから、この辺の設定をやる必要があるのか
  • できた
    • image

SSL証明書

  • 自分が管理してるDNSにAレコードを追加
  • nslookupでちゃんと引けることを確認
  • ブラウザでアクセスしてみる
    • このサイトにアクセスできません DNS_PROBE_FINISHED_NXDOMAIN

    • gpt-4.iconLocal DNS Cache: Your computer stores a local DNS cache to speed up the resolution of domain names. If this cache is outdated or corrupt, it can cause this error. You can clear your local DNS cache with the following command …
      • (OSX) % sudo killall -HUP mDNSResponder
    • ERR_CONNECTION_REFUSEDに変わった
      • あ、サーバ起動してなかった
  • Let’s Encryptのcertbotは80を使うのでPolisのサーバを建てた状態ではダメ :
Certbot failed to authenticate some domains (authenticator: standalone). The Certificate Authority reported these problems:
  Domain: *****
  Type:   dns
  Detail: DNS problem: NXDOMAIN looking up A for ***** - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for ***** - check that a DNS record exists for this domain
  • DNSのせいかと思って少し待ったりしてたが、違うなこれ
    • EC2のセキュリティルールで443と22しか開けてなかった
    • 80番を開けて、外からアクセスできることを確認
      • $ sudo python3 -mhttp.server 80
  • @nishio: SSL証明書の作り方とかよくわからない素人質問なんですけど、30分ほど前に新しくDNSにAレコードを書き足したサブドメインに対してLet’s Encryptで証明書を作ろうとしてNXDOMAINエラーになるのって、しばらく待つしかないんですかね

    • (単純にドメイン名を間違えてただけかもorz)

証明書ができた file-server/nginx.Dockerfilefile-server/nginx/nginx-ssl.site.default.confをいじる

  • nginx-ssl.site.default.confはコピーした diff
--- a/file-server/nginx.Dockerfile
+++ b/file-server/nginx.Dockerfile
@@ -1,10 +1,12 @@
 FROM docker.io/nginx:1.21.5-alpine
 
-COPY nginx/nginx-ssl.site.default.conf /etc/nginx/conf.d/default.conf
+COPY nginx/nginx-ssl.site.nhiro.conf /etc/nginx/conf.d/default.conf
 
 # We only use these in testing.
 COPY nginx/certs/snakeoil.cert.pem /etc/nginx/certs/snakeoil.cert.pem
 COPY nginx/certs/snakeoil.key.pem  /etc/nginx/certs/snakeoil.key.pem
+COPY fullchain.pem /etc/nginx/certs/fullchain.pem
+COPY privkey.pem /etc/nginx/certs/privkey.pem

conf.diff

     server_name _;
 
-    ssl_certificate /etc/nginx/certs/snakeoil.cert.pem;
-    ssl_certificate_key /etc/nginx/certs/snakeoil.key.pem;
+    ssl_certificate /etc/nginx/certs/fullchain.pem;
+    ssl_certificate_key /etc/nginx/certs/privkey.pem;
     ssl_session_timeout 10m;
  • $ docker compose up --detach --build --no-deps nginx-proxy
  • 本当はLet’s encryptのcertbotが自動更新するみたいなので証明書ファイルをその置かれてる場所から取ってくるのがよいが、面倒なのでcpした
    • ファイルの置き場所や、ディレクトリやファイルの所有者がrootであること、パーミッションなどの影響で読み込めなかった場合に、わかりやすくエラーが出て止まるのではなく単にサーバに繋がらなくなる、何が原因かを調べるのがめんどくさかった
    • 最終的に証明書をsudo cpしただけだとダメでchmod 666したら動いた

しばらく経ったらBad Gatewayで死んでた polis-dev-nginx-proxy-1 | 2023/05/24 04:16:35 [error] 32#32: *12492 connect() failed (111: Connection refused) while connecting to upstream, client: ::ffff:133.200.136.32, server: _, request: "GET /7xrm9snjcc HTTP/2.0", upstream: "http://172.18.0.5:5000/7xrm9snjcc", host: "polis.nhiro.org", referrer: "https://t.co/" うーん、nginxの先で死んでるのか 開発の観察目的で開発サーバをそのまま本番運用しているのでアクセスが集中するとダメなのかもな 原因究明のためにログを見ると良さそう、どこだろ

詳細レポート表示がエラーになる

  • GET /report/undefined/api/v3/reports?report_id=r2bafdsneascdm6sbmnad 404

    • undefined
  • レポート画面だけ.envからURLのプレフィックスを読んでる
  • 指摘されてないときにdocument.originを代わりに使っているが、それがundefined

from /villagepump/2023/05/24 /villagepump/inajob.icon

  • UIが同じなので、ログインできてないのを謎に感じた(当然なのだけど)
  • ログイン導線のリンクをクリックすると本家のPolisに飛ばされるので、混乱した
  • Twitter連携が出来ない(キーの設定をしていない?)
    • してないかも!/villagepump/nishio.icon
      • 意見投稿が匿名でできるようにしてある、管理者の作ったシード意見と参加者の投稿した意見は区別つかなくなってます
  • 経緯: 社内で発生した議論をPolisにつっこみたかった/villagepump/nishio.icon
    • pol.isは「外部クラウドサービス」扱いになるので面倒
      • サクッと立てて社内の目的で使う手順がわかりやすくなれば世の中のために有益だと思う/villagepump/nishio.icon
        • 特に僕は「これ民間企業内の意思決定にも有益では?」と思ってるので。 — polisってログインせずに投票できたんだ/villagepump/takker.icon
  • 投票して離れると自分の投票結果をロストしてしまう。どうしたらいいのかわからない/villagepump/issac.icon
    • 連携するツイッターがないので、アイコンからも遡れない
      • 自分が投票したという記憶のみが残る
    • 連携しても各質問のどれに答えたかは見ることができない(はず)/villagepump/inajob.icon
      • 過去に答えた投票一覧などもない(欲しい)
      • 図が出たときにアイコンが自分のものになるのと、追加質問があったときにメール通知が来るだけという理解
      • 色々いじっていきたい(そのための自前インスタンス)/villagepump/nishio.icon