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/もコピーすれば出来るのでは?と思った)
ドメインごとに同じ作業を繰り返す必要がある。
下記手順で繰り返す。
- DNS変更
- wordpress/wp-content/uploadsの権限変更(nginxの実行ユーザーを変えたから)
- drillコマンドDNSの反映確認
- コピーした証明書削除
- certbotで証明書を再取得
念のため移行元サーバーで問い合わせがあるか(データベースの変更があるか)確認しながら作業する。
# tail -f /var/log/maillog
あとバックアップ用バッチも動くかなど、確認事項をドキュメントにする。
【関連記事】
- Postfixが外部に送信しない。CNAMEの設定には気を付けよう。
- FreeBSD 14 + Nginx + PHP + MariaDB + Postfixの環境を構築(2024年版)
- certbotでSSL化してあるサイトを別サーバーに移行