Herokuのstackのupgrade
igrep opened this issue · 17 comments
現在、当wikiはHerokuのCedar-14というstack(Herokuで言うところのOSのイメージらしいです)で動いてますが、それがEOLを迎えるので更新せよ、というメールが今日来ました。
個人的な別のアプリで試してみたところ、どうやら「更新する」ボタンを押した上で再デプロイするだけでできるようです(まだ再デプロイまではしてません。ちょっと古すぎるアプリなので、デプロイもできませんでした。それはこのまま廃止しようと思います...)。
ただ、👇のドキュメントでは一旦テストせよ、とは言ってますが...。
https://devcenter.heroku.com/articles/upgrading-to-the-latest-stack
これ、ちょっと考えてみましたが、特にこのWikiが心配ですね...
現在このWikiは https://github.com/mietek/gitit という、Herokuにデプロイできるようフォークしたgititを使っているのですが、こちらのリポジトリーはすでにarchivedですし、関連するウェブサイトも今や無反応ですので、明らかにサポートされてません。
別の方法を探すところからでしょうかね...
今のHerokuはDockerイメージさえあれば実行できるはずなので、そのアプローチでやるのが筋でしょうなぁ。
Heroku の設定ってどこかにありますか?
buildpackのことでしたら https://github.com/mietek/haskell-on-heroku を使っています。
他の設定は、環境変数ぐらいですが、privateなものが大半ですね。。。
現在の形に移行したときの記録も一応共有しておきます。
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 に置いても。
今は環境変数で全部指定してるんですか?
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
この辺の環境変数をいじる以外のことは変えてません。
なるほど、そもそも大した量なかった 👍
https://github.com/jgm/gitit#authentication-through-github 曰く、現状のGititはGitHubアカウントでのログインをサポートしているらしい。後はこれに加えてgithubとの同期が出来れば、現状の要件は概ね満たせる。
gititのissueにこんなコメントがあった: jgm/gitit#320 (comment)
post-commit hookを仕込め、と。なるほど。git-annexが必要な理由がよくわからないけど、確かにそれならgitit自身に変更を加える必要がないので楽そう。
どうやらmietekさんもpost-commitを使ってGitHubとの同期を実現してたみたい。想像以上にシンプルなやり方だった 😅 jgm/gitit@master...mietek:master#diff-6c361d1b4b84074733650a27c716c748R142
要するのこのdiff jgm/gitit@master...mietek:master でやっていることのうち、必要な箇所をいい感じに今のHerokuの流儀(Docker)に翻訳すればいいってことか。
mmlh-reporterをデプロイしたときの経験が少しは生かせそうだ。
📝 直接gitit.confに書く、などの事情で環境変数にしなくて良くなるもの
(
GITIT_WIKI_TITLEGITIT_OAUTH_CALLBACKGITIT_AUTHENTICATION_METHOD- buildpackはもう使わないので要らない:
BUILDPACK_SSH_PRIVATE_KEY:=> どうもsshでのgit cloneが(なぜかheroku上でだけ)うまくいかないので削除DEPLOY_SSH_PRIVATE_KEYという名前にBUILDPACK_URL: 削除
📝 手元のdockerからだと問題ないのになぜかherokuにデプロイするとsshで git clone ができない、という事象を解決できないので、やっぱりhttpsでcloneすることにした。
そのため、 GITIT_GIT_URL を https://<user>:<personal_access_token>@github.com/igrep/haskell-jp-wiki.git みたいな形式にする必要がある。
試しに本番環境の GITIT_GIT_URL を編集して問題ないことが確認できた。
ユーザーを @haskell-jp-bot にしたのでコミットユーザーが変わっている。
9bbc3ea