Alibaba Cloud への移行
以前は香港サーバー(4 コア 4G 90G 5M)を月 150 元で使っていましたが、やや割高に感じていました。独身の日(ダブルイレブン)の Alibaba Cloud セールに乗じて、ブログを丸ごと中国国内に移し、ついでに SSL 証明書の更新も自動化しました。
背景
これまでブログは香港のサーバーで動かしていました。スペックは 4 コア CPU、4G メモリ、90G ディスク、5M 帯域幅で、月額 150 元。個人ブログにとって、この価格はお得とは言えません——トラフィックは大きくなく、4 コアはほぼ遊んでいて、お金は主に「備案不要」という利便性に払っていたようなものです。
ちょうど独身の日のタイミングで、Alibaba Cloud のセール価格で 2 コア 8G メモリ、40G ディスク、5M 帯域幅の中国国内クラウドサーバーを 3 年 1399 元で入手しました。月あたり約 38 元です。コア数は減りましたが、メモリは倍増し、私のような「ブログ + 自作の小さなサービスをいくつか」という使い方にはむしろ合っています。5M 帯域幅は静的ページや小規模アプリには十分で、小さな企業サイトでもこの程度のものです。
移行の過程
元々ブログは Docker でデプロイしていたので、今回の移行はそのおかげでかなり手間が省けました。コンテナ化デプロイの直接的なメリットの一つは、環境を再構築する必要がないことです。イメージとデータを運んで、コンテナを起動すれば終わりです。
全体の流れは 3 ステップです。
1)新サーバーに Docker をインストールし、元のイメージを pull(またはインポート)する。
2)旧サーバーのデータボリュームディレクトリをアーカイブし、新マシンの対応するパスへ転送して、マウントポイントを一致させる。
3)コンテナが新マシンで正常に動くことを確認したら、ドメインの DNS を新しい IP に切り替える。
データボリュームの引っ越しは、シンプルに tar と scp で片付けられます。
# 旧サーバー: データボリュームディレクトリをアーカイブする
tar czf blog-data.tar.gz /data/blog
# 新サーバーへ転送する
scp blog-data.tar.gz root@new-server:/data/
ディレクトリ構造とマウント設定さえ変わらなければ、コンテナは新マシンで起動した後、元とまったく同じように動きます。これこそ私が個人サービスのデプロイに Docker を使い続けている理由です。移行コストがほぼゼロなのです。
ドメインの ICP 備案
中国国内サーバーと香港サーバーの最大の違いはここにあります。ドメインを国内 IP に解決させて外部に Web サービスを提供するには、まず ICP 備案(登録手続き)を完了させなければなりません。さもないと 80/443 ポートへのリクエストは遮断されます。
備案は Alibaba Cloud のコンソールから申請すればよく、主体情報とサイト情報を記入し、証明書類をアップロードして、当局の審査を待ちます。私の場合、審査にはおよそ 6 日かかりました。備案期間中はドメインを新サーバーに向けられませんが、サーバー自体は普通に使えるので、先に IP や SSH 経由で環境をすべて調整しておけます。備案が通った瞬間に DNS を切り替えれば、ダウンタイムはほぼゼロにできます。
SSL 証明書の自動更新
今回の移行のついでに、SSL 証明書まわりも徹底的に片付けました。証明書は引き続き無料の Let's Encrypt を使っています。その特徴は、1 枚の証明書の有効期限が 90 日しかないことです。公式の意図はまさに、証明書を手作業で差し替えるのではなく、更新を自動化させることにあります。
私は Docker 版の certbot でこれを実現しています。certbot コンテナが申請と更新を担当し、証明書ディレクトリと検証ディレクトリをデータボリュームとしてマウントし、nginx が同じ証明書ファイルをマウントします。更新コマンドはだいたい次のような形です。
# 期限が近いすべての証明書をチェックして更新する
docker run --rm \
-v /data/certbot/conf:/etc/letsencrypt \
-v /data/certbot/www:/var/www/certbot \
certbot/certbot renew
renew コマンドは期限が近い証明書だけを更新するので、crontab に入れて毎日実行しても副作用はありません。更新に成功したら nginx に設定をリロードさせるだけです。ここまで設定してしまえば、SSL 証明書は事実上「永久無料」となり、基本的に放置しておけます。
今後の予定
このマシンには 8G のメモリがあり、ブログ 1 つだけ動かすのはもったいない。今後は自分で書いたサービスを順次デプロイして、自分の demo App のバックエンドとして使っていくつもりです。しかも https と備案はすでに整っています——WeChat ミニプログラムのバックエンド API は、まさにドメインが備案済みかつ https であることを要求しており、この 2 つの前提条件はどちらも満たされています。今後、個人でミニプログラムを書いてみるのも悪くないでしょう。
ハマりどころと注意点
1)香港サーバーに Docker をデプロイしたときは、いろいろと不思議な現象に遭遇しました。最も印象深かったのは、ホストマシンが Docker の比較的新しいストレージドライバーのフォーマットをサポートしておらず、ディスクを再フォーマットしてファイルシステムのストレージフォーマットを変えなければ正常に使えなかったことです。Docker のストレージドライバーはカーネルバージョンやファイルシステムのパラメータに要求があり、古い、あるいは非主流のホスト環境ではここで転びやすいのです。こうした問題は Alibaba Cloud では一度も起きず、順風満帆でした。
2)備案の審査期間中はドメインを新サーバーに向けられないため、移行の調整作業を事前に済ませておけば、切り替えのウィンドウを最短に圧縮できます。
3)Alibaba Cloud も完璧ではありません。ときどきネットワークの揺らぎがかなり大きいと感じることがあります。個人ブログなら気になりませんが、遅延にシビアなサービスでは注意が必要です。
まとめ
今回の移行で費やした時間は主に備案待ちで、技術的な部分は Docker のおかげでほとんどコストがかかりませんでした。ついでに証明書の更新を自動化した後、このサーバーは基本的に「放置しておける」状態に入りました。個人開発者にとって、安価な中国国内サーバーと備案済みのドメインがあれば、できることはむしろ増えるのです。
COMMENTS