certbotでSSL化してあるサイトを別サーバーに移行(2024年6月)

CentOS Stream 8からFreeBSD 14へサイトを移行したときの覚書。

移行元: CentOS Stream 8
移行先: FreeBSD 14.1

SSL証明書はcertbot(Let’s Encrypt)で管理している。
移行元でSSL証明書をアーカイブして移行先に全コピーする。
# cd /etc/letsencrypt/
# tar czvf ssl.tgz archive/ live/
# mv ssl.tgz ~/

ファイルのダウンロード/アップロードはFileZilla(SFTP接続)を使っている。
移行先で展開。
# cd /usr/local/etc/letsencrypt/
# mv ~/ssl.tgz ./

移行先nginxを設定。
# cd ../nginx/conf.d/
# vim 01_hoge.conf

移行元のconfをそのままコピーする。
ただしsslのパスは「/usr/local」を先頭に付ける。
確認してnginx再読み込み。
# nginx -t
# service nginx reload

まずはhostsファイルに移行先のIPアドレスを確認する。
問題なければ、DNSを変更する。
(この機会にCNAMEを使って簡素化もする)
drillコマンドDNSの反映確認。
# drill hoge.jp

問い合わせフォームの特にメールが送信できるか確認する。

コピーしてきた証明書は上書きしてくれないので、削除してから証明書を取得し直す。
# cd /usr/local/etc/letsencrypt/
# rm -rf archive/hoge.jp/ live/hoge.jp/
# certbot certonly --webroot -w /home/httpd/hoge.jp -d hoge.jp

削除してからでないと下記エラーが出る

archive directory exists for hoge.jp

この場合はrenewal/も削除して取得し直す。
# rm -rf archive/hoge.jp/ live/hoge.jp/ renewal/hoge.jp.conf
# certbot certonly --webroot -w /home/httpd/hoge.jp -d hoge.jp

証明書の場所確認。
# ls /usr/local/etc/letsencrypt/live/

削除して証明書を取得し直しているならconfファイルを修正はいらないはず。
一応nginx再読み込み。
# nginx -t
# service nginx reload

移行元はCronジョブが動かないようにする。
一日以上経ってから、移行元のnginxファイルとcertbotを削除する。
# certbot delete

一括でcertbotのデータを移行する方法はない。
(この作業をしている間にrenewal/もコピーすれば出来るのでは?と思った)
ドメインごとに同じ作業を繰り返す必要がある。
下記手順で繰り返す。

  1. DNS変更
  2. wordpress/wp-content/uploadsの権限変更(nginxの実行ユーザーを変えたから)
  3. drillコマンドDNSの反映確認
  4. コピーした証明書削除
  5. certbotで証明書を再取得

念のため移行元サーバーで問い合わせがあるか(データベースの変更があるか)確認しながら作業する。
# tail -f /var/log/maillog

あとバックアップ用バッチも動くかなど、確認事項をドキュメントにする。


【関連記事】