📌

Outline アップグレードでコケた話

2023/07/24に公開

はじめに

Ubuntu で wiki サーバ(Outline)を運用しています。とくに必須ではないのですが、アップグレード手順を確立したかったのでアップグレードを実行してみました。案の定失敗したので、その時の作業内容をここに残しておきます。

注意
私は、Docker を使用せずに Outline のソースコードを直接サーバに配置してビルドすることで動かしていました。そのため、アップグレード手順も Docker を使用している方とは異なる部分が多くなると思います。

アップグレード作業開始

とりあえず、Outline を停止してソースコードを最新に更新します。

systemctl stop outline
systemctl status outline # 停止していることを確認

cd /home/outline/app
git branch
git status 
git pull
git stash -u # 変更点があれば
git checkout (最終タグ)

DB のマイグレーション

バージョンを更新したら、DB のマイグレーションを実行します。

yarn db:migrate

ここで、node のバージョンとかでエラーが出る場合は、バージョンを合わせてからもう一度マイグレーションをします。

Outline を起動してアクセスしてみます。

認証が通らず、永遠にログイン画面に戻されます・・・。ログを見ると、確かに認証エラーがでています。

outline-app[2080276]: {"error":"column user.username does not exist","stack":"Unauthorized
Error: column user.username does not exist\n    at AuthenticationError (/home/outline/app/build/server/errors.js:38:34)
\n    at accountProvisioner (/home/outline/app/build/server/commands/accountProvisioner.js:118:43)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)","level":"error","message":"Error during authentication"}

user.username がない?

認証に必要な情報が揃っていないのでしょうか?

初期構築時の手順を追ってみる(DB 初期化だけは避ける)

何か手順漏れがありそうだったので、Outline を導入した時の手順を追って実行してみます。

install を忘れていました!

yarn install

build は最初だけでいい気がしますが、とりあえず実行。

yarn build
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
error Command failed with exit code 134.

おっと、メモリ不足で失敗しました。

# メモリ不足を回避しましょう。
export NODE_OPTIONS=--max_old_space_size=4096
yarn build
✓ 6145 modules transformed.
Killed
error Command failed with exit code 137.

うーん・・・やっぱりメモリ不足が原因で失敗してしまいます。
スワップ領域を作ります。

root@118-27-23-90:/home/outline/app# free -h
              total        used        free      shared  buff/cache   available
Mem:          976Mi       287Mi       426Mi       1.0Mi       263Mi       531Mi
Swap:         2.0Gi       1.0Gi       1.0Gi

# 2GB 分のスワップファイルを作る
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=360caa23-61c7-459e-9050-22296353ea0b
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
echo 'vm.swappiness = 10' > /etc/sysctl.d/10-swappiness.conf
sysctl --load /etc/sysctl.d/10-swappiness.conf
vm.swappiness = 10

free -h
              total        used        free      shared  buff/cache   available
Mem:          976Mi       308Mi       377Mi       1.0Mi       291Mi       509Mi
Swap:         4.0Gi       1.0Gi       3.0Gi

これでスワップ領域が追加されました。
もう一度 build してみます。

yarn build
Clean previous build…
Compiling…
Copying static files…
Done!
Done in 546.27s.

成功しました!

もう一度起動

systemctl start outline

これで無事、アップグレードが完了しました。
(Docker だと簡単なんでしょうね・・・)

Discussion