mkdocs+CircleCIでmarkdownで書いた文書を自分のサーバにデプロイ
Google Playで公開しているアプリのプライバシーポリシーの管理をもうちょっとらくできないかなと思って作業を始めた。
- MkDocsを使う
- リモートリポジトリとしてBitBucketを使う
- CircleCIでビルド
- 自分のサーバにデプロイ
という環境を構築した。
MkDocsは特にこだわりがあったわけではないが、まあプライバシーポリシーをmarkdownで書けてHTMLで公開できれば何でも良かった。
軽く触ったところ マテリアルデザインなテーマを簡単に組み込めるのがよい。デザインに脳みそを割かなくていいのは楽だ。
苦労したのはCircleCIの設定だ。
ローカルではmkdocs serve
でレンダリングの確認だけして(おそらく最終的にはそれすらしなくなるだろうけれど)、リモートリポジトリにpush、CircleCIでmkdocs build
して、最後にビルドされたHTMLをscpを使って自分のサーバにアップロードするという方針。
私のサーバはユーザ名+パスワードによる認証は許可していないので、公開鍵認証を使うのだが、この設定がうまくいかなくて困った。
そもそもscpで転送するのに使う鍵のファイルを指定するのにハマった。
add_ssh_keysでCircle CIに登録したSSH認証鍵のフィンガープリントを追加してやる必要があった。これをしないと、deploy用のスクリプトから認証に使う鍵が参照できない。
そこをクリアしたら今度は別の問題でハマる。
Circle CIからscpで自分のサーバに接続する際に、Are you sure you want to continue connecting (yes/no)?
で止まってしまうのである。known_hostsにないからというのは分かるが、どうやってそれを登録するのかというのがわからなかった。
なんとも頭のわるいやり方ではあるが、以下の方法で乗り越えた。
- ssh経由のデバッグを利用してCircle CIにログイン
- sshコマンドを使って手動でログインを行いknown_hostsに登録
- 登録される文字列をCircle CIの環境変数に保存
- 該当文字列をknown_hostsに追記するスクリプトをscpコマンド実行前に追加
何かもっとちゃんとしたやり方があるような気がするのだが、私の英語力では解決策を見つけることができなかった。まあデプロイは無事にできるようになったので、文書の中身を練るとしよう。