1GBメモリのVPSを借りておひとり様SNS(Catodon)を構築したメモ

Fediverseに接続できるSNS、Catodon(dev版)構築の備忘録を記録、公開しておく。

自分はUNIX/Linuxに仕事で広く浅く親しんでいた割にサーバー構築したことがなかったので、2024/1/4に「よし、初鯖立てしてみよう」と意気込んで丸1日試行錯誤してマニュアルで立てた。
最初はお名前.com VPSのメモリ2GBだったが、なんとなくシン・VPSの2GBに乗り換え、その後1GBを再契約してダウングレード移行した。
その2回の移行である程度ノウハウが貯まった(?)ような気がするのでまとめる。

CatodonはMisskey v12のフォークであるFirefish/Iceshrimpを下地として現在開発されている。
詳しくは下記参照。MFMは今後非対応になるかもしれないので注意。
※現在dev版なのでおひとり様以外は非推奨

画面スクショはフォロイー・フォロワー情報の塊なので省く。基本的にはMisskeyのようなものである。
Mastodon APIに対応しており、Mastodon用クライアントアプリがある程度動く。Fedilabお勧め。
ソフトウェアのGUIは日本語対応している(というか訳して入れてもらった)。

以下メモについては基本的にはLinux上で打つCLIのコマンド羅列である。
Linuxの基本的な操作(cdやpwd、lsといったもの)は予め分かっているものとする。
テキストファイルの操作はvi前提。
コマンドが何やってるか分からない場合は出来るだけ自分で調べること。

ターミナルはRLoginを使用。別にTeraTermでもPoderosaでも良い。
ヒストリー(履歴)は「D:\Server\RLogin\log\%S_%D_%t.txt」とかで指定。
ここでは「fedi」ユーザーを使う。ドメインは適当に取得したものを使用。

環境:
シン・VPS
メモリ 1GB/CPU 2コア/ストレージ 100GB
Ubuntu 22.04 LTS

■初期設定(ユーザー作成)
・rootでログイン

sudo adduser fedi

・パスワードを指定(他は任意)

su - fedi
■以下fediユーザーでSSH鍵作成
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

cd ~/.ssh

pwd

mv id_ed25519.pub authorized_keys

ls -l

sudo chmod 400 authorized_keys
■RLoginのSFTPファイルの転送で鍵ファイル転送
id_ed25519ファイルをローカルへ転送

RLogin上でfediユーザー設定作成
■rootユーザーに戻ってfediユーザーの権限変更
・visudoコマンドを普通に叩くとnanoが開かれてしまうのでviに変更

sudo update-alternatives --set editor /usr/bin/vim.basic

sudo visudo

・fediユーザーの行を以下のように追加

---
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

fedi ALL=(ALL) NOPASSWD: ALL
---
■SWAP領域確認(ここから再度fediユーザーとして新たに入る)
sudo swapon --show

メモリ2GBプランでSWAPが2GBなければ作成(作成方法はWeb検索)
※シン・VPSの場合1GBプラン/2GBプラン共にSWAPは初期値で2GBあった
※自分は念のため3GBにした
■Node.jsのメモリ制限を増やす(メモリ1GBだとこれをしないとビルド時エラー)
export NODE_OPTIONS=--max-old-space-size=4096

※そのまま実行しても良いが、上記を「.bashrc」に追記すればOS再起動しても適用される
■sshpassインストール(飛ばしても良いはず)
sudo apt update

sudo apt -y install sshpass
■ファイヤーウォール設定
sudo ufw enable

sudo ufw default deny

sudo ufw limit 22

sudo ufw allow 80

sudo ufw allow 443

sudo ufw status

sudo systemctl enable ufw
■Catodon周辺環境構築
□NodeJS

sudo apt install -y curl

curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

sudo apt install -y nodejs

nodejs -v

sudo corepack enable

□PostgreSQL

sudo apt install -y postgresql-common

sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -i -v 16;

sudo systemctl status postgresql

sudo -u postgres psql

・PostgreSQL上でユーザーとデータベース作成
 ※この後の「Catodon構築メイン」のところでやっても良い

CREATE ROLE ユーザー名 LOGIN PASSWORD 'パスワード';

CREATE DATABASE データベース名 OWNER ユーザー名;

・PostgreSQLからfediユーザーに戻る

\q

□pgroonga

・下記の「公式PostgreSQL用のインストール方法」の通りインストール

https://pgroonga.github.io/ja/install/ubuntu.html

□Redis

sudo apt install -y curl ca-certificates gnupg2 lsb-release

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt update

sudo apt install -y redis

・動いていなければ動かす

sudo systemctl status redis-server

sudo systemctl start redis-server

sudo systemctl enable redis-server

□Caddy(SSL証明書も自動で取得してくれるリバースプロキシ)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update

sudo apt install -y caddy

sudo vi /etc/caddy/Caddyfile

・下記を記載

---
<サーバーのドメイン名> {
    reverse_proxy localhost:3000
}
---

□その他

sudo apt install -y libvips

sudo apt install -y ffmpeg
■PostgreSQL設定変更(必要に応じて実施)
https://pgtune.leopard.in.ua

上記サイトで自環境を指定して出て来た値を下記で指定

