haskell-jp/haskell-jp-wiki

Herokuのstackのupgrade

igrep opened this issue · 17 comments

igrep commented

現在、当wikiはHerokuのCedar-14というstack(Herokuで言うところのOSのイメージらしいです)で動いてますが、それがEOLを迎えるので更新せよ、というメールが今日来ました。

個人的な別のアプリで試してみたところ、どうやら「更新する」ボタンを押した上で再デプロイするだけでできるようです(まだ再デプロイまではしてません。ちょっと古すぎるアプリなので、デプロイもできませんでした。それはこのまま廃止しようと思います...)。
ただ、👇のドキュメントでは一旦テストせよ、とは言ってますが...。

https://devcenter.heroku.com/articles/upgrading-to-the-latest-stack

igrep commented

これ、ちょっと考えてみましたが、特にこのWikiが心配ですね...
現在このWikiは https://github.com/mietek/gitit という、Herokuにデプロイできるようフォークしたgititを使っているのですが、こちらのリポジトリーはすでにarchivedですし、関連するウェブサイトも今や無反応ですので、明らかにサポートされてません。
別の方法を探すところからでしょうかね...

igrep commented

今のHerokuはDockerイメージさえあれば実行できるはずなので、そのアプローチでやるのが筋でしょうなぁ。

Heroku の設定ってどこかにありますか?

igrep commented

buildpackのことでしたら https://github.com/mietek/haskell-on-heroku を使っています。
他の設定は、環境変数ぐらいですが、privateなものが大半ですね。。。

igrep commented

現在の形に移行したときの記録も一応共有しておきます。
https://the.igreque.info/posts/2014-12-20-haskelljp-wiki-on-heroku.html

なるほど、Heroku の環境変数を使って動的に .conf ファイルを生成してるんですねw
mietek/gitit@5490faa#diff-6c361d1b4b84074733650a27c716c748

パワフルだ

.conf は複数指定できるし、別に全部を環境変数で渡す必要はないんじゃない?(そもそもしてないかもだけど)
https://github.com/jgm/gitit#configuration-options

[Github] のあたりとか private にしといた方が良いものだけ環境変数で指定して、他は public に置いても。
今は環境変数で全部指定してるんですか?

igrep commented

https://the.igreque.info/posts/2014-12-20-haskelljp-wiki-on-heroku.html で詳細を解説してますが、👇 がすべてです(秘匿すべき情報は **** としています)。

BUILDPACK_SSH_PRIVATE_KEY: ****
BUILDPACK_URL: https://github.com/mietek/haskell-on-heroku
GITIT_AUTHENTICATION_METHOD: github
GITIT_GIT_URL: git@github.com:haskell-jp/haskell-jp-wiki.git
GITIT_GIT_USER_EMAIL: whosekiteneverfly@gmail.com
GITIT_GIT_USER_NAME: gitit
GITIT_OAUTH_CALLBACK: http://wiki.haskell.jp/_githubCallback
GITIT_OAUTH_CLIENT_ID: ****
GITIT_OAUTH_CLIENT_SECRET: ****
GITIT_WIKI_TITLE: Haskell-jp wiki

この辺の環境変数をいじる以外のことは変えてません。

なるほど、そもそも大した量なかった 👍

igrep commented

https://github.com/jgm/gitit#authentication-through-github 曰く、現状のGititはGitHubアカウントでのログインをサポートしているらしい。後はこれに加えてgithubとの同期が出来れば、現状の要件は概ね満たせる。

igrep commented

gititのissueにこんなコメントがあった: jgm/gitit#320 (comment)
post-commit hookを仕込め、と。なるほど。git-annexが必要な理由がよくわからないけど、確かにそれならgitit自身に変更を加える必要がないので楽そう。

どうやらmietekさんもpost-commitを使ってGitHubとの同期を実現してたみたい。想像以上にシンプルなやり方だった 😅 jgm/gitit@master...mietek:master#diff-6c361d1b4b84074733650a27c716c748R142

igrep commented

要するのこのdiff jgm/gitit@master...mietek:master でやっていることのうち、必要な箇所をいい感じに今のHerokuの流儀(Docker)に翻訳すればいいってことか。
mmlh-reporterをデプロイしたときの経験が少しは生かせそうだ。

igrep commented

📝 直接gitit.confに書く、などの事情で環境変数にしなくて良くなるもの
⚠️ 移行が終わり次第紛らわしいので削除すること!)

  • GITIT_WIKI_TITLE
  • GITIT_OAUTH_CALLBACK
  • GITIT_AUTHENTICATION_METHOD
  • buildpackはもう使わないので要らない:
    • BUILDPACK_SSH_PRIVATE_KEY: DEPLOY_SSH_PRIVATE_KEY という名前に => どうもsshでのgit cloneが(なぜかheroku上でだけ)うまくいかないので削除
    • BUILDPACK_URL: 削除
igrep commented

📝 手元のdockerからだと問題ないのになぜかherokuにデプロイするとsshで git clone ができない、という事象を解決できないので、やっぱりhttpsでcloneすることにした。
そのため、 GITIT_GIT_URLhttps://<user>:<personal_access_token>@github.com/igrep/haskell-jp-wiki.git みたいな形式にする必要がある。

igrep commented

試しに本番環境の GITIT_GIT_URL を編集して問題ないことが確認できた。
ユーザーを @haskell-jp-bot にしたのでコミットユーザーが変わっている。
9bbc3ea

igrep commented

あとは #11 を本番向けの設定に書き換えてsquash mergeすればすべてが終わるはず。