日常的にサーバーを触っている方には当たり前であろう知識は多々あり、そういう部分はマニュアルで省略されていることもあります。
私はアップデートをきっかけに久しぶりにサーバーと向き合うことが多く、前にやったことを忘れて調べ直しがちなので、自分用にまとめました。
始める前に:スナップショットを作成する
サーバーをいじる前の準備として、VPSなどの管理画面からスナップショットを作っておく。
ただ、スナップショットを作るだけで料金が発生するので、作業が終わって必要がなくなったら適宜削除する。
パッケージのアップグレード
サーバーにインストールされている全部のパッケージを最新版にする。
sudo apt update
sudo apt full-upgrade慣れたら -yオプションつけると早くすみます。
PostgreSQLのバックアップ
こちらの記事のように、自動でバックアップを取って保存するのが理想だと思います。
こちらにも書かれているとおり、DBの中身とメディアファイルさえあればなんか起きても多少どうとでもなるので、バックアップ超大事です。
私はまだ試してませんが、現状非常に面倒なことをやってるので身に付けたい。
一応現状のやり方をここに書いておく。
#misskeyユーザで実行
pg_dump データベース名 > 出力ファイル名.sql
#rootユーザーでコピー
cp /home/misskey/出力ファイル名.sql /home/[ssh接続先user]/出力ファイル名.sql
#リモートからローカルにダウンロードして保存
#ローカルマシンのターミナルで以下を実行
sudo scp -i [秘密鍵ファイル名] -P [ポート番号] [ssh接続先user]@[接続先IPアドレス]:/home/[ssh接続先user]/出力ファイル名.sql ~/出力ファイル名.sql経験上バックアップ方法が間違っていたことも結構あります…。リストアまで事前に試しておいた方がいいです。いずれにせよスナップショットを取っておくとバックアップとるところからやり直しは可能ですが長時間サーバーを止めたりしなければなりません。
Misskeyのアップデート
公式のとおりやります。リリースノートは事前にかならずチェック。
git checkout master
git pull
git submodule update --init
NODE_ENV=production pnpm install --frozen-lockfile
NODE_ENV=production pnpm run build
pnpm run migratepnpm インストールやビルド時にエラーが出たら以下を試す。
対処1 スワップ領域を追加する
最新版にアップデートする時にnode_moduleのインストールのところで止まってしまいました。
もともとサーバーを立てた時に1Gのスワップファイルを作っていたのですが、さらに追加しました。
#現在の空き容量などの確認
free -h
#スワップファイルの作成と有効化
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
#確認
sudo swapon -s
#永続化(バックアップを取ってから書き換え)
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab通常は1つで足りると思いますが /swapfile2 などと別ファイル名で同様の手順で追加できます。
対処2 必要なソフトを追加でインストールする
エラーメッセージでビルドに必要な何らかのソフトが足りてなさそうだと思ったら、sudo apt install [ソフトウェア名]で追加してから再度やってみると解決することもあります。
対処3 Node.js周りを見直す
アップデートの際ライブラリのインストールで詰まってしまうことがあり、nvmを使わないようにしたら通ったことがありました。原因はよくわかりません。
詳しい方なら対処できると思いますが、慣れてない方はバージョン管理用のライブラリは使わない方が無難かもしれません。
Misskeyは大きなアップデートごとに新しいNode.jsのバージョンを要求されることがあるので、インストールし直すときも慌てないようにしたい。
pnpmは、メッセージが出たら新しくするとよさそう。
corepack prepare pnpm@8.6.12 --activate証明書の更新
cronを使って自動でする方法がいいのだろうと思いつつ、いつも手動でやってます。
cd /etc/letsencrypt
sudo certbot renew --dry-run
sudo certbot renew補足
ここまで書きながら、私の知識もあやふやだなと実感しました。
ここに示したのはあくまでも対処法のひとつであり、同じ結果をもたらす手段は複数存在することがあります。
(例えばスワップの追加もfallocateではなくddを使った方がいいという話もある)
そういった面があるからこそ、あえて公式のドキュメントで記載しないということも多々あるのかもしれません。
結局は自分で適したものがどれか試していき、経験を積むしかないと再認識したところです。
Misskeyに関していえば、Misskey Hubに書かれていたりGithubのIssueで話題になっていたりすることもあるので、根気よく調べると解決することが多いです。

