1
0
Fork 1
mirror of https://example.com synced 2024-11-22 12:06:39 +09:00

docs: refactor README

This commit is contained in:
naskya 2024-01-14 19:48:41 +09:00
parent 7a33097c24
commit ebd713a6a5
Signed by: naskya
GPG key ID: 712D413B3A9FED5C
9 changed files with 991 additions and 638 deletions

View file

@ -1,5 +1,17 @@
.PHONY: all
all: shellcheck build_image
.PHONY: build
build: build_image
.PHONY: pre-commit
pre-commit: shellcheck format rust-lint regenerate-entities
.PHONY: debug
debug:
pnpm install
pnpm run build:debug
pnpm run migrate
pnpm run start
.PHONY: shellcheck
@ -12,6 +24,24 @@ shellcheck:
shellcheck --external-sources --exclude=SC2148 neko/update/utils
.PHONY: format
format:
pnpm run format
.PHONY: rust-lint
rust-lint:
cd packages/backend/native-utils && pnpm run lint
.PHONY: regenerate-entities
regenerate-entities:
cd packages/backend/native-utils && \
sea-orm-cli generate entity \
--output-dir='src/model/entity' \
--database-url='postgres://firefish:password@localhost/firefish_db'
.PHONY: build_image
build_image:
. neko/update/utils && \

647
README.md
View file

