docs.ruby-lang.org の環境が Debian GNU/Linux 9.11 (stretch) で、 Debian GNU/Linux 10 (buster) の環境に移行するためにも 動作確認するための環境を作りやすくした方が良いと思って、 vagrant での再現環境構築をすすめています。
今回は再現環境の構築です。
動作確認環境
- macOS Mojave 10.14.6
- VirtualBox 6.1.2
- Vagrant 2.2.6
- ansible 2.9.3
予定
- 再現環境を作成
- cron を systemd timer に移行
- Debian 10 に移行
再現環境を作成
https://github.com/ruby/docs.ruby-lang.org/pull/36 で途中まで作成されていた環境を参考にして、 Vagrantfile を作成しました。 (このブログ記事を書いていて、 .git/info/exclude
で除外していて追加し忘れていたのに気づいたので 追加しました。)
ついでに TLS の設定の更新や system/update-rurema-index
で zsh を使っているのに再現環境にはインストールする手順がなかったので bash に変更するなどの変更も入れました。
docs.ruby-lang.org の配信ファイル構成
docs.ruby-lang.org で外部から見えるものとしては、大きく4種類にわかれています。
-
/
直下 に public 由来のファイル -
/en/バージョン/
以下にruby system/rdoc-static-all
で生成されたファイル (古いバージョンは更新されず古いまま固定) -
/ja/バージョン/
以下にruby system/bc-setup-all; ruby system/bc-static-all
で生成されたファイル (古いバージョンは更新されず古いまま固定) -
/ja/search/
以下はるりまサーチ
動作確認手順
- VirtualBox, Vagrant, ansible を入れておく
-
vagrant up
して起動 -
vagrant ssh-config >> ~/.ssh/config
でssh default
で接続できるように設定 (初回のみ、他をvagrant up
してポート番号が変わるなどした時は~/.ssh/config
を適宜調整) -
bundle install
でcapistrano
などをインストール -
cap vagrant deploy
またはbundle exec cap vagrant deploy
で https://github.com/ruby/docs.ruby-lang.org と https://github.com/ruby/rurema-search をデプロイ -
vagrant ssh
で入ってsudo systemctl restart nginx
で nginx を起動 (https
の設定の関連で最初は起動失敗している) -
sudo su - rurema
してcrontab -l
でコマンドを確認して実行してドキュメントを生成する (system/fastly-purge-key
のエラーが出るのは本番環境には存在するファイルが存在しないため、 CDN のキャッシュのパージができないということで、動作確認環境では問題ないため、無視する) - ブラウザーで
https://localhost:10443/
を開いて (動作確認環境用の自己署名証明書なので) Chrome ならNET::ERR_CERT_AUTHORITY_INVALID
というエラーを無視して開く
工夫した点
- シェルスクリプトでの provision でもよかったのですが、使い慣れている ansible で冪等性の確保をしました。
- ちゃんと本番環境と同じ nginx の設定ファイルで動作確認できた方が良いだろうと思って
https
の設定をしました。変更なしの設定ファイルだと、るりまサーチの「検索」ボタンを押した時のリダイレクトでポート番号が消えてしまうという問題が起きて、 vagrant のforwarded_port
を host 側も 443 にするという手もあったのですが、vagrant up
に root 権限が必要になるなどの不便さが起きる可能性が嫌だったので、そこだけは nginx の設定ファイルを書き換えて対応しました。 - 条件は調べていないのですが、 CSR で common name を
localhost
にしておかないと Chrome で証明書のエラーを無視できなかったので、ちゃんと common name を設定するようにしました。 - dhparam はデフォルトだと 4096 で生成するようで、乱数源の少ない仮想環境だと時間がかかるので 2048 に減らしました。 localhost のみなので最低限まで減らしても良さそうですが、 1024 以下だと OS のバージョンアップ後に拒否される可能性がありそうなので、そこまでは減らしていません。
- 基本的にユーザー側は fastly の CDN なので、オリジン側は気軽に安全側に倒した設定に更新しても良いだろうと思って、 https://ssl-config.mozilla.org/ で設定更新しましたが、バージョンが古くて Modern は選べませんでした。 letsencrypt で http だけで見える URL も使う設定になっているので HSTS は設定していません。
-
ssl_trusted_certificate
を指定しているのはクライアント認証をしていないのになぜかと思ったら、 OCSP Stapling 用でした。
to be continued
今回の変更は https://github.com/ruby/docs.ruby-lang.org/pull/91 (と https://github.com/ruby/docs.ruby-lang.org/pull/93) になります。
systemd timer への移行編に続きます。
Disqus Comments