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
■初期設定(ユーザー作成)
初期設定は登録公開状態ではなかったはずだが一応確認しといた方が良いかも。
以下は補足情報。
■補足:pg_repack(DB最適化)
※これをやらないと自分の環境では「あなた宛て」カラムがタイムアウトしまくる状態だった
※VPSサービスでイメージ保存する前にConoHaやシン・VPSではこれをやらないと肥大化する
■初期設定(ユーザー作成)
・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
色々問題はありそうなので突っ込みがあれば有り難いかも。
コメント
コメントを投稿