@ -1,641 +1,16 @@
[Misskey](https://misskey-hub.net/) のフォークの [Firefish](https://joinfirefish.org/) のフォークです。
# Firefish
本家 Firefish のリポジトリは[こちら](https://git.joinfirefish.org/firefish/firefish)
[Misskey](https://misskey-hub.net/) のハードフォークの [Firefish](https://joinfirefish.org/) のソフトフォークです。[私](https://post.naskya.net/@dev)が個人的に使うことが主な目的ですから、これを使うことを積極的におすすめすることはありません。しかし労力を掛けて作ったものを一人占めするのももったいないので、使いたかったら使ってもいいよ、という気持ちで公開しています。
`main` ブランチではこのフォークに適用された変更のコミット履歴のみが、`history` ブランチでは本家 Firefish のコミットを含む完全なコミット履歴が閲覧できます。
本家 Firefish のリポジトリは[こちら](https://git.joinfirefish.org/firefish/firefish)です。
このフォークの機能について調べるには `main` ブランチを、コードの著者について調べるには `history` ブランチを参照してください
~~`main` ブランチではこのフォークに適用された変更のコミット履歴のみが、`history` ブランチでは本家 Firefish のコミットを含む完全なコミット履歴が閲覧できます。このフォークの機能について調べるには `main` ブランチを、コードの著者について調べるには `history` ブランチを参照してください。~~申し訳ありませんが、現在 `history` ブランチがきちんと整備されていません。再整備を行い、Misskey の最初のコミットから始まる)完全なコミット履歴を再公開する予定です
# 変更点
## 各種説明
## 主要な変更点
- 非ログインユーザーにもローカルタイムラインとグローバルタイムラインを公開できるように変更
- コントロールパネルから設定すると `https://server.example.com/timeline` で公開されます
- 検索フィルターを強化
- 以下の機能があります
- AND 検索
- OR 検索
- 自分の(未収載・フォロワー限定・ダイレクト・秘密を含む)全ての投稿からの検索
- 特定のユーザーの投稿の検索
- 特定のサーバーの投稿の検索
- 特定の期間の投稿の検索
- 添付ファイル付きの投稿の検索
- 全文検索のエンジンを [PGroonga](https://pgroonga.github.io/) に変更
- PGroonga のインストールが必要になります!詳しくは[この投稿](https://post.naskya.net/notes/9ldi29amfanomef5)をご覧ください
- Meilisearch, Elasticsearch, Sonic は使えません
- 「秘密」という公開範囲を追加
- 宛先無しのダイレクト投稿を言い換えているだけです
- 既存の投稿を削除せずに後から秘密にすることもできます
- パフォーマンス向上のためアクティブユーザー以外のチャート生成を無効化
- サードパーティー製クライアントが動かなくなるのを阻止するため API のエンドポイントは残していますが、叩いても `0` が並んだ配列しか返しません。
- モデレーターでない一般ユーザーにもカスタム絵文字の管理権を与えられるように
- カスタム絵文字の管理が大変なサーバー管理者さんがたくさんいらっしゃったのでこの機能を追加するべきではないか他の開発者に訊いたところロール機能の実装を待つべきだと言われてしまったが、Firefish のロール機能は現状では仕様がまだ固まっておらず実装までに時間が掛かると考えられるため
- 以下の権限を与えられます
- 不許可: 絵文字の管理を許可しない
- 追加: 新しい絵文字の追加のみを許可する
- 追加と変更: 「追加」に加え、既存のカスタム絵文字の名前・カテゴリ・タグ・ライセンスの編集を許可する
- 全て許可:「追加と変更」に加え、既存のカスタム絵文字の削除を許可する
- モバイル表示の下部のウィジェットボタンを再読み込みボタンに変更可能に
- スマートフォンでウィジェットは使わないけど再読み込みはたくさんする人はいそう
- モバイル表示の下部のチャットボタンをアカウント切り替えボタンに変更可能に
- これ無しで PWA で複数アカウントを使おうとすると腱鞘炎になる
- ローカルタイムラインの位置をグローバルタイムラインの直前に移動
- ローカルタイムラインよりもソーシャルタイムラインのほうが使いやすいと考えたため
## 細かい変更点
- 猫語で "nA" を "nYA" に置換しない
- この置き換えはあまり嬉しくないことが多い
- `reset-db` という API を無効化
- エンドポイント自体は残してありますが、叩いても何もしません
- データベースをリセットする API って何?怖すぎる
- ユーザーページでプロフィール画像を選択すると画像を拡大するCatodon から取り込み)
- 署名アルゴリズムとして ECDSA や Ed25519 なども受け入れる([github.com/mei23/misskey-v12](https://github.com/mei23/misskey-v12) から取り込み)
- Pleroma のチャットに対応Catodon から取り込み)
- 翻訳機能にて、投稿言語が指定されていない場合にのみ言語の自動検出を用いるように変更
- アップデート時に更新内容を確認できる機能を追加
- 依存ライブラリを最新版にアップデート
- ちゃんと動くか本家に push する前に実験したいという意図もあります
- 中国語の猫モードでは 0.1 の確率で投稿の末尾に「喵」を追加するように
- 設定のバックアップファイルに `misskeyVersion` の値が含まれていなくても警告しないように変更
- マージされていない本家版へのプルリクエストを独断でマージ
- RTL Layout Support ([!10452](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10452))
- Add language picker to post form ([!10616](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10616))
- chore: up swc ([!10649](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10649))
- `emojis` の API エンドポイントMisskey v13- 互換)を追加([firefish-mkdir](https://git.mkdir.uk/hiira/firefish-mkdir) から取り込み)
- Docker のベースイメージに Node v21 を使用
- HTML のコードに入るコメントアートを削除
- 全ページにこんなの入れなくても……
- デフォルトではバイブレーションを無効に
- ログインしていなければ投稿検索ができないように
- 攻撃対策のため
- もしこのせいでサードパーティークライアントに不具合が出る場合には変更するかもしれません
- 投稿と投稿の間を空けて表示する設定をデフォルトでは無効に
- Enter キーのみでチャットを送信する設定をデフォルトでは無効に
- 管理者アカウントも引っ越しできるように
- デフォルトのアイコンの太さを細めに変更
- スタイルを選択する画面のサンプルのアイコンを星に変更
- リアクションの履歴を公開する設定をデフォルトで有効に
- 私がみんなのリアクションを見たいと思っているため
- もちろん設定から無効にできます
- 標準のフォントを Atkinson Hyperlegible にする変更を取り消し
- フォントを変更したい場合は[このカスタム CSS](https://gitlab.com/LunarEclipse363/lunar-misskey-tweaks#setting-a-different-font) を使ってください
- 簡体中文の翻訳が存在しない項目では繁体中文の翻訳を用いるように(本家では逆)
- [サポミク](https://fedi.sup39.dev/@sup39)さんが独自機能に使われているラベルの繁体中文訳を提供してくださったため
- オンラインステータスが非公開のアカウントにはステータスを表す丸印を表示しないように
- 灰色の丸が表示されていてもそんなに嬉しくないため
- デフォルトで検索エンジンからのクロールを拒否するように変更
- 検索の MFM で使用する検索エンジンを設定から変更可能に
- 以下の選択肢から選べます
- DuckDuckGo (duckduckgo.com)
- SearXNG (searx.be)
- Google Search (google.com)
- Moon Search (search.naskya.net)
- サーバーの投稿検索
- サーバー設定の初期値を変更
- 新規登録を無効化
- 新規登録を受け付けたくないのに無効化する前にアカウントを登録されてしまうことを防ぐため
- プライベートモード(連合しないモード)を有効化
- サーバーの準備が整っていないうちにリモートサーバーに認識されてしまうことを防ぐため
- サーバーメトリクスの表示を有効化
- 有効化しているサーバーが多いため
- ランダムなアイコンの生成を無効化
- ランダムなアイコンはそんなにかわいくないため
- 身バレ防止の設定を追加
- 「おかえりなさい、◯◯さん」が出ないようにできるように
- 自分のアイコンを非表示にできるように
- 自分の名前とIDを非表示にできるように
- 名前とIDの部分が空白になるので慣れるまで時間が掛かります
- ユーザーページのデフォルトのタブを「投稿と返信」に変更
- タイムラインにリプライを表示する設定をデフォルトで有効に
- 未読通知のタブをリアクションの通知を表示するタブに変更
- 未読のタブ、使ってる人いる?
- MFM チートシートのボタンを投稿画面から左下のヘルプメニューに移動
- これがあるために投稿画面下部のボタンが 2 段になってしまうことがあるため
- 「フォローされています」の表示を目立たせられるように
- デフォルトの表示は目立たないため
- 最大 15 件の投稿を固定できるように
- 5 件は少ないと思ったため
- 投稿ボタンを巨大にできるように
- [mstdn.maud.io / mstdn.poyo.me の機能](https://mstdn.poyo.me/@prime/110668364208741253) を真似しました
- アンテナにフォロー中のユーザーのホーム投稿も表示する
- フォロー中のユーザーの投稿は見たいから
- 猫のアカウントはアイコンを常に丸く表示する
- そのほうがかわいいため
- NSFW メディアを隠す設定をブラウザごとの設定からブラウザごとかつアカウントごとの設定に変更
- 「このアカウントでは NSFW の画像を常に表示したい」みたいな需要が私にあったため
- インスタンスティッカーをデフォルトで常に表示する
- そのほうが楽しいと思ったから
- 藍ちゃんウィジェットの復活
- インスタンスティッカーのツールチップにソフトウェアのバージョン番号も表示する
- 気になるから
- いいねボタンリアクションピッカーの左にある、⭐とか👍のリアクションをワンクリックで押せるやつで空のリアクションMastodon がふぁぼで送ってくるものと同じ)ではなく本当にその絵文字リアクション(⭐とか👍とか)を送るようにする
- 最新の Misskey ではデフォルトリアクションが❤️になったため空のリアクションを送ると❤️として表示されてしまうが、❤️は 𝓋... という気持ちを伝えるためのリアクションであってただの「いいね」とは異なるため、このボタンで❤️は送りたくないから
- 通知の表示を簡潔にする
- 「がリアクションしました」とかリプライの上にある白い線とかが邪魔に思えたため
- 一部の表示の色も Misskey の通知の色が個人的に好みだったので戻した
- 支援者リストをファイルから読み込む
- 外部のサーバーが落ちるとユーザーページが開けなくなることを防ぐため
- 閲覧注意の注釈と画像の代替テキストもアンテナで調べる対象にする
- ~~「そぎぎ」でアンテナを作れる~~
- インデックス拒否に `noindex` に加えて `nofollow,noarchive,nocache,noimageindex` も指定
- インスタンスティッカーに表示するサーバーのアイコンとして favicon を優先する
- favicon のほうがよくカスタマイズされているため
- 誤爆しやすい位置にあるフォローボタンを隠す設定を追加
- フォローを誤爆すると悲しいため
- デフォルトの robots.txt の設定を変更し、クローラーを拒否するように
- joinfirefish と FediDB のクローラーは許可しています
- 投稿プレビューをデフォルトでオンにする設定を追加
- バージョン番号に最新のコミットの日付とコミットハッシュの頭文字が含まれるように
- 正確なバージョンが分かるとバグ修正に役立つため
## 検証中の変更点
うまく動いていそうだったら本家に push されます
- 特定のユーザーのリプライをタイムラインから非表示する機能(「ブーストをミュート」のリプライ版)を追加
- Docker/Podman の環境で `custom` ディレクトリの内容が反映されない不具合を修正
- 画面を下に引いてタイムラインなどを更新する機能を追加Misskey から取り込み)
- 本家にもマージリクエストを出しました ([!10644](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10644))
## このフォークから本家 Firefish に輸出された変更点
このフォークは本家に push する前のテスト環境としても使われるため、有用な機能はよく輸出されます(そしてニッチな機能だけが残る)
- iOS で効果音と音楽の再生が干渉する問題を修正Misskey から取り込み)
- サーバーの管理者が左下のヘルプメニューに利用規約以外のページも固定できるように
- 依存ライブラリのバージョンをアップデート
- AiScript のバージョンも上がりました!
- 絵文字ピッカーに表示されるカスタム絵文字の検索結果の件数を最大 100 件に変更Misskey の変更を取り込み)
- 投稿中に表示されるインスタンスティッカーをクリックするとサーバー情報を開くように
- UI 用の言語とは別に、投稿翻訳に使用する言語を設定可能に
- UI 用の言語は翻訳先の言語の第二候補として使われます(投稿の言語と投稿翻訳先に設定した言語が同じだった場合には UI 用の言語に翻訳されます)
- 投稿言語を自動検出して外国語の投稿に翻訳ボタンを表示する設定を追加
- 繁体中文への投稿翻訳を繁体字で表示する
- DeepL 翻訳や LibreTranslate は簡体中文への翻訳しか提供していない……。
- 「Firefish について」のページに Misskey の主要な貢献者を表示
- このソフトウェアは Misskey のフォークであるため
- 閲覧注意の投稿への返信で注釈の先頭に "re:" をつける設定を追加
- 返信で閲覧注意は維持したいけどそのままの注釈を用いるのには違和感を覚えることがよくあるため
- 猫耳の角を少し丸くするMisskey から取り込み)
- そのほうがかわいいため
- インスタンスティッカーのツールチップに出るソフトウェア名で FoundKey, PeerTube, GNU social, WriteFreely などを正しく表示する
# 使用方法
## インストール
以下の方法でインストールできます。
- systemd 版(手動インストールのみ)
- [Debian package](https://code.naskya.net/repos/Wmaym) 版
- [Docker](https://hub.docker.com/r/naskya/firefish) 版
更新が最も早く反映されるのは systemd 版の手動インストールです。Docker イメージや Debian/Ubuntu 向けの deb ファイルの更新も定期的に行うようにしますが、Vervis にはそのようなことを自動で行う仕組みが無いのでちょっとつらいです。
### 自動でインストールする
[Ubuntu 向けのインストールスクリプト](https://code.naskya.net/repos/Wm6vm) があります。
### 手動でインストールする
基本的に本家版のインストールと同じ手順で行えますが、[PGroonga](https://pgroonga.github.io/ja/) のインストールが必要である点が異なります。
#### Docker 版
このリポジトリをクローンして `docker-compose.example.yml``docker-compose.yml` にコピーし、本家版と同様にサーバーを構築すればよいですが、そのまま起動するとデータベースのマイグレーションに失敗します。最初にデータベースのコンテナのみを起動させて以下のコマンドで PGroonga を有効にしてください(`firefish` と `firefish_db` はそれぞれ `.config/docker.env``.config/default.yml` に書いた PostgreSQL のユーザー名とデータベース名にしてください)。
```bash
# DNS・ファイヤーウォール・リバースプロキシなどを各自で設定する
git clone https://code.naskya.net/naskya/firefish
cd firefish
cp docker-compose.example.yml docker-compose.yml
cp .config/example.yml .config/default.yml
# docker-compose.yml, .config/default.yml, .config/docker.env を編集する
docker-compose up db --detach
docker-compose exec db psql --command='CREATE EXTENSION pgroonga;' --user=firefish --dbname=firefish_db
./update.sh --install
```
#### systemd 版
このリポジトリをクローンして、本家版と同様にサーバーを構築します。ビルド等の作業 (`pnpm install`, `pnpm run build`, `pnpm run migrate`) は添付のアップデートスクリプトによって一括で行えます。
```bash
# DNS・ファイヤーウォール・リバースプロキシ・PostgreSQL・Redis などを各自でインストールして設定する
git clone https://code.naskya.net/naskya/firefish
cd firefish
cp .config/example.yml .config/default.yml
# .config/default.yml を編集する
sudo -u postgres psql --command "CREATE EXTENSION pgroonga;" --dbname firefish_db
./update.sh --install
```
[インストール方法に関する私の記事](https://blog.naskya.net/post/6kic0tebueju/)も参考になるかもしれません。
## アップデート
### Docker 版(手動インストール・自動インストール)
重要なお知らせがある場合にはアップデートスクリプトを通じてお伝えするので、必ず `update.sh` を用いてアップデートしてください。
1. サーバーのバックアップを取る
2. `update.sh` を実行し、表示される指示に従う
```bash
./update.sh
```
3. サーバーを起動して動作を確認する
```bash
docker-compose up --detach
```
### systemd 版(手動インストール)
重要なお知らせがある場合にはアップデートスクリプトを通じてお伝えするので、必ず `update.sh` を用いてアップデートしてください。
1. サーバーのバックアップを取る
2. サーバーを停止する
```bash
sudo systemctl stop yourserver.example.com
```
3. `update.sh` を実行し、表示される指示に従う
```bash
./update.sh
```
4. サーバーを起動して動作を確認する
```bash
sudo systemctl start yourserver.example.com
```
### Debian package 版(自動インストール)
`apt` を利用してアップデートします。
1. サーバーのバックアップを取る
2. パッケージをアップデートして動作を確認する
```bash
sudo apt update
sudo apt upgrade
```
#### 正常にアップデートできなかった場合
私が対処する必要がある問題が発生している可能性もあるため、一人で解決しようとせずに `./update.sh` の[実行ログを私まで送ってください](https://code.naskya.net/naskya/firefish#私にコマンドの実行ログを送る)。
## [本家 Firefish](https://git.joinfirefish.org/firefish/firefish) からの乗り換え
### systemd 版
1. サーバーのバックアップを取る
2. サーバーを停止する
```bash
sudo systemctl stop yourserver.example.com
```
3. Firefish がインストールされているディレクトリ (e.g., `/home/calckey/calckey`) の親ディレクトリ (e.g., `/home/calckey`) に移動する
```bash
cd /home/calckey
```
4. Firefish がインストールされているディレクトリ (e.g., `./calckey`) の名前を変える
```bash
mv calckey calckey.old
```
5. 元々 Firefish がインストールされていたディレクトリ (e.g., `./calckey`) と同じ名前でこのリポジトリをクローンする
```bash
git clone https://code.naskya.net/naskya/firefish calckey
```
6. 必要なファイルを元のディレクトリからコピーする
```bash
rm -rf calckey/files calckey/custom calckey/.config
cp -r calckey.old/files calckey
cp -r calckey.old/custom calckey
cp -r calckey.old/.config calckey
```
7. 全文検索エンジンMeilisearch, Sonic, Elasticsearch のいずれか)を使用している場合には、`.config/default.yml` からその設定を削除またはコメントアウトする
先頭に `#` をつけると設定をコメントアウトできます。
```yaml
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
```
全文検索エンジンは停止またはアンインストールしてしまってよいです。本家の Firefish に戻るつもりがあるなら停止を、そうでなければアンインストールをおすすめします。
停止コマンドの例
```bash
sudo systemctl disable --now sonic
```
8. PostgreSQL のバージョンを確認する
```bash
psql --version
```
9. PGroonga をインストールする
コマンドの例(詳しくは[この投稿](https://post.naskya.net/notes/9ldi29amfanomef5)を参考にしてください)
```bash
sudo apt install -y software-properties-common
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:groonga/ppa
sudo apt install -y wget lsb-release
wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install -y -V ./groonga-apt-source-latest-$(lsb_release --codename --short).deb
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release --codename --short)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install -y -V postgresql-14-pgdg-pgroonga
```
10. `.config/default.yml` に書かれているデータベースの名前を確認する(以下の例では `mk1`
```yaml
db:
host: localhost
port: 5432
db: mk1 # <---
```
11. 以下のコマンドを実行して PGroonga の拡張機能を有効にする(`mk1` の部分は自分のデータベース名に変えて実行)
```bash
sudo -iu postgres psql --command="CREATE EXTENSION pgroonga;" --dbname=mk1
```
12. 新しい Firefish のディレクトリに入ってビルドする
```bash
cd calckey
./update.sh --install
```
13. サーバーを起動して動作を確認する
```bash
sudo systemctl start yourserver.example.com
```
14. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf calckey.old
```
### Docker 版
1. サーバーのバックアップを取る
2. サーバーを停止する
```bash
docker-compose down
```
3. Firefish がインストールされているディレクトリ (e.g., `/home/calckey/calckey`) の親ディレクトリ (e.g., `/home/calckey`) に移動する
```bash
cd /home/calckey
```
4. Firefish がインストールされているディレクトリ (e.g., `./calckey`) の名前を変える
```bash
mv calckey calckey.old
```
5. 元々 Firefish がインストールされていたディレクトリ (e.g., `./calckey`) と同じ名前でこのリポジトリをクローンする
```bash
git clone https://code.naskya.net/naskya/firefish calckey
```
6. 必要なファイルを元のディレクトリからコピーする
```bash
rm -rf calckey/files calckey/custom calckey/.config
cp -r calckey.old/files calckey
cp -r calckey.old/custom calckey
cp -r calckey.old/.config calckey
```
7. 以下のコマンドを実行して PGroonga を有効にするfirefish と firefish_db はそれぞれ `.config/docker.env``.config/default.yml` に書いた PostgreSQL のユーザー名とデータベース名にしてください)
```bash
docker-compose up db --detach
docker-compose exec db psql --command='CREATE EXTENSION pgroonga;' --user=firefish --dbname=firefish_db
```
8. サーバーを起動して動作を確認する
```bash
docker-compose up --detach
```
9. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf calckey.old
```
## このフォークから[本家 Firefish](https://git.joinfirefish.org/firefish/firefish) へ戻る
### systemd 版
1. サーバーのバックアップを取る
2. サーバーを停止する
```bash
sudo systemctl stop yourserver.example.com
```
3. Firefish がインストールされているディレクトリ (e.g., `/home/calckey/calckey`) へ移動する
```bash
cd /home/calckey/calckey
```
4. 最新版にアップデートする
```bash
./update.sh
```
5. `.config/default.yml` に書かれているデータベースの名前を確認する(以下の例では `mk1`
```yaml
db:
host: localhost
port: 5432
db: mk1 # <---
```
6. 次のコマンドでデータベースをいじる前に、そのコマンドが正常に動作するか確認する(`mk1` の部分は自分のデータベース名に変更する)
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -iu postgres psql --set='ON_ERROR_STOP=1' --dbname=mk1
```
最後の行が `ROLLBACK` で終わっていれば問題ありません。そうでない場合には以下の[コマンドの実行結果を私に送ってください](https://code.naskya.net/naskya/firefish#私にコマンドの実行ログを送る)。
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -iu postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=mk1
```
7. このフォークで加えられたデータベースへの変更を実際に取り消す(`mk1` の部分は自分のデータベース名に変更する)
```bash
sudo -iu postgres psql --file=neko/revert.sql --dbname=mk1
```
8. PGroonga をアンインストールする
コマンドの例
```bash
sudo apt purge --remove postgresql-14-pgdg-pgroonga
sudo add-apt-repository --remove ppa:groonga/ppa
sudo apt-key del ACCC4CF8
sudo apt update
```
9. Firefish がインストールされているディレクトリの親ディレクトリ (e.g., `/home/calckey`) に行く
```bash
cd ..
```
10. Firefish がインストールされているディレクトリ (e.g., `./calckey`) の名前を変える
```bash
mv calckey calckey.old
```
11. Firefish がインストールされているディレクトリと同じ名前で本家版の Firefish を clone する
```bash
git clone https://git.joinfirefish.org/firefish/firefish.git calckey
```
12. 必要なファイルをコピーする
```bash
rm -rf calckey/files calckey/custom calckey/.config
cp -r calckey.old/files calckey
cp -r calckey.old/custom calckey
cp -r calckey.old/.config calckey
```
13. 新しい Firefish のディレクトリ (e.g., `./calckey`) に入り、`develop` ブランチに行く(実際には既に `develop` にいるはず)
```bash
cd calckey
git checkout develop
```
14. Firefish をビルドする
```bash
corepack prepare pnpm@latest --activate
pnpm i
NODE_ENV=production pnpm run build
pnpm run migrate
```
15. サーバーを起動して動作を確認する
```bash
sudo systemctl start yourserver.example.com
```
16. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf calckey.old
```
#### 注意
この手順を踏むとあなたの Firefish サーバーは `develop` 版になります。他のバージョンを動かしたい場合も、**次のアップデートがリリースされるまでは `develop` 版を動かしてください**。
例えば `beta` 版を動かしたい場合、次に `beta` 版がリリースされたらそちらに移れます。
```bash
git checkout beta
git pull --ff
corepack prepare pnpm@latest --activate
pnpm i
NODE_ENV=production pnpm run build
pnpm run migrate
```
# 補足
## 私にコマンドの実行ログを送る
実行したいコマンドの後ろに `|& tee /tmp/fflog` をつけてコマンドを実行します。例えば実行したいコマンドが `./update.sh` ならば
```bash
./update.sh |& tee /tmp/fflog
```
とし、実行したいコマンドが
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -iu postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=mk1
```
ならば
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -iu postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=mk1 |& tee /tmp/fflog
```
とします。
するとコマンドの実行ログが `/tmp/fflog` に保存されるので、保存されたテキスト全体をサーバーの OS などの環境の情報とともに[私](https://post.naskya.net/@dev)に送ってください。
ログのうちの参考になりそうだと思った一部だけを抜粋して送ることは絶対にしないでください。必要な情報が欠落していてもう一度全体を送り直してもらうことになったり、私が対処方法の判断を誤ったりする可能性が高まったりします。
テキストが一つの投稿に収まる長さの場合はコードブロックの記法(``` で囲む)を用いて投稿してもらってよいです。ログが一投稿に収まらない長さの場合は [Pastebin](https://pastebin.com/) などのサービスを使って共有してください。投稿にログファイルを直接添付して送ることはしないでください。
ログを私に送ったら `/tmp/fflog` は削除してよいです。
```bash
rm /tmp/fflog
```
- [本家版と異なる点](https://code.naskya.net/naskya/firefish/source-by/main/docs/changes.md)
- [インストール方法](https://code.naskya.net/naskya/firefish/source-by/main/docs/install.md)
- [アップデート方法](https://code.naskya.net/naskya/firefish/source-by/main/docs/update.md)
- [本家版からの移行方法](https://code.naskya.net/naskya/firefish/source-by/main/docs/migrate.md)
- [本家版への移行方法](https://code.naskya.net/naskya/firefish/source-by/main/docs/migrate_back.md)
- [開発への協力方法](https://code.naskya.net/naskya/firefish/source-by/main/docs/contributing.md)

202
docs/changes.md Normal file
View file

@ -0,0 +1,202 @@
# 本家版からの変更点
## Firefish そのものに関する変更点(メタな変更点)
- [ローリングリリース](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9)を採用
- いわゆる「新バージョンのリリース」はありません。細かい更新が頻繁に行われるので、好きなタイミングでアップデートしてください。
- バージョン番号は `{本家のバージョン}+neko:{コミットの日付}.{コミットハッシュの上 2 桁}` です。
- 例えば [`6424b685e9` というコミット](https://code.naskya.net/repos/a3WPw/commits/6424b685e971578427c8db5b14710494c5cdc0fd)の直後のバージョンは `1.0.5-dev20+neko:231107.64` です。
- 元々私は `neko.なんとか` というドメインで登録を一般開放したサーバーを立てようと思っていて、そのサーバーにこの Firefish をインストールしようと思っていたことからバージョン番号に `neko` が含まれています。
- 現在は生活に余裕が無く、管理に時間を割けなそうにないためこのサーバーを立てる計画は中断しています。
- この Firefish はよく Firefish neko flavor と呼ばれていますが、これはこのバージョン番号に由来します。私自身は特にこの呼称を普及させたいわけではなかったのですが、[私のアカウント](https://post.naskya.net/@dev)の数割のフォロワーが英語圏の本家 Firefish の利用者であるため単に「この機能を追加しました!」などと投稿すると本家版の更新と誤解される恐れがありますし、「私の Firefish フォークにこの機能を追加しました!」などと投稿すると私が本家 Firefish の開発を離れて新たなハードフォークを作っているのだと誤解される恐れがあるため、投稿を機械翻訳で英訳されて読まれてもなるべく誤解されないための苦肉の策としてこの呼称を使い始めました。このソフトフォークはあくまで本家 Firefish の私による「味付け」です。
- 依存ライブラリをほとんど常に最新版にアップデート
- 本家版を更新する前にちゃんと動くか実験したいという意図もあります
## クライアントの変更点
### 主要な変更点
- 投稿ごとに言語を指定できるように([!10616](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10616) を独断でマージ)
- これにより Mastodon の翻訳機能や言語フィルターなどが正常に機能します。今後 Firefish 側でもこの情報をもっと活用できるようにしたいです。
- 検索フィルターを強化
- 以下の機能があります
- AND 検索
- OR 検索
- 自分の(未収載・フォロワー限定・ダイレクト・秘密を含む)全ての投稿からの検索
- 特定のユーザーの投稿の検索
- 特定のサーバーの投稿の検索
- 特定の期間の投稿の検索
- 添付ファイル付きの投稿の検索
- 「秘密」という公開範囲を追加
- 宛先無しのダイレクト投稿を言い換えているだけです
- 既存の投稿を削除せずに後から秘密にすることもできます
- モバイル表示の下部のチャットボタンをアカウント切り替えボタンに変更可能に
- これ無しで PWA で複数アカウントを使おうとすると腱鞘炎になる
- ローカルタイムラインの位置をグローバルタイムラインの直前に移動
- ローカルタイムラインよりもソーシャルタイムラインのほうが使いやすいと考えたため
- TODO: もっとカスタムできるようにして、本家にもその機能を入れたい ([#rw0Dw](https://code.naskya.net/decks/4wJQ3/tickets/rw0Dw))
- 画面を下に引いてタイムラインなどを更新する機能を追加([Misskey から取り込み](https://github.com/misskey-dev/misskey/commit/c239058624dcd880ec1c5f3c436f3a2a06fc22c3)
- 本家にもマージリクエストを出しています ([!10644](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10644))
### 細かい変更点
- モバイル表示の下部のウィジェットボタンを再読み込みボタンに変更可能に
- スマートフォンでウィジェットは使わないけど再読み込みはたくさんする人はいそう
- 設定のバックアップファイルに `misskeyVersion` の値が含まれていなくても警告しないように変更
- TODO: 本家版にもマージリクエストを出す
- RTL Layout右から左に書く言語の表示の部分的なサポート[!10452](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10452) を独断でマージ)
- アップデート時に更新内容を確認できる機能を追加
- HTML のコードに入るコメントアートを削除
- 全ページにこんなの入れなくても……
- デフォルトではバイブレーションを無効に
- 投稿と投稿の間を空けて表示する設定をデフォルトでは無効に
- Enter キーのみでチャットを送信する設定をデフォルトでは無効に
- デフォルトのアイコンの太さを細めに変更
- スタイルを選択する画面のサンプルのアイコンを星に変更
- 標準のフォントを Atkinson Hyperlegible にする変更を取り消し
- フォントを変更したい場合は[このカスタム CSS](https://gitlab.com/LunarEclipse363/lunar-misskey-tweaks#setting-a-different-font) を使ってください
- 簡体中文の翻訳が存在しない項目では繁体中文の翻訳を用いるように(本家では逆)
- [サポミク](https://fedi.sup39.dev/@sup39)さんが独自機能に使われているラベルの繁体中文訳を提供してくださったため
- オンラインステータスが非公開のアカウントにはステータスを表す丸印を表示しないように
- 灰色の丸が表示されていてもそんなに嬉しくないため
- デフォルトで検索エンジンからのクロールを拒否するように変更
- 検索の MFM で使用する検索エンジンを設定から変更可能に
- 以下の選択肢から選べます
- DuckDuckGo (duckduckgo.com)
- SearXNG (searx.be)
- Google Search (google.com)
- Moon Search (search.naskya.net)
- まだこの検索エンジンは作っていません……
- サーバーの投稿検索
- 身バレ防止の設定を追加
- 「おかえりなさい、◯◯さん」が出ないようにできるように
- 自分のアイコンを非表示にできるように
- 自分の名前と ID を非表示にできるように
- 名前と ID の部分をただ空白にするだけです
- ユーザーページのデフォルトのタブを「投稿と返信」に変更
- タイムラインにリプライを表示する設定をデフォルトで有効に
- 未読通知のタブをリアクションの通知を表示するタブに変更
- 未読のタブ、使ってる人いる?
- MFM チートシートのボタンを投稿画面から左下のヘルプメニューに移動
- これがあるために投稿画面下部のボタンが 2 段になってしまうことがあるため
- 「フォローされています」の表示を目立たせられるように
- デフォルトの表示は目立たないため
- 投稿ボタンを巨大にできるように
- [mstdn.maud.io / mstdn.poyo.me の機能](https://mstdn.poyo.me/@prime/110668364208741253) を真似しました
- 猫のアカウントはアイコンを常に丸く表示する
- そのほうがかわいいため
- NSFW メディアを隠す設定をブラウザごとの設定からブラウザごとかつアカウントごとの設定に変更
- 「このアカウントでは NSFW の画像を常に表示したい」みたいな需要が私にあったため
- インスタンスティッカーをデフォルトで常に表示する
- そのほうが楽しいと思ったから
- 藍ちゃんウィジェットの復活
- インスタンスティッカーのツールチップにソフトウェアのバージョン番号も表示する
- 気になるから
- いいねボタンリアクションピッカーの左にある、⭐とか👍のリアクションをワンクリックで押せるやつで空のリアクションMastodon がふぁぼで送ってくるものと同じ)ではなく本当にその絵文字リアクション(⭐とか👍とか)を送るようにする
- 最新の Misskey ではデフォルトリアクションが❤️になったため空のリアクションを送ると❤️として表示されてしまうが、❤️は 𝓋... という気持ちを伝えるためのリアクションであってただの「いいね」とは異なるため、このボタンで❤️は送りたくないから
- 通知の表示を簡潔にする
- 「がリアクションしました」とかリプライの上にある白い線とかが邪魔に思えたため
- 一部の表示の色も Misskey の通知の色が個人的に好みだったので戻しました
- インスタンスティッカーに表示するサーバーのアイコンとして favicon を優先する
- favicon のほうがよくカスタマイズされているため
- TODO: サーバーによってはちゃんと動いていない気がするので調べる ([#13EQ3](https://code.naskya.net/decks/4wJQ3/tickets/13EQ3))
- 誤爆しやすい位置にあるフォローボタンを隠す設定を追加
- フォローを誤爆すると悲しいため
- 投稿プレビューをデフォルトでオンにする設定を追加
## サーバーの変更点
### 主要な変更点
- 非ログインユーザーにもローカルタイムラインとグローバルタイムラインを公開できるように変更
- コントロールパネルから設定すると `https://server.example.com/timeline` で公開されます
- 全文検索のエンジンを [PGroonga](https://pgroonga.github.io/) に変更([tamaina さんの PGroonga パッチ](https://gist.github.com/tamaina/29e88e02d0dc5acfa2f50b3347d3d20d)を拡張)
- Meilisearch, Elasticsearch, Sonic は使えません
- モデレーターでない一般ユーザーにもカスタム絵文字の管理権を与えられるように変更
- カスタム絵文字の管理が大変なサーバー管理者さんがたくさんいらっしゃったのでこの機能を追加するべきではないか他の開発者に訊いたところロール機能の実装を待つべきだと言われてしまったが、Firefish のロール機能は現状では仕様がまだ固まっておらず実装までに時間が掛かると考えられるため
- 以下の権限を与えられます
- 不許可: 絵文字の管理を許可しない
- 追加: 新しい絵文字の追加のみを許可する
- 追加と変更: 「追加」に加え、既存のカスタム絵文字の名前・カテゴリ・タグ・ライセンスの編集を許可する
- 全て許可:「追加と変更」に加え、既存のカスタム絵文字の削除を許可する
- 特定のユーザーのリプライをタイムラインから非表示する機能(「ブーストをミュート」のリプライ版)を追加
- 本家版にもマージリクエストを出しています ([!10658](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10658))
### 細かい変更点
- 設定の初期値を変更
- 新規登録を無効化
- 新規登録を受け付けたくないのに無効化する前にアカウントを登録されてしまうことを防ぐため
- プライベートモード(連合しないモード)を有効化
- サーバーの準備が整っていないうちにリモートサーバーに認識されてしまうことを防ぐため
- サーバーメトリクスの表示を有効化
- 有効化しているサーバーが多いため
- ランダムなアイコンの生成を無効化
- ランダムなアイコンはそんなにかわいくないため
- パフォーマンス向上のためアクティブユーザー以外のチャート生成を無効化
- サードパーティー製クライアントが動かなくなるのを阻止するため API のエンドポイントは残していますが、叩いても `0` が並んだ配列しか返しません。
- 猫語で "nA" を "nYA" に置換しない
- この置き換えはあまり嬉しくないことが多い
- `reset-db` という API を無効化
- エンドポイント自体は残してありますが、叩いても何もしません
- データベースをリセットする API って何?怖すぎる
- ユーザーページでプロフィール画像を選択すると画像を拡大する([Catodon から取り込み](https://codeberg.org/catodon/catodon/commit/a4b74d9b6bd7db56f0a4ce3439c29b9df4b41100)
- 本家版にもマージリクエストを出しています ([!10659](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10659))
- 署名アルゴリズムとして ECDSA や Ed25519 なども受け入れる([mei23/misskey-v12 から取り込み](https://github.com/mei23/misskey-v12/commit/b008e1e7169ea7cbb4a49fb1856f8cd838333230)
- TODO: 本家版にもマージリクエストを出す
- Pleroma のチャットに対応([Catodon から取り込み](https://codeberg.org/catodon/catodon/commit/0ed49d05a98ecb3df938f5558fdfe7011844732f)
- 本家版にもマージリクエストを出しています ([!10660](https://git.joinfirefish.org/firefish/firefish/-/merge_requests/10660))
- 翻訳機能にて、投稿言語が指定されていない場合にのみ言語の自動検出を用いるように変更
- TODO: 本家版にもマージリクエストを出す
- 中国語の猫モードでは 0.1 の確率で投稿の末尾に「喵」を追加するように
- TODO: 様子を見て、良さそうだったら本家版にもマージリクエストを出す
- `emojis` APIMisskey v13- 互換)を追加([firefish-mkdir から取り込み](https://git.mkdir.uk/hiira/firefish-mkdir/commit/e98af2b2a78463bd64393936dbe223127552bff5)
- ログインしていなければ投稿検索ができないように
- 攻撃対策のため
- もしこのせいでサードパーティークライアントに不具合が出る場合には変更するかもしれません
- 管理者アカウントも引っ越しできるように
- リアクションの履歴を公開する設定をデフォルトで有効に
- 私がみんなのリアクションを見たいと思っているため
- もちろん設定から無効にできます
- 最大 15 件の投稿を固定できるように
- 5 件は少ないと思ったため
- アンテナにフォロー中のユーザーのホーム投稿も表示する
- フォロー中のユーザーの投稿は見たいから
- 支援者リストをファイルから読み込む
- 外部のサーバーが落ちるとユーザーページが開けなくなることを防ぐため
- 閲覧注意の注釈~~と添付ファイルの代替テキスト~~もアンテナで調べる対象にする
- ~~「そぎぎ」でアンテナを作れる~~
- TODO: 代替テキストがちゃんと調べられていない気がするので直す ([#q32v3](https://code.naskya.net/decks/4wJQ3/tickets/q32v3))
- インデックス拒否に `noindex` に加えて `nofollow,noarchive,nocache,noimageindex` も指定
- デフォルトの robots.txt の設定を変更し、クローラーを拒否するように
- joinfirefish と FediDB のクローラーは許可しています
## コンテナイメージの変更点
- ベースイメージに [`docker.io/node:21-slim`](https://hub.docker.com/layers/library/node/21-slim/images/sha256-5a3290b496bb63e1e19d440810a55eea3e004eeda7cc15f75a8b256995e41542) を使用
- イメージのビルドに [buildah](https://github.com/containers/buildah) を使用
- もし Docker との互換性に問題があったりしたら教えてください
- Rust のリンカーに [mold](https://github.com/rui314/mold) を使用
- `custom` ディレクトリの内容が反映されない不具合を修正
- TODO: 本家版も修正する
## このフォークから本家 Firefish に輸出された変更点
このフォークは本家に push する前のテスト環境としても使われるため、有用な機能はよく輸出されます(そしてニッチな機能だけが残る)
- iOS で効果音と音楽の再生が干渉する問題を修正([Misskey から取り込み](https://github.com/misskey-dev/misskey/commit/38d6580a36bb6474153536edb50b59376ce16779)
- サーバーの管理者が左下のヘルプメニューに利用規約以外のページも固定できるように
- 絵文字ピッカーに表示されるカスタム絵文字の検索結果の件数を最大 100 件に変更([Misskey から取り込み](https://github.com/misskey-dev/misskey/commit/e11320dbb70bbae0da78975718cc06b440daa6a4)
- 投稿中に表示されるインスタンスティッカーをクリックするとサーバー情報を開くように
- UI 用の言語とは別に、投稿翻訳に使用する言語を設定可能に
- UI 用の言語は翻訳先の言語の第二候補として使われます(投稿の言語と投稿翻訳先に設定した言語が同じだった場合には UI 用の言語に翻訳されます)
- 投稿言語を自動検出して外国語の投稿に翻訳ボタンを表示する設定を追加
- 繁体中文への投稿翻訳を繁体字で表示する
- DeepL 翻訳や LibreTranslate は簡体中文への翻訳しか提供していない……。
- 「Firefish について」のページに Misskey の主要な貢献者を表示
- このソフトウェアは Misskey のフォークであるため
- 閲覧注意の投稿への返信で注釈の先頭に "re:" をつける設定を追加
- 返信で閲覧注意は維持したいけどそのままの注釈を用いるのには違和感を覚えることがよくあるため
- 猫耳の角を少し丸くする([Misskey から取り込み](https://github.com/misskey-dev/misskey/commit/1a96425768b743cf6a7f93b7813c082152497461)
- そのほうがかわいいため
- インスタンスティッカーをマウスオーバーしたときに出るソフトウェア名で FoundKey, PeerTube, GNU social, WriteFreely などを正しく表示する

91
docs/contributing.md Normal file
View file

@ -0,0 +1,91 @@
# 開発への協力方法
これは個人的なフォークなので、基本的には本家 Firefish の開発に協力してもらえればと思います。ただし、最近は本家 Firefish へのマージリクエストのマージが滞りがちですし、本家版にいきなり貢献するのはハードルが高いと思ったりマージしてもらえるか分からないニッチな機能を作ったりした場合にはこのフォークへ貢献していただいてもよいです。
現状、マージリクエストを直接送る方法が無いので patch ファイルまたは別のサイトにフォークしたリポジトリに追加したコミットへの URL を[私](https://post.naskya.net/@dev)に送ってください。
## 開発の方法
### 環境構築
1. 以下のソフトウェアをインストールする
- podman
- podman-compose
- make
- nodejs
- pnpm
- shellcheck
- sea-orm-cli
2. 以下の内容の `dev/docker-compose.yml` を作成する
```yaml
version: "3"
services:
redis:
image: docker.io/redis:7-alpine
ports:
- "6379:6379"
db:
image: docker.io/groonga/pgroonga:latest-alpine-16
environment:
- "POSTGRES_PASSWORD=password"
- "POSTGRES_USER=firefish"
- "POSTGRES_DB=firefish_db"
ports:
- "5432:5432"
```
3. コンテナを起動し、PGroonga を有効化する
```bash
cd dev
podman-compose up --detach
podman-compose exec db --user=firefish --dbname=firefish_db --command='CREATE EXTENSION pgroonga;'
```
4. 以下の内容の `.config/default.yml` を作成する
```yaml
url: http://localhost:3000
port: 3000
db:
host: localhost
port: 5432
db: firefish_db
user: firefish
pass: password
redis:
host: localhost
port: 6379
```
コンテナを作り直すと簡単にデータベースを初期化できます。
```bash
cd dev
podman-compose down --volumes
podman-compose up --detach
podman-compose exec db --user=firefish --dbname=firefish_db --command='CREATE EXTENSION pgroonga;'
```
参考にした記事: [Firefish 開発環境の準備(バックエンド向け)](https://hackmd.io/@nmkj-io/HJHNbM_8a)
### 実行
```bash
make debug
```
### コミット前に行う確認
```bash
make pre-commit
```
## 注意事項
データベースのマイグレーションを伴う変更を加える場合にはマイグレーションのファイルを [`packages/backend/migration-neko`](https://code.naskya.net/naskya/firefish/source-by/main/packages/backend/migration-neko) の下に作成し、マイグレーションを打ち消す SQL クエリを [`neko/revert.sql`](https://code.naskya.net/naskya/firefish/source-by/main/neko/revert.sql) の**一番上に**追記してください。

224
docs/install.md Normal file
View file

@ -0,0 +1,224 @@
# インストール方法
## サーバーに直接インストールする
1. サーバーに git, Nodejs, npm, PostgreSQL, PGroonga, Redis, Rust をインストールします。Arch Linux にインストールする場合には[私のブログ](https://blog.naskya.net/post/6kic0tebueju/)が参考になるかもしれません。
Ubuntu や Debian にインストールする場合には、例えば以下のようになります。
```bash
# Rust のインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Nodejs v21 のインストールの準備
NODE_MAJOR=21
sudo apt install --no-install-recommends curl ca-certificates gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] "https://deb.nodesource.com/node_${NODE_MAJOR}.x" nodistro main" \
| sudo tee /etc/apt/sources.list.d/nodesource.list
# PostgreSQL のインストールの準備
echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# PGroonga のインストールの準備
sudo apt install --no-install-recommends software-properties-common wget
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:groonga/ppa
wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install --no-install-recommends ./groonga-apt-source-latest-$(lsb_release --codename --short).deb
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release --codename --short)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Redis のインストールの準備
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# 各ソフトウェアのインストール
sudo apt update
sudo apt install --no-install-recommends git nodejs postgresql-16 postgresql-16-pgdg-pgroonga redis-server
# pnpm を有効化
sudo corepack enable
# PostgreSQL, Redis を起動
systemctl enable --now postgresql redis-server
```
2. このリポジトリを複製し、リポジトリのディレクトリに移る
```bash
git clone https://code.naskya.net/naskya/firefish
cd firefish
```
3. 設定ファイルのテンプレートを複製する
```bash
cp .config/example.yml .config/default.yml
```
4. PostgreSQL のユーザー名・データベース名・パスワードを決める(決めるだけでこの工程にコマンドの操作は無い)
5. `./config/default.yml` を編集する
```bash
vim .config/default.yml
```
`url` という項目を `example.com` から使いたいドメイン名に変更する
```yaml
# Final accessible URL seen by a user.
url: https://example.com/
```
データベースの設定を変える(データベース名・ユーザー名・パスワードはそれぞれさっき自分で決めたもの)
```yaml
db:
host: localhost # 変えない
port: 5432 # 変えない
db: firefish_db # ここをデータベース名に変える
user: firefish # ここをデータベースのユーザー名に変える
pass: very_strong_password # ここをデータベースのパスワードに変える
```
6. PostgreSQL のユーザーとデータベースを作る
```bash
POSTGRES_DB='データベース名'
POSTGRES_USER='ユーザー名'
POSTGRES_PASSWORD='パスワード'
sudo -u postgres psql --command="CREATE ROLE ${POSTGRES_USER} LOGIN PASSWORD '${POSTGRES_PASSWORD}';"
sudo -u postgres psql --command="CREATE DATABASE ${POSTGRES_DB} OWNER ${POSTGRES_USER} encoding = 'UTF8';"
```
7. PGroonga を有効化する
```bash
sudo -u postgres psql --dbname="${POSTGRES_DB}" --command='CREATE EXTENSION pgroonga;'
```
8. Firefish をビルドする
```bash
./update.sh --install --native
```
9. Firefish を起動するための systemd サービスを作る
`/etc/systemd/system/firefish.service` というテキストファイルを作り、Firefish をインストールしたディレクトリで `pnpm run start` を実行させるようにします。[私のブログ](https://blog.naskya.net/post/6kic0tebueju/#firefish-%E3%82%92%E8%B5%B7%E5%8B%95)や [systemd サービスに関する記事](https://wiki.archlinux.jp/index.php/Systemd#.E3.83.A6.E3.83.8B.E3.83.83.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB)などを参考にしてください。
以下の設定を行えば大丈夫なはずです。
- 実行するユーザーをグループを指定する
- `which pnpm``pnpm` コマンドの場所(例えば `/usr/bin/pnpm`)を探し、`ExecStart` で `pnpm run start` を実行させる
- 例えば `ExecStart=/usr/bin/pnpm run start`
- リポジトリのディレクトリを `WorkingDirectory` に設定する
- `Environment="NODE_ENV=production"`
```bash
sudo vim /etc/systemd/system/firefish.service
```
10. Firefish のサービスを有効化・起動する
```bash
sudo systemctl enable --now firefish
```
これで `http://localhost:3000` で Web クライアントが動くので、リバースプロキシやファイヤーウォールを設定して外部からアクセス可能にすればよいです。その設定には[私のブログ](https://blog.naskya.net/post/6kic0tebueju/)や[本家 Firefish の README](https://git.joinfirefish.org/firefish/firefish#-getting-started)が参考になるかもしれません。
正常にインストールできなかった場合には自力で解決しようとせず、[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。
## コンテナイメージを用いる
実行環境として [Podman](https://podman.io/) と [Docker](https://www.docker.com/) をサポートしています。Docker を使う場合には以下の `podman`, `podman-compose`, `--podman` をそれぞれ `docker`, `docker-compose`, `--docker` に読み替えてください。
x86_64 アーキテクチャの Linux のマシン上では、[`registry.code.naskya.net/naskya/firefish`](https://view.registry.code.naskya.net/naskya/firefish) に上げられている [OCI コンテナイメージ](https://opencontainers.org/)を利用できます。それ以外の環境で使うには、自分でコンテナイメージをビルドする必要があります。
1. このリポジトリを複製し、リポジトリのディレクトリに移る
```bash
git clone https://code.naskya.net/naskya/firefish
cd firefish
```
2. 設定ファイルのテンプレートを複製する
```bash
cp docker-compose.example.yml docker-compose.yml
cp .config/docker.example.env .config/docker.env
cp .config/example.yml .config/default.yml
```
3. PostgreSQL のユーザー名・データベース名・パスワードを決めて `./config/docker.env` に書く
```bash
vim .config/docker.env
```
4. `.config/default.yml` を編集する
```bash
vim .config/default.yml
```
`url` という項目を `example.com` から使いたいドメイン名に変更する
```yaml
# Final accessible URL seen by a user.
url: https://example.com/
```
データベースの設定を変える(データベース名・ユーザー名・パスワードはそれぞれさっき `.config/docker.env` に書いた `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`
```yaml
db:
host: localhost # ここを firefish_db に変える
port: 5432 # 変えない
db: firefish_db # ここをデータベース名に変える
user: firefish # ここをデータベースのユーザー名に変える
pass: very_strong_password # ここをデータベースのパスワードに変える
```
Redis の設定を変える
```yaml
redis:
host: localhost # ここを firefish_redis に変える
```
5. コンテナイメージをダウンロードまたはビルドする
```bash
./update.sh --install --podman
```
6. データベースのコンテナのみを起動する
```bash
podman-compose up db --detach
```
7. PGroonga を有効にする(`firefish` と `firefish_db` はそれぞれ自分が決めたユーザー名とデータベース名に変えて実行する)
```bash
podman-compose exec db psql --user=firefish --dbname=firefish_db --command='CREATE EXTENSION pgroonga;'
```
8. Firefish を起動する
```bash
podman-compose up --detach
```
これで `http://localhost:3000` で Web クライアントが動くので、リバースプロキシやファイヤーウォールを設定して外部からアクセス可能にすればよいです。その設定には[私のブログ](https://blog.naskya.net/post/6kic0tebueju/)や[本家 Firefish の README](https://git.joinfirefish.org/firefish/firefish#-getting-started)が参考になるかもしれません。
正常にインストールできなかった場合には自力で解決しようとせず、[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。

175
docs/migrate.md Normal file
View file

@ -0,0 +1,175 @@
# このフォークから本家版に移行する
## サーバーに Firefish を直接インストールしている場合
1. サーバーを停止する
```bash
sudo systemctl stop firefish
```
2. サーバーのバックアップを取る
3. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) の親ディレクトリ (e.g., `/home/firefish`) に移動する
```bash
cd /home/firefish
```
4. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える
```bash
mv firefish firefish.old
```
5. 元々 Firefish がインストールされていたディレクトリ (e.g., `./firefish`) と同じ名前でこのリポジトリをクローンする
```bash
git clone https://code.naskya.net/naskya/firefish firefish
```
6. 必要なファイルを元のディレクトリからコピーする
```bash
rm -rf firefish/files firefish/custom firefish/.config
cp -r firefish.old/files firefish
cp -r firefish.old/custom firefish
cp -r firefish.old/.config firefish
```
7. 全文検索エンジンMeilisearch, Sonic, Elasticsearch のいずれか)を使用している場合には、`.config/default.yml` からその設定を削除またはコメントアウトする
先頭に `#` をつけると設定をコメントアウトできます。
```yaml
#sonic:
# host: localhost
# port: 1491
# auth: SecretPassword
# collection: notes
# bucket: default
```
全文検索エンジンは停止またはアンインストールしてしまってよいです。本家の Firefish に戻るつもりがあるなら停止を、そうでなければアンインストールをおすすめします。
停止コマンドの例
```bash
sudo systemctl disable --now sonic
```
8. PostgreSQL のバージョンを確認する
```bash
psql --version
```
9. PGroonga をインストールする
コマンドの例(詳しくは[この投稿](https://post.naskya.net/notes/9ldi29amfanomef5)を参考にしてください)
```bash
sudo apt install -y software-properties-common
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:groonga/ppa
sudo apt install -y wget lsb-release
wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install -y -V ./groonga-apt-source-latest-$(lsb_release --codename --short).deb
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release --codename --short)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install -y -V postgresql-16-pgdg-pgroonga
```
10. `.config/default.yml` に書かれているデータベースの名前を確認する(以下の例では `firefish_db`
```yaml
db:
host: localhost
port: 5432
db: firefish_db # これ
```
11. 以下のコマンドを実行して PGroonga の拡張機能を有効にする(`firefish_db` の部分は自分のデータベース名に変えて実行)
```bash
sudo -u postgres psql --command="CREATE EXTENSION pgroonga;" --dbname=firefish_db
```
12. 新しい Firefish のディレクトリに入ってビルドする
```bash
cd firefish
./update.sh --install --native
```
13. サーバーを起動して動作を確認する
```bash
sudo systemctl start firefish
```
14. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf firefish.old
```
## コンテナで Firefish を動かしている場合
Docker を使う場合には以下の `podman`, `podman-compose`, `--podman` をそれぞれ `docker`, `docker-compose`, `--docker` に読み替えてください。
1. サーバーを停止し、バックアップを取る
2. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) の親ディレクトリ (e.g., `/home/firefish`) に移動する
```bash
cd /home/firefish
```
3. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える
```bash
mv firefish firefish.old
```
4. 元々 Firefish がインストールされていたディレクトリ (e.g., `./firefish`) と同じ名前でこのリポジトリをクローンする
```bash
git clone https://code.naskya.net/naskya/firefish firefish
```
5. 必要なファイルを元のディレクトリからコピーする
```bash
rm -rf firefish/files firefish/custom firefish/.config
cp -r firefish.old/files firefish
cp -r firefish.old/custom firefish
cp -r firefish.old/.config firefish
```
6. 以下のコマンドを実行して PGroonga を有効にする(`firefish` と `firefish_db` はそれぞれ `.config/docker.env``.config/default.yml` に書いた PostgreSQL のユーザー名とデータベース名に置き換える)
```bash
podman-compose up db --detach
podman-compose exec db psql --command='CREATE EXTENSION pgroonga;' --user=firefish --dbname=firefish_db
```
7. コンテナイメージをダウンロードまたはビルドする
```bash
./update.sh --install --podman
```
8. サーバーを起動して動作を確認する
```bash
podman-compose up --detach
```
9. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf firefish.old
```

208
docs/migrate_back.md Normal file
View file

@ -0,0 +1,208 @@
# このフォークから本家版に移行する
## サーバーに Firefish を直接インストールしている場合
1. サーバーのバックアップを取る
2. サーバーを停止する
```bash
sudo systemctl stop firefish
```
3. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) へ移動する
```bash
cd /home/firefish/firefish
```
4. 最新版にアップデートする
```bash
./update.sh
```
5. `.config/default.yml` に書かれているデータベースの名前を確認する(以下の例では `firefish_db`
```yaml
db:
host: localhost
port: 5432
db: firefish_db # これ
```
6. 次のコマンドでデータベースをいじる前に、そのコマンドが正常に動作するか確認する(`firefish_db` の部分は自分のデータベース名に変更する)
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -u postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=firefish_db
```
最後の行が `ROLLBACK` で終わっていれば問題ありません。そうでない場合には[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。
7. このフォークで加えられたデータベースへの変更を実際に取り消す(`firefish_db` の部分は自分のデータベース名に変更する)
```bash
sudo -u postgres psql --file=neko/revert.sql --dbname=firefish_db
```
8. PGroonga をアンインストールする
コマンドの例
```bash
sudo apt purge --remove postgresql-16-pgdg-pgroonga
sudo add-apt-repository --remove ppa:groonga/ppa
sudo apt-key del ACCC4CF8
sudo apt update
```
9. Firefish がインストールされているディレクトリの親ディレクトリ (e.g., `/home/firefish`) に行く
```bash
cd ..
```
10. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える
```bash
mv firefish firefish.old
```
11. Firefish がインストールされているディレクトリと同じ名前で本家版の Firefish を clone する
```bash
git clone https://git.joinfirefish.org/firefish/firefish.git firefish
```
12. 必要なファイルをコピーする
```bash
rm -rf firefish/files firefish/custom firefish/.config
cp -r firefish.old/files firefish
cp -r firefish.old/custom firefish
cp -r firefish.old/.config firefish
```
13. 新しい Firefish のディレクトリ (e.g., `./firefish`) に入り、`develop` ブランチに行く(実際には既に `develop` にいるはず)
```bash
cd firefish
git checkout develop
```
14. Firefish をビルドする
```bash
corepack prepare pnpm@latest --activate
pnpm install
NODE_ENV=production pnpm run build
pnpm run migrate
```
15. サーバーを起動して動作を確認する
```bash
sudo systemctl start firefish
```
16. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf firefish.old
```
## コンテナで Firefish を動かしている場合
Docker を使う場合には以下の `podman`, `podman-compose`, `--podman` をそれぞれ `docker`, `docker-compose`, `--docker` に読み替えてください。
1. サーバーのバックアップを取る
2. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) へ移動する
```bash
cd /home/firefish/firefish
```
3. 最新版にアップデートする
```bash
./update.sh --podman
```
4. 一度サーバーを再起動し、自分のサーバーが起動したことを Web から確認したら再度停止してデータベースのコンテナのみを起動する
```bash
podman-compose down
podman-compose up --detach
# 少し待って、サーバーが起動したことを確認する
podman-compose down
podman-compose up db --detach
```
5. `.config/docker.env` に書かれているユーザー名とデータベース名を確認する(以下の例では `firefish_db`
```env
# db settings
POSTGRES_PASSWORD=very_strong_password
POSTGRES_USER=firefish # これがユーザー名
POSTGRES_DB=firefish_db # これがデータベース名
```
6. 次のコマンドでデータベースをいじる前に、そのコマンドが正常に動作するか確認する(`firefish` と `firefish_db` の部分は自分のユーザー名とデータベース名に変更する)
```bash
podman-compose exec db psql --user=firefish --dbname=firefish_db --echo-all --set='ON_ERROR_STOP=1' --command="$(printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)")"
```
最後の行が `ROLLBACK` で終わっていれば問題ありません。そうでない場合には[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。
7. このフォークで加えられたデータベースへの変更を実際に取り消す(`mk1` の部分は自分のデータベース名に変更する)
```bash
podman-compose exec db psql --user=firefish --dbname=firefish_db --command="$(cat neko/revert.sql)"
```
8. Firefish がインストールされているディレクトリの親ディレクトリ (e.g., `/home/firefish`) に行く
```bash
cd ..
```
9. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える
```bash
mv firefish firefish.old
```
10. Firefish がインストールされているディレクトリと同じ名前で本家版の Firefish を clone する
```bash
git clone https://git.joinfirefish.org/firefish/firefish.git firefish
```
11. 必要なファイルをコピーする
```bash
rm -rf firefish/files firefish/custom firefish/.config
cp -r firefish.old/files firefish
cp -r firefish.old/custom firefish
cp -r firefish.old/.config firefish
```
12. 新しい Firefish のディレクトリ (e.g., `./firefish`) に入る
```bash
cd firefish
```
13. サーバーを起動して動作を確認する
```bash
podman-compose up --detach
```
14. 元々 Firefish がインストールされていたディレクトリを削除する
```bash
cd ..
rm -rf firefish.old
```

35
docs/trouble_shooting.md Normal file
View file

@ -0,0 +1,35 @@
# トラブルシュート
## 私にコマンドの実行ログを送る
実行したいコマンドの後ろに `|& tee /tmp/fflog` をつけてコマンドを実行します。例えば実行したいコマンドが `./update.sh` ならば
```bash
./update.sh |& tee /tmp/fflog
```
とし、実行したいコマンドが
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -u postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=firefish_db
```
ならば
```bash
printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -u postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=firefish_db |& tee /tmp/fflog
```
とします。
するとコマンドの実行ログが `/tmp/fflog` に保存されるので、保存されたテキスト全体をサーバーの OS などの環境の情報とともに[私](https://post.naskya.net/@dev)に送ってください。
ログのうちの参考になりそうだと思った一部だけを抜粋して送ることは絶対にしないでください。必要な情報が欠落していてもう一度全体を送り直してもらうことになったり、私が対処方法の判断を誤ったりする可能性が高まったりします。
テキストが一つの投稿に収まる長さの場合はコードブロックの記法(``` で囲む)を用いて投稿してもらってよいです。ログが一投稿に収まらない長さの場合は [Pastebin](https://pastebin.com/) などのサービスを使って共有してください。投稿にログファイルを直接添付して送ることはしないでください。
ログを私に送ったら `/tmp/fflog` は削除してよいです。
```bash
rm /tmp/fflog
```

13
docs/update.md Normal file
View file

@ -0,0 +1,13 @@
# アップデート方法
必ず添付されているアップデートスクリプト (`update.sh`) を用いてアップデートしてください。それ以外のアップデート方法はサポートされていません。
1. サーバーを停止し、バックアップを取る
2. Firefish のリポジトリのディレクトリに移動する
3. アップデートスクリプトを実行し、表示される指示に従う
```bash
./update.sh
```
正常にアップデートできなかった場合には自力で解決しようとせず、[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。