sudo vi /etc/postgresql/16/main/postgresql.conf

sudo systemctl restart postgresql
■Catodon構築メイン(git cloneやbuildなど)
以下URLの英語を熟読して構築すること。
catodonディレクトリ内の「.config/default.yml」の作成・編集を忘れないように。
dev版なのでURLは今後変更されることがあるかも。Update方法についても同ページに記載有り。

https://codeberg.org/catodon/catodon/src/branch/dev/docs/install.md

・仮起動(catodonディレクトリで実行)

NODE_ENV=production yarn run start

※ドメインにブラウザからアクセスしてみてトップページが表示されるか確認
※エラーが出ていたらどこかの手順が抜けているはず
※Ctrl+Cで止める
■サービス設定&起動
sudo vi /etc/systemd/system/fedi.service

以下の通り記載(ディレクトリは自環境に合わせること)

---
[Unit]
Description=Fediverse server daemon

[Service]
Type=simple
User=fedi
ExecStart=/usr/bin/yarn start
WorkingDirectory=/home/fedi/catodon
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=fedi
Restart=always

[Install]
WantedBy=multi-user.target
---

sudo systemctl enable fedi

・以下実行で動くはず

sudo systemctl start fedi

・OS再起動しても動くことを確認

sudo shutdown -r now
終わり。
初期設定は登録公開状態ではなかったはずだが一応確認しといた方が良いかも。
以下は補足情報。



■補足:pg_repack(DB最適化)
※これをやらないと自分の環境では「あなた宛て」カラムがタイムアウトしまくる状態だった
sudo apt install postgresql-16-repack

sudo -u postgres psql -c "CREATE EXTENSION pg_repack" -d postgres

・最適化

sudo -u postgres pg_repack -d データベース名

・サイズ確認(やらなくても良い)

sudo -u postgres psql

\c データベース名

SELECT relpages::BIGINT * 8192 AS table_size, pg_size_pretty(relpages::BIGINT * 8192) AS table_size_h, reltuples::BIGINT, relname FROM pg_class ORDER BY table_size DESC OFFSET 0 LIMIT 10;

\q

・サイズ確認を1行でやるなら

sudo -u postgres psql -c "SELECT relpages::BIGINT * 8192 AS table_size, pg_size_pretty(relpages::BIGINT * 8192) AS table_size_h, reltuples::BIGINT, relname FROM pg_class ORDER BY table_size DESC OFFSET 0 LIMIT 10" -d データベース名
■補足:スナップショット肥大化対策(ddゼロ埋め)
※VPSサービスでイメージ保存する前にConoHaやシン・VPSではこれをやらないと肥大化する
空き容量確認
df -h

ゼロ埋め(〇〇はdfで確認した空き容量-1)
dd if=/dev/zero of=/tmp/tmpzero.tmp bs=G count=◯◯

ゼロ埋めしたファイル削除

rm /tmp/tmpzero.tmp

そのあとシャットダウンしてイメージ保存で問題なし
■補足:postgresql DBバックアップ(cron用のシェルスクリプト)
backup_psql.sh
---
#!/bin/bash

sudo -u postgres pg_dumpall | gzip -c > /home/fedi/backup/psql_$(date +%Y%m%d%H%M)-backup.gz
---
■補足:ファイルバックアップ(cron用のシェルスクリプト)
backup_files.sh
---
#!/bin/bash

tar -zcvf /home/fedi/backup/files_$(date +%Y%m%d%H%M)-backup.tar.gz -C /home/fedi/catodon files
---
■補足:データ移行(サーバー移転時)
・ファイル移行

移行先の公開鍵を移行元に置く:id_ed25519_fedi(名前は適当に指定)

chmod 600 .ssh/id_ed25519_fedi

rsync -avz -e "ssh -i .ssh/id_ed25519_fedi" /home/fedi/backup fedi@<移行先IP>:/home/fedi/

rsync -avz -e "ssh -i .ssh/id_ed25519_fedi" /home/fedi/catodon/files fedi@<移行先IP>:/home/fedi/catodon/

rsync -avz -e "ssh -i .ssh/id_ed25519_fedi" /home/fedi/catodon/.config/default.yml fedi@<移行先IP>:/home/fedi/catodon/.config/

※scpの場合のコマンド例(多分rsyncの方が良い)

scp -i .ssh/id_ed25519_fedi -pr /home/fedi/catodon/files fedi@<移行先IP>:/home/fedi/catodon/

・DBリストア

sudo vi /etc/postgresql/16/main/pg_hba.conf

※localの行右端をtrustに変える

sudo systemctl restart postgresql

sudo -u postgres psql

drop database データベース名;

\q

gzip -cd /home/fedi/backup/psql_dumpファイル.gz | psql -U postgres

sudo systemctl restart postgresql
補足終わり。
色々問題はありそうなので突っ込みがあれば有り難いかも。

コメント

このブログの人気の投稿

物理テンキー付属Android11スマホ『Xiaomi Qin F21 Pro』を購入して任意アプリをインストールしてみた

Epsonの小型PC、Endeavor ST180Eを購入 ストレージ&メモリを換装

Axon 40 Ultra購入 第3世代アンダーディスプレイカメラで遂に違和感のない画面へ