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は今後非対応になるかもしれないので注意。https://codeberg.org/catodon/catodon/src/branch/dev/README.md
※現在dev版なのでおひとり様以外は非推奨
画面スクショはフォロイー・フォロワー情報の塊なので省く。基本的には
Misskeyのようなものである。
建てたおひとり様は以下。
Mastodon APIに対応しており、Mastodon用クライアントアプリがある程度動く。Fedilabお勧め。
ソフトウェアのGUIは日本語対応している(というか訳して入れてもらった)。
次の記事に書いたが、他の人も受け入れられる以下のIceshrimpサーバーも建てた。
以降のメモについては基本的には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=simpleUser=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
補足終わり。
色々問題はありそうなので突っ込みがあれば有り難いかも。