今週のるりまレビュー会に向けて EC2 で動かしている docs.ruby-lang.org の Debian GNU/Linux 10 (buster) 版を用意して、 最終的に切り替えました。
環境
/etc/letsencrypt
や fastly の API Key など以外は ほぼ ruby/docs.ruby-lang.org で再現できるはずです。
ruby/rurema-search も必要なので、 そこだけはちょっと注意が必要です。
EC2 インスタンス作成
https://wiki.debian.org/Cloud/AmazonEC2Image/Buster を参考にして debian-10-amd64-2020 で検索して debian-10-amd64-20200210-166 を利用しましたが、 The AMIs are owned by AWS account ID 136693071363. なのかどうかは確認方法がわかりませんでした。
他は既存の docs と同じような感じで作成しました。
provision
~/.ssh/config
の設定をいい感じにして ssh docs-2020
でつながるようにして ansible-playbook -i docs-2020, provision/playbook.yml
で基本的な設定をしました。
ansible-playbook -i docs-2020, provision/users.yml
で他ユーザーの追加もしました。
/etc/letsencrypt
certbot の設定はどうしようか悩んだ結果、 VPC 内で (tar でまとめてから) scp してもっていってしまうことにしました。
証明書などがない状態で https
の設定を入れていると nginx の restart に失敗してしまうので、 結局この方法が一番楽そうでした。
/etc/letsencrypt
のコピーが終わってから ansible-playbook -i docs-2020, provision/letsencrypt.yml
で certbot なども入れました。
今は生成していない古いドキュメントのコピー
/var/www/docs.ruby-lang.org/shared/public/{en,ja}/{1.8.7,1.9.3,2.0.0,2.1.0,2.2.0,2.3.0}
は 今は生成していなくて、古いものをリンク切れにならないようにそのままおいているだけなので、 旧 docs からコピーしました。
curl -v -H 'Host: docs.ruby-lang.org' -k https://18.178.72.192/ja/1.8.7/doc/index.html
のような感じでちゃんと配置できているのを確認しました。
rurema-search
ruby/rurema-search での cap production deploy
と ansible-playbook -i docs-2020, provision/rurema-search.yml
で設定ファイルの配置をしました。
fastly purge key
/home/rurema/.docs-fastly
も旧 docs からコピーしました。
ドキュメント生成
README.md に書いてあるように
sudo systemctl start rdoc-static-all.service bc-setup-all.service &
sudo systemctl status rdoc-static-all.service bc-setup-all.service bc-static-all.service update-rurema-index.service
で生成と状況確認をしました。
ホスト名
hostnamectl set-hostname
で現在のホスト名と /etc/hostname
は変わるものの、 /etc/hosts
は変わりませんでした。
/etc/hosts
にはプライベートアドレスから生成されたようなホスト名が 127.0.1.1 に設定されていて、 旧 docs は /etc/hostname
に docs.ruby-lang.org
と設定されていたので、 最終的に同様のホスト名に設定することにしました。
doc.ruby-lang.org の https 設定追加
基本的に doc は docs へのリダイレクトだけで、リンクも http だけで https はないはずですが、 設定の練習も兼ねて https の設定を追加しました。
/.well-known/acme-challenge
だけ見えるようにして、他はリダイレクトとしたかったのですが、 nginx の設定ファイルで正規表現指定 (location ~
とか location ^~
とか) を混ぜるとうまくいかないなどで なかなかうまくいかなくて時間がかかってしまいましたが、最終的に設定できました。
sudo certbot certonly --webroot -w /var/www/html -d doc.ruby-lang.org
で証明書を発行して、 https
側のリダイレクトだけする設定を追加して完了しました。
切り替え
docs.ruby-lang.org
の fastly からバックエンドとしてみているドメインも切り替えました。 しかし、 fastly 側の設定で IP アドレスで指定されていて切り替わっていなかったので、 この記事を書いている時に fastly 側の設定も変更して切り替わりました。
まとめ
実際には rurema-search のデプロイ忘れとかで前後していましたが、 おおまかにはこの記事に書いたような作業で移行できました。