MongoDBをそろそろバージョンアップしないとなー、と思っていたら幾星霜、とうとうやる気になったらなんと3.4から7.0まで上げないといけない、とかいう状況に遭遇した場合、
通常は ローリングアップデート でやるんだろうけれども、そうするとえーと、
3.4 → 3.6 → 4.0 → 4.2 → 4.4 → 5.0 → 6.0 → 7.0
と、なんとまあ、七回もバージョンアップを繰り返さなきゃいけなくなります。
で、ふつうは、じゃあダウンタイムは許容するとしてダンプ&リストアで何とかならないのか、と思いますよね。
でもどこをさがしてもなんか”ダンプ&リストアで何とか”なるのかどうか公式ドキュメントだとよくわからない。
https://www.mongodb.com/community/forums/t/dump-and-restore-between-version-3-6-and-5-0/168933
には
If downtime is acceptable and you have a large number of major releases to upgrade through, you can also consider a migration using mongodump and mongorestore.
とあるものの、
will encounter different issues depending on the provenance of your data
とかあるし、ちょっと心配ですが、まあきちんとテストすれば、というかローリングアップデートしたからといってテストしないわけでもないし、こっちの方が楽かなーと思います。
ちなみにこちらでは docker 使って複数バージョン間バージョンアップを自動化するという力業が紹介されてて、なるほどすごいなーという感じです。
https://stackoverflow.com/questions/37833561/restoring-the-database-dump-of-an-older-version-of-mongo-to-a-new-version-of-mon
【CentOS7】 acme-tinyをyumでインストールし、let’s encryptでSSL証明書を取得する
acme-tinyはapacheの再起動とか余計なことをしないので、certbotより使いやすいと思います。
詳しくは https://github.com/diafygi/acme-tiny をご参照ください。
認証したいドメイン名が 171220.0x0c.info で、httpサーバに apache 2.4.8以降を用いる場合で説明します。
Step 1
このへんは環境に合わせてください↓
yum install httpd mod_ssl
yum install epel-release
yum install acme-tiny
Step 2
acme-tinyをインストールすると /etc/httpd/conf.d/acme.conf
と /var/www/challenges/
ができるので、apacheをリロードするなりここから起動するなりします。
service httpd start
Step 3
アカウントキー作成
openssl genrsa 4096 > /var/lib/acme/private/account.key
Step 4
ドメイン用の秘密キー作成
openssl genrsa 4096 > /var/lib/acme/private/171220.0x0c.info.key
Step 5
リクエスト作成
openssl req -new -sha256 -key /var/lib/acme/private/171220.0x0c.info.key -subj "/CN=171220.0x0c.info" > /var/lib/acme/csr/171220.0x0c.info.csr
Step 6
let’s encryptにリクエストする
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt
Step 7
できあがった証明書と秘密鍵をコピーしてapacheをリロード。
このあたりも環境に合わせてください。
cp /var/lib/acme/private/171220.0x0c.info.key /etc/pki/tls/private/localhost.key
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
service httpd reload
Step 8
以下のようなスクリプトを作り、一ヶ月に一回cronで回す。
#!/bin/sh
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt || exit
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
/usr/sbin/service httpd reload
おまけ:nginxの場合
上記Step 5とStep 6の間に、以下のようにnginxを設定し、リロードしておきます。
server {
listen 80 default_server;
の下に以下のように設定します。
#for acme-tiny
location /